Unified Python tooling for uploading files through CLI, GUI, and TUI workflows.
FileUploader gives you one normalized upload core for temporary file hosts, cloud-backed providers, and legacy upload scripts. Use it from a modern CLI, a lightweight desktop GUI, or a Rich-powered terminal UI.
| Created by j0rd1s3rr4n0: jordiserrano.me | github.com/j0rd1s3rr4n0 |
Most file hosts expose different request shapes, response formats, and failure messages. FileUploader wraps them behind one interface with normalized provider metadata, upload results, and errors.
| What you need | Use this |
|---|---|
| Quick public link, no account | catbox, fileio, 0x0, tempsh, transfersh, gofile |
| Automation and scripting | python -m fileuploader_cli ... --json --no-banner |
| Desktop workflow | python -m fileuploader_gui |
| Interactive terminal flow | python -m fileuploader_tui |
| Account-backed storage | 4shared, box, dropbox, mediafire, jsonbin, anonfilesnew |
| Interface | Command | Best for |
|---|---|---|
| CLI | python -m fileuploader_cli |
Scripts, CI jobs, JSON output, repeatable commands |
| Package CLI | python -m fileuploader |
Equivalent package entrypoint for the same CLI |
| GUI | python -m fileuploader_gui |
Provider-aware desktop uploads and copyable results |
| TUI | python -m fileuploader_tui |
Guided terminal use with Rich tables and prompts |
Install dependencies:
git clone https://github.com/j0rd1s3rr4n0/FileUploader.git
cd FileUploader
python -m pip install -r requirements.txt
List providers:
python -m fileuploader_cli services
Upload without registration:
python -m fileuploader_cli upload --service catbox path/to/file.txt
Upload with JSON output for scripts:
python -m fileuploader_cli upload --service gofile path/to/file.txt --json
Hide the banner for automation:
python -m fileuploader_cli --no-banner services
Launch the desktop GUI:
python -m fileuploader_gui
Launch the terminal UI:
python -m fileuploader_tui
Use these first when you just need a public link and do not want to create an account or pass tokens:
python -m fileuploader_cli upload --service catbox path/to/file.txt
python -m fileuploader_cli upload --service fileio path/to/file.txt
python -m fileuploader_cli upload --service 0x0 path/to/file.txt
python -m fileuploader_cli upload --service transfersh path/to/file.txt
python -m fileuploader_cli upload --service tempsh path/to/file.txt
Human output is readable by default. JSON output is clean and banner-free:
python -m fileuploader_cli upload --service gofile path/to/file.txt --json
Some workflows also support copying processed output:
python -m fileuploader_cli upload --service catbox path/to/file.txt --copy
Pass credentials directly:
python -m fileuploader_cli upload --service anonfilesnew path/to/file.txt --api-key YOUR_API_KEY
python -m fileuploader_cli upload --service box path/to/file.txt --api-key BOX_OAUTH_ACCESS_TOKEN
python -m fileuploader_cli upload --service 4shared path/to/file.txt --api-key "oauth_token=...&oauth_signature=..."
Or read them from environment variables:
set ANONFILESNEW_API_KEY=YOUR_API_KEY
python -m fileuploader_cli upload --service anonfilesnew path/to/file.txt --api-key-env ANONFILESNEW_API_KEY
When you do not remember the flags, use the guided flow:
python -m fileuploader_cli guided
python -m fileuploader_cli [--no-banner] services [--json] [--active-only]
python -m fileuploader_cli [--no-banner] guided
python -m fileuploader_cli [--no-banner] upload PATH --service SERVICE [--api-key KEY] [--api-key-env ENV] [--json] [--plaintext] [--copy] [--verbose]
python -m fileuploader_cli [--no-banner] download --service SERVICE [--url URL] [--server SERVER --file-id FILE_ID --filename NAME] [--json]
python -m fileuploader_cli [--no-banner] info FILE_ID --service SERVICE [--api-key KEY] [--api-key-env ENV] [--json]
CLI service list:
Service Upload Download Info API key Status
------------ ------ -------- ---- ------- ------
catbox yes no no no active
fileio yes no no no active
gofile yes yes no no active
jsonbin yes no no yes active
mega no no no yes disabled
GUI workflow:
Choose provider -> choose action -> enter only required fields -> run -> copy result
TUI workflow:
Rich provider table -> guided prompts -> normalized result panel
| Feature | Description |
|---|---|
| Unified provider core | One interface for provider metadata, upload results, and provider errors. |
| Provider-aware UX | CLI, GUI, and TUI ask only for the fields needed by the selected action. |
| No-registration providers | Many services work without account creation or API keys. |
| Account-backed providers | Box, Dropbox, MediaFire, JSONBin, and AnonFilesNew support token/key workflows. |
| JSON automation | --json returns parseable output without banner text. |
| Script-friendly banner control | --no-banner hides the terminal banner for automation. |
| Clipboard support | Copy supported outputs directly from CLI/GUI flows. |
| GoFile encryption workflow | Legacy GoFile scripts support AES-GCM encrypt/decrypt helpers. |
| Testable design | Tests use mocked providers and avoid real network calls. |
| Provider | Service | Upload | Download | Info | API key | Status |
|---|---|---|---|---|---|---|
| 0x0.st | 0x0 |
Yes | No | No | No | Active |
| 4shared | 4shared |
Yes | No | Yes | Yes | Active |
| AnonFilesNew | anonfilesnew |
Yes | No | Yes | Yes | Active |
| blipbin | blipbin |
Yes | No | No | No | Active |
| Box | box |
Yes | No | Yes | Yes | Active |
| Catbox | catbox |
Yes | No | No | No | Active |
| cupload.io | cupload |
Yes | No | No | No | Active |
| Dropbox | dropbox |
Yes | No | Yes | Yes | Active |
| dropfile.dev | dropfiledev |
Yes | No | No | No | Active |
| EasySend | easysend |
Yes | No | No | No | Active |
| file.io | fileio |
Yes | No | No | No | Active |
| GoFile | gofile |
Yes | Yes | No | No | Active |
| JSONBin | jsonbin |
Yes | No | No | Yes | Active |
| Litterbox | litterbox |
Yes | No | No | No | Active |
| MediaFire | mediafire |
Yes | No | No | Yes | Active |
| MoonPush | moonpush |
Yes | No | Yes | No | Active |
| qurl.sh | qurl |
Yes | No | No | No | Active |
| Temp.sh | tempsh |
Yes | No | No | No | Active |
| tmpfile.link | tmpfilelink |
Yes | No | No | No | Active |
| transfer.sh | transfersh |
Yes | No | No | No | Active |
| Uguu | uguu |
Yes | No | No | No | Active |
| MEGA | mega |
No | No | No | Yes | Disabled |
| AnonFiles | anonfiles |
Yes | No | No | No | Deprecated |
| BayFiles | bayfiles |
Yes | No | No | No | Deprecated |
| Service | Good for |
|---|---|
catbox |
Simple public file links |
fileio |
Temporary links with JSON responses |
0x0 |
Minimal terminal uploads |
tempsh |
Temporary file sharing |
transfersh |
Terminal-first uploads via PUT |
gofile |
Upload plus basic download support |
Retention, file size limits, rate limits, and content policies are controlled by each upstream provider.
| Service | Credential |
|---|---|
4shared |
OAuth query parameters |
anonfilesnew |
API key |
box |
OAuth access token |
dropbox |
OAuth access token |
jsonbin |
JSONBin API key |
mediafire |
MediaFire session token |
Prefer --api-key-env for repeat usage so secrets stay outside shell history.
For 4shared, pass the already signed OAuth query string through --api-key or FOURSHARED_OAUTH_PARAMS. The provider uses the simple upload endpoint for files below 150 MB and uploads to folder 0 unless a future interface supplies a different folder_id.
Disabled providers are shown in service lists but are not offered as active GUI choices. Deprecated providers remain available for compatibility, but upstream APIs may fail or disappear.
MEGA is currently disabled because reliable uploads need MEGAcmd or an SDK-backed implementation rather than a simple HTTP upload endpoint.
The unified interfaces should be the default for new usage. Legacy provider scripts remain available for specialized flows.
GoFile encryption helpers:
python GoFile/main.py -u path/to/file.txt --encrypt --password "your-password"
python GoFile/main.py --decrypt-file file.txt.enc --password "your-password" --decrypt-output file.txt
AnonFilesNew legacy entrypoint:
python AnonFilesNew.com/anonfilesnew.py path/to/file.txt --api-key YOUR_API_KEY --json
JSONBin chunk uploader:
python JSONBin.com/jsonbin_uploader.py upload path/to/file.txt --api-key YOUR_API_KEY --manifest upload-manifest.json
Install locally:
git clone https://github.com/j0rd1s3rr4n0/FileUploader.git
cd FileUploader
python -m pip install -r requirements.txt
Run tests:
python -m unittest discover -s tests
Compile modules:
python -m compileall fileuploader fileuploader_cli.py fileuploader_gui.py fileuploader_tui.py
Smoke checks:
python -m fileuploader_cli services --json
python -m fileuploader_cli --no-banner services
python -c "from fileuploader_tui import service_table; print(len(service_table().rows))"
python -c "import fileuploader_gui; print(fileuploader_gui.default_state())"
Project layout:
fileuploader/ Shared provider core, registry, formatters, and CLI
fileuploader_cli.py CLI-only launcher
fileuploader_gui.py Tkinter desktop interface
fileuploader_tui.py Rich terminal interface
GoFile/ Legacy GoFile scripts and encryption helpers
AnonFilesNew.com/ Legacy AnonFilesNew scripts
JSONBin.com/ JSONBin chunk uploader
tests/ Unit and smoke tests
docs/ Interface documentation
Planned improvements:
Pull requests are welcome. For larger changes, open an issue with:
Keep new providers behind the shared provider core and cover them with mocked tests.