{"id":50860918,"url":"https://github.com/kelvinzer0/temuploader","last_synced_at":"2026-06-14T21:04:42.448Z","repository":{"id":363033176,"uuid":"1260351312","full_name":"kelvinzer0/temuploader","owner":"kelvinzer0","description":"📤 Temporary file uploader with automatic fallback across 10+ providers","archived":false,"fork":false,"pushed_at":"2026-06-07T04:43:17.000Z","size":44,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-07T06:20:14.096Z","etag":null,"topics":["automation","cli-tool","command-line","curl","developer-tools","devtools","fallback","file-sharing","file-transfer","file-upload","linux","open-source","pastebin","python","python-cli","python-library","shell","temporary-files","terminal","upload"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kelvinzer0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-05T12:00:32.000Z","updated_at":"2026-06-07T04:43:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kelvinzer0/temuploader","commit_stats":null,"previous_names":["kelvinzer0/temuploader"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/kelvinzer0/temuploader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kelvinzer0%2Ftemuploader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kelvinzer0%2Ftemuploader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kelvinzer0%2Ftemuploader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kelvinzer0%2Ftemuploader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kelvinzer0","download_url":"https://codeload.github.com/kelvinzer0/temuploader/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kelvinzer0%2Ftemuploader/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34337560,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","cli-tool","command-line","curl","developer-tools","devtools","fallback","file-sharing","file-transfer","file-upload","linux","open-source","pastebin","python","python-cli","python-library","shell","temporary-files","terminal","upload"],"created_at":"2026-06-14T21:04:38.286Z","updated_at":"2026-06-14T21:04:42.420Z","avatar_url":"https://github.com/kelvinzer0.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# temuploader\n\nStop losing files to dead upload links. One command, auto-fallback, always works.\n\n## What is this?\n\nA CLI tool that uploads files and text to temporary hosting services. If the first provider is down, it tries the next one automatically. No API keys, no signup, no config.\n\n## Install\n\nThe easiest way, works on any system:\n\n```bash\npipx install temuploader\n```\n\nIf you don't have pipx:\n\n```bash\n# Ubuntu/Debian\nsudo apt install pipx\npipx install temuploader\n\n# macOS\nbrew install pipx\npipx install temuploader\n\n# Arch\nsudo pacman -S python-pipx\npipx install temuploader\n```\n\nOr with pip (may need --break-system-packages on newer systems):\n\n```bash\npip install temuploader\n```\n\nOr in a virtual environment:\n\n```bash\npython3 -m venv .venv\nsource .venv/bin/activate\npip install temuploader\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/kelvinzer0/temuploader\ncd temuploader\npip install -e .\n```\n\n## Usage\n\nUpload a file:\n\n```bash\ntemuploader myfile.txt\n```\n\nUpload a folder (auto-zips it):\n\n```bash\ntemuploader ./my-folder\n```\n\nUpload text directly:\n\n```bash\ntemuploader -t \"Hello world!\"\n```\n\nPipe from stdin:\n\n```bash\ncat logs.txt | temuploader -\n```\n\nGet just the URL for scripting:\n\n```bash\nurl=$(temuploader myfile.txt --download-url)\n```\n\nJSON output:\n\n```bash\ntemuploader myfile.txt --json\n```\n\n## How it works\n\nWhen you upload something, temuploader picks the right provider based on file type and size. If that provider fails (timeout, rate limit, down), it automatically tries the next one. You always get a working link.\n\n```\nTrying tmpfiles.org...  failed (timeout)\nTrying litterbox...     failed (rate limited)\nTrying uguu.se...       success!\nhttps://n.uguu.se/abc123.txt\n```\n\n## Providers\n\n10 providers, no API keys needed:\n\n- **tmpfiles.org** - 100MB, 60 min retention, fast and reliable\n- **litterbox** - 100MB, 24h to 1 week retention (configurable with --time)\n- **uguu.se** - 100MB, 48h retention, clean API\n- **catbox.moe** - 200MB, permanent hosting\n- **gofile.io** - 500MB, 10 day retention, biggest size limit\n- **filebin.net** - 100MB, bin system, no signup\n- **paste.rs** - 1MB, text only, simplest API\n- **del.dog** - 1MB, text only, permanent pastes\n- **rentry.co** - 1MB, text only, markdown support\n- **termbin.com** - 1MB, text only, netcat-based\n\nText files use paste services. Binary files use file hosting providers. Both fallback automatically.\n\n## Options\n\n```\n-p, --providers    Pick specific providers to try\n--no-fallback      Stop after the first provider fails\n--json             Output as JSON\n--download-url     Output only the download URL\n-v, --verbose      Show what's happening\n-l, --list         List all providers and their limits\n--time             Retention time for litterbox (24h/72h/1w)\n```\n\n## Python API\n\n```python\nfrom temuploader import upload, upload_text, quick_share\n\n# Upload a file\nresult = upload(\"data.csv\")\nprint(result.download_url)\n\n# Upload a folder (auto-zipped)\nresult = upload(\"./my-folder\")\nprint(result.download_url)\n\n# Upload text\nresult = upload_text(\"emergency paste!\")\nprint(result.download_url)\n\n# One-liner\nurl = quick_share(\"just give me a url\")\n```\n\n## Why not just use X?\n\nEvery temp upload service dies eventually. transfer.sh, 0x0.st, file.io... they all go down, get rate limited, or block your IP. Instead of memorizing which service works this week, use one tool that tries them all.\n\n## Contributing\n\nAdd a new provider: create a class in `providers.py` that extends `BaseProvider`. That's it.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkelvinzer0%2Ftemuploader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkelvinzer0%2Ftemuploader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkelvinzer0%2Ftemuploader/lists"}