296 lines
9.6 KiB
Markdown
296 lines
9.6 KiB
Markdown
# ComfyUI DropSend Node
|
|
|
|
Automatically upload your ComfyUI output files to Dropbox with optional encryption. Set it and forget it!
|
|
|
|
> **Prefer Google Drive?** Check out [DriveSend Node](https://github.com/machinepainting/ComfyUI_DriveSendNode)
|
|
|
|

|
|
|
|
---
|
|
|
|
## 🔄 How It Works
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
│ CLOUD (RunPod, etc.) │
|
|
│ │
|
|
│ ComfyUI generates files ──→ DropSend Node ──→ Uploads to Dropbox │
|
|
│ (png, mp4, etc.) │ │
|
|
│ │ │
|
|
│ ▼ │
|
|
│ ┌──────────────────────┐ │
|
|
│ │ Encryption OPTIONAL │ │
|
|
│ │ ☐ OFF: file.png │ │
|
|
│ │ ☑ ON: file.png.enc │ │
|
|
│ └──────────────────────┘ │
|
|
└─────────────────────────────────────────────────────────────────────────────┘
|
|
│
|
|
▼
|
|
☁️ DROPBOX
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
│ YOUR LOCAL MACHINE │
|
|
│ │
|
|
│ Dropbox syncs/downloads ──→ If encrypted: Run decrypt script (local) │
|
|
│ ──→ file.png (viewable!) │
|
|
│ │
|
|
│ If not encrypted: Ready to use! │
|
|
└─────────────────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
**Encryption is completely optional.** Leave `enable_encryption` off and files upload directly as-is.
|
|
|
|
---
|
|
|
|
## 📤 Features
|
|
|
|
### DropSend AutoUploader Node
|
|
- Real-time folder monitoring with optional subfolder support
|
|
- Supports: `.png`, `.jpg`, `.jpeg`, `.webp`, `.gif`, `.mp4`, `.avi`, `.mov`
|
|
- Optional AES-128 encryption before upload
|
|
- SHA256 checksum verification
|
|
- Queue system for reliable uploads
|
|
|
|
### DropSend Setup Node
|
|
- Generates Dropbox refresh token from App Key/Secret
|
|
- Outputs credentials for RunPod environment variables
|
|
- Optional encryption key generation
|
|
|
|
### Decryption Scripts (Local Use)
|
|
- Cross-platform scripts for macOS, Windows, and Linux
|
|
- Decrypt `.enc` files after downloading from Dropbox
|
|
|
|
---
|
|
|
|
## 💾 Installation
|
|
|
|
```bash
|
|
cd ComfyUI/custom_nodes/
|
|
git clone https://github.com/machinepainting/ComfyUI_DropSendNode.git
|
|
pip install -r ComfyUI_DropSendNode/requirements.txt
|
|
```
|
|
|
|
Restart ComfyUI after installation.
|
|
|
|
---
|
|
|
|
## 🔧 Dropbox App Setup
|
|
|
|
1. Login to [Dropbox](https://www.dropbox.com/)
|
|
2. Go to [Dropbox Developers](https://www.dropbox.com/developers/) → Click **Create Apps**
|
|
3. Select **Scoped Access** → **App Folder** (recommended)
|
|
4. Name your app → Click **Create app**
|
|
5. Go to **Permissions** tab and enable:
|
|
- `account_info.write`, `account_info.read`
|
|
- `files.metadata.write`, `files.metadata.read`
|
|
- `files.content.write`, `files.content.read`
|
|
6. Click **Submit** to save permissions
|
|
7. Go to **Settings** tab → Note your **App Key** and **App Secret**
|
|
|
|
> **Note:** If you can't select App Folder, create an `/Apps/` folder in your Dropbox root first.
|
|
|
|
---
|
|
|
|
## 🏃♂️ DropSend Setup (RunPod & Cloud Users)
|
|
|
|
### Step 1: Run Setup Node
|
|
|
|
1. Add **DropSend Setup Node** to your workflow
|
|
2. Configure:
|
|
- `app_key`: Paste your App Key
|
|
- `app_secret`: Paste your App Secret
|
|
- `auth_code`: Leave blank (for now)
|
|
- `dropbox_dest_folder`: `/Apps/ComfyUI_Output_Files` (or your choice)
|
|
- `storage_method`: **display_only**
|
|
- `encryption_key_method`: **Display Only** (or off if not using encryption)
|
|
|
|
3. Run the node → Two Dropbox popups appear
|
|
4. Accept permissions → Copy the authorization code
|
|
5. Paste code into `auth_code` field
|
|
6. Run the node again
|
|
|
|
### Step 2: Copy Credentials from Console
|
|
|
|
The console displays:
|
|
|
|
```
|
|
DROPBOX_APP_KEY: XXXXXXXXXX
|
|
DROPBOX_APP_SECRET: XXXXXXXXXX
|
|
DROPBOX_REFRESH_TOKEN: XXXXXXXXXX
|
|
COMFYUI_ENCRYPTION_KEY=XXXXXXXXXX (if encryption enabled)
|
|
```
|
|
|
|
**Copy only the value after the `:` or `=` sign** (not the variable name).
|
|
|
|
### Step 3: Create RunPod Secrets
|
|
|
|
1. Go to [RunPod.io](https://www.runpod.io) → Click **Secrets** in sidebar
|
|
2. Create these secrets:
|
|
|
|
| Secret Name | Secret Value |
|
|
|-------------|--------------|
|
|
| `DROPBOX_APP_KEY` | Your app key |
|
|
| `DROPBOX_APP_SECRET` | Your app secret |
|
|
| `DROPBOX_REFRESH_TOKEN` | Your refresh token |
|
|
| `COMFYUI_ENCRYPTION_KEY` | Your encryption key (if using encryption) |
|
|
|
|
### Step 4: Add Environment Variables to Pod
|
|
|
|
1. Edit your pod template → **Environment Variables** dropdown
|
|
2. Add each variable:
|
|
|
|
| Key | Value |
|
|
|-----|-------|
|
|
| `DROPBOX_APP_KEY` | `{{ RUNPOD_SECRET_DROPBOX_APP_KEY }}` |
|
|
| `DROPBOX_APP_SECRET` | `{{ RUNPOD_SECRET_DROPBOX_APP_SECRET }}` |
|
|
| `DROPBOX_REFRESH_TOKEN` | `{{ RUNPOD_SECRET_DROPBOX_REFRESH_TOKEN }}` |
|
|
| `COMFYUI_ENCRYPTION_KEY` | `{{ RUNPOD_SECRET_COMFYUI_ENCRYPTION_KEY }}` |
|
|
|
|
3. Click **Set Overrides** → Deploy
|
|
|
|
### Step 5: Test Upload
|
|
|
|
1. Add **DropSend AutoUploader Node** to your workflow
|
|
2. Set `run_process` to **True**
|
|
3. Run a workflow that generates an image
|
|
4. Check your Dropbox folder!
|
|
|
|
---
|
|
|
|
## 💻 DropSend Setup (Local Users)
|
|
|
|
1. Add **DropSend Setup Node** to your workflow
|
|
2. Configure:
|
|
- `app_key`: Paste your App Key
|
|
- `app_secret`: Paste your App Secret
|
|
- `auth_code`: Leave blank (for now)
|
|
- `dropbox_dest_folder`: `/Apps/ComfyUI_Output_Files`
|
|
- `storage_method`: **env_file**
|
|
- `encryption_key_method`: **save to .env** (or off)
|
|
|
|
3. Run the node → Accept Dropbox permissions → Copy auth code
|
|
4. Paste code into `auth_code` field → Run again
|
|
5. Restart ComfyUI to load the `.env` file
|
|
6. Add **DropSend AutoUploader Node** and run!
|
|
|
|
---
|
|
|
|
## 🔐 Decryption Scripts (Local Use Only)
|
|
|
|
The `/scripts/` folder contains scripts to decrypt `.enc` files on your local machine.
|
|
|
|
> ⚠️ **LOCAL USE ONLY** — Run these after downloading encrypted files from Dropbox.
|
|
|
|
### Prerequisites
|
|
|
|
```bash
|
|
pip install cryptography
|
|
```
|
|
|
|
### Store Your Encryption Key
|
|
|
|
**macOS (Keychain):**
|
|
1. Open Keychain Access → File → New Password Item
|
|
2. Name: `ComfyUI_Encryption_Key`, Account: `ComfyUI`, Password: your key
|
|
|
|
**Windows (Environment Variable):**
|
|
1. Win + R → `sysdm.cpl` → Advanced → Environment Variables
|
|
2. New User Variable: `COMFYUI_ENCRYPTION_KEY` = your key
|
|
|
|
**Linux (Environment Variable):**
|
|
```bash
|
|
echo 'export COMFYUI_ENCRYPTION_KEY="your_key_here"' >> ~/.bashrc
|
|
source ~/.bashrc
|
|
```
|
|
|
|
### Run Decryption
|
|
|
|
```bash
|
|
cd ComfyUI/custom_nodes/ComfyUI_DropSendNode/scripts
|
|
|
|
# macOS
|
|
./decrypt_folder_mac.sh
|
|
|
|
# Windows
|
|
python decrypt_folder_win.py
|
|
|
|
# Linux
|
|
./decrypt_folder_linux.sh
|
|
|
|
# Cross-platform
|
|
python decrypt_folder.py
|
|
```
|
|
|
|
---
|
|
|
|
## 🛠️ Troubleshooting
|
|
|
|
### Files Not Uploading
|
|
- Check console for error messages
|
|
- Verify `run_process` is **True**
|
|
- Confirm Dropbox folder starts with `/Apps/`
|
|
|
|
### Encryption Key Not Found
|
|
- Verify secret name is exactly `COMFYUI_ENCRYPTION_KEY`
|
|
- Check environment variable is set in pod template
|
|
- Restart pod after adding environment variables
|
|
|
|
### Authorization Failed
|
|
- Re-run setup with `reconnect` set to **true**
|
|
- Generate a new auth code
|
|
|
|
---
|
|
|
|
## ⚠️ Security Best Practices
|
|
|
|
1. **Never commit your `.env` file** — Add to `.gitignore`
|
|
2. **Backup your encryption key** — Without it, encrypted files cannot be recovered
|
|
3. **Use secure key storage** — Prefer Keychain/Environment Variables over plain text
|
|
|
|
---
|
|
|
|
## 🧪 Tested On
|
|
|
|
- macOS 13+ (Ventura, Sonoma)
|
|
- Python 3.10 / 3.11
|
|
- ComfyUI (Feb 2026)
|
|
- RunPod GPU instances
|
|
|
|
---
|
|
|
|
## 📁 Repository Structure
|
|
|
|
```
|
|
ComfyUI_DropSendNode/
|
|
├── __init__.py
|
|
├── dropsend_uploader_node.py
|
|
├── dropsend_setup_node.py
|
|
├── dropbox_upload.py
|
|
├── dropbox_auth_manager.py
|
|
├── encrypt_file.py
|
|
├── monitor_output.py
|
|
├── oauth_handler.py
|
|
├── requirements.txt
|
|
├── README.md
|
|
├── .gitignore
|
|
└── scripts/
|
|
├── decrypt_folder.py
|
|
├── decrypt_folder_mac.sh
|
|
├── encrypt_folder_mac.sh
|
|
├── decrypt_folder_win.py
|
|
├── encrypt_folder_win.py
|
|
├── decrypt_folder_linux.sh
|
|
└── encrypt_folder_linux.sh
|
|
```
|
|
|
|
---
|
|
|
|
## License
|
|
|
|
MIT
|
|
|
|
---
|
|
|
|
Shout-out to Adam for his contributions to this node build!
|