|
2 | 2 | <img src="Assets/seamless_logo.png" width="300" alt="Seamless App Icon"> |
3 | 3 | </p> |
4 | 4 |
|
5 | | -# Seamless |
6 | | - |
7 | | - |
8 | | -Seamless is a straightforward, open-source file transfer utility designed to solve the common problem of sending files instantly between different operating systems on a local network. |
9 | | - |
10 | | -It is built for users and developers who prefer a simple, cable-free alternative to moving files between mobile and desktop platforms. |
11 | | - |
12 | | ---- |
13 | | - |
14 | | -## Downloads & Pre-built Releases |
15 | | - |
16 | | -Pre-built application binaries are available for common platforms, allowing you to use Seamless without needing to clone the repository or run scripts: |
17 | | - |
18 | | -* **Android:** Download the `.apk` file from the [Releases page](https://github.com/iman-zamani/seamless/releases). |
19 | | -* **macOS:** Download the pre-built application bundle from the [Releases page](https://github.com/iman-zamani/seamless/releases). |
20 | | -* **Windows / Linux:** Requires Python and manual setup (see "Getting Started" below). |
21 | | - |
22 | | ---- |
23 | 5 |
|
24 | | -## Key Features |
25 | | - |
26 | | -* **Cross-Platform File Transfer:** Seamlessly share files between **Android, macOS, Windows, and Linux** using your local Wi-Fi network. |
27 | | -* **Zero-Configuration Discovery:** Devices automatically locate each other using UDP broadcasting on the local subnet. No manual IP configuration is required. |
28 | | -* **High-Speed Transfers:** Utilizes raw TCP sockets with optimized 64KB buffer sizes, ensuring stable and fast transfers limited only by your router speed. |
29 | | -* **Modern UI:** Features a native-feeling dark-mode GUI using `CustomTkinter` on desktop and Material Design on Android. |
30 | | - |
31 | | ---- |
32 | | - |
33 | | -## Tech Stack |
34 | | - |
35 | | -### Desktop (Windows / macOS / Linux) |
36 | | - |
37 | | -| Component | Technology | Details | |
38 | | -| :--- | :--- | :--- | |
39 | | -| **Language** | Python 3.x | | |
40 | | -| **GUI Framework** | [CustomTkinter](https://github.com/TomSchimansky/CustomTkinter) | For a modern, dark-mode native look. | |
41 | | -| **Networking** | Native `socket` & `threading` | Used for asynchronous discovery and file streaming. | |
| 6 | +# Seamless |
42 | 7 |
|
43 | | -### Mobile (Android) |
| 8 | +Seamless is an open-source utility for transferring files between Android, macOS, Windows, and Linux over a local network. It uses UDP for device discovery and TCP for file transmission without requiring external servers or internet access. |
44 | 9 |
|
45 | | -| Component | Technology | Details | |
46 | | -| :--- | :--- | :--- | |
47 | | -| **Language** | Kotlin | Targeting Android 7.0 (Nougat) and higher. | |
48 | | -| **Concurrency** | Kotlin Coroutines (`Dispatchers.IO`) | For non-blocking network operations. | |
49 | | -| **Networking** | `java.net.Socket` / `DatagramPacket` | TCP for streaming, UDP for discovery. | |
| 10 | +----- |
50 | 11 |
|
51 | | ---- |
| 12 | +## Downloads |
52 | 13 |
|
53 | | -## Getting Started (For Developers) |
| 14 | +Binaries are available for Android and macOS. Windows and Linux users must run from source. |
54 | 15 |
|
55 | | -### Prerequisites |
| 16 | +| Platform | Installation Method | |
| 17 | +| :--- | :--- | |
| 18 | +| **Android** | [Download .apk (Releases)](https://github.com/iman-zamani/seamless/releases) | |
| 19 | +| **macOS** | [Download App Bundle (Releases)](https://github.com/iman-zamani/seamless/releases) | |
| 20 | +| **Win / Linux** | Run from source (see *Development Setup* below) | |
56 | 21 |
|
57 | | -* **Desktop:** Python 3.8 or higher. |
58 | | -* **Android:** Android 7.0 (Nougat) or higher. |
59 | | -* **Network:** Both devices must be connected to the **same local Wi-Fi network**. |
| 22 | +----- |
60 | 23 |
|
61 | | -### 1\. Running the Desktop Client |
| 24 | +## Usage |
62 | 25 |
|
63 | | -The desktop application is located in the root of the repository as `seamless.py`. |
| 26 | +**Note:** The receiver must be in "Receive" mode before the sender begins scanning. |
64 | 27 |
|
65 | | -1. **Clone the repository:** |
66 | | - ```bash |
67 | | - git clone https://github.com/iman-zamani/seamless.git |
68 | | - cd seamless |
69 | | - ``` |
| 28 | +1. **Network:** Connect both devices to the same Wi-Fi network. |
| 29 | +2. **Receiver:** Open the application and select **Receive Files**. |
| 30 | +3. **Sender:** |
| 31 | + * Open the application and select **Send Files**. |
| 32 | + * Select the file(s) to transfer. |
| 33 | + * Click **Scan Network**. |
| 34 | + * Select the target device from the list to initiate transfer. |
70 | 35 |
|
71 | | -2. **Install dependencies (requires `customtkinter`):** |
72 | | - ```bash |
73 | | - pip install customtkinter |
74 | | - ``` |
| 36 | +----- |
75 | 37 |
|
76 | | -3. **Run the application:** |
77 | | - ```bash |
78 | | - python seamless.py |
79 | | - ``` |
| 38 | +## Features |
80 | 39 |
|
81 | | -### 2\. Running the Android App |
| 40 | + * **Local Network Only:** Transfers occur strictly over LAN; no data leaves the local subnet. |
| 41 | + * **Discovery:** Uses UDP broadcasting to locate devices without manual IP entry. |
| 42 | + * **Transport:** Uses raw TCP sockets with 64KB buffers for data streaming. |
| 43 | + * **Cross-Platform:** Python/CustomTkinter (Desktop) and Kotlin (Android) clients are fully interoperable. |
82 | 44 |
|
83 | | -1. Open the `Android/` folder in **Android Studio**. |
84 | | -2. Sync Gradle files, connect your device or start an emulator. |
85 | | -3. Click **Run** in Android Studio. |
86 | | -4. *Note: Ensure **Storage permissions** are granted upon the first launch on the Android device.* |
| 45 | +----- |
87 | 46 |
|
88 | | ---- |
| 47 | +## Troubleshooting |
89 | 48 |
|
90 | | -## Usage Guide (Send & Receive) |
| 49 | +If connection fails, verify the following: |
91 | 50 |
|
92 | | -The process is initiator-driven, requiring the receiver to be ready before the sender begins scanning. |
| 51 | + * **Network Isolation:** Ensure both devices are on the exact same SSID. Guest networks often isolate clients. |
| 52 | + * **VPN:** Disable VPNs on both devices, as they route traffic away from the local network. |
| 53 | + * **Firewall:** |
| 54 | + * **Windows:** Allow `python.exe` through the firewall. |
| 55 | + * **macOS:** Grant permissions in **System Settings \> Privacy & Security \> Local Network**. |
93 | 56 |
|
94 | | -### Sending Files (Sender's Steps) |
| 57 | +----- |
95 | 58 |
|
96 | | -1. Open Seamless on both the sender and the receiver. |
97 | | -2. The **Receiver** must click **"Receive Files"** first to start listening. |
98 | | -3. On the **Sender**, click **"Send Files"** and select the file(s) you wish to transfer. |
99 | | -4. Click **"Scan Network"** and wait for the receiver's name to appear. |
100 | | -5. Select the **Receiver's name** from the list to begin the transfer. |
| 59 | +## Development Setup |
101 | 60 |
|
| 61 | +### Tech Stack |
102 | 62 |
|
103 | | ---- |
| 63 | + * **Desktop:** Python 3.x, CustomTkinter, Native Sockets. |
| 64 | + * **Android:** Kotlin, Coroutines (min SDK: Android 7.0). |
104 | 65 |
|
105 | | -## Troubleshooting |
| 66 | +### Desktop (Windows / Linux / macOS) |
106 | 67 |
|
107 | | -If devices fail to connect, check the following common issues: |
| 68 | +Requires Python 3.8+. |
108 | 69 |
|
109 | | -* **Network Consistency:** Verify both devices are connected to the **exact same Wi-Fi SSID**. Ensure neither device is connected to a "Guest" network, as these often isolate clients. |
110 | | -* **VPN Interference:** Local network traffic is often bypassed by VPNs. Disable any active VPNs on both the sender and receiver. |
111 | | -* **Firewall:** |
112 | | - * **Windows:** Allow `python.exe` and the Android app through your firewall for both Private and Public networks. |
113 | | - * **macOS:** Check **System Settings > Privacy & Security > Local Network** and ensure your terminal/IDE has permission enabled. |
| 70 | +```bash |
| 71 | +git clone https://github.com/iman-zamani/seamless.git |
| 72 | +cd seamless |
| 73 | +pip install customtkinter |
| 74 | +python seamless.py |
| 75 | +``` |
114 | 76 |
|
115 | | ---- |
| 77 | +### Android |
116 | 78 |
|
117 | | -## Protocol Details |
| 79 | +Open the `Android/` directory in **Android Studio**. Sync Gradle files and run on a connected device or emulator. |
118 | 80 |
|
119 | | -Seamless uses a simple, raw protocol built on standard socket primitives: |
| 81 | +### Protocol Overview |
120 | 82 |
|
121 | | -* **Discovery Protocol:** UDP broadcast on port `5000`. |
122 | | - * Listening devices bind to `0.0.0.0:5000`. |
123 | | - * Broadcasting device sends `HERE:Username` to the subnet broadcast address (e.g., `192.168.1.255`). |
124 | | -* **Transfer Protocol:** Raw TCP socket on port `5001`. |
125 | | - * **Header Format:** `filename<SEPARATOR>filesize\n` |
126 | | - * **Body:** The raw binary data of the file is streamed immediately following the header, in 64KB chunks. |
| 83 | + * **Discovery:** UDP Broadcast on port `5000`. Payload: `HERE:Username`. |
| 84 | + * **Transfer:** TCP Stream on port `5001`. |
| 85 | + * **Header:** `filename<SEPARATOR>filesize\n` |
| 86 | + * **Body:** Binary file data. |
127 | 87 |
|
128 | | ---- |
| 88 | +----- |
129 | 89 |
|
130 | 90 | ## License |
131 | 91 |
|
132 | | -This project is licensed under the **GPL (General Public License)**. See the `LICENSE` file in the repository for full details. |
| 92 | +Licensed under the **GPL (General Public License)**. See `LICENSE` for details. |
| 93 | + |
0 commit comments