Easy Telegram Uploader
Easy Telegram Uploader
- image
- VHS_FILENAMES
Picture this: you're running a long batch or a slow video render on your rig, and you're in another room - or out of the house entirely. ComfyUI finishes, and the result just sits there until you walk back. Easy Telegram Uploader is the fix: a terminal node that takes your final image or video and DMs it to your phone the moment it's done, no API key, no account, no file server. It's a tiny one-node pack, and for "I want to see the render before I get home" it does exactly one job and does it fine.
How it works
The name is slightly misleading - there's no upload service in the middle. The node is just a Telegram Bot API client: it POSTs your image to https://api.telegram.org/bot<your-token>/sendPhoto or your video to /sendVideo, with your chat_id, and Telegram's own servers do the delivery to whatever device is logged in. The only dependency is requests. No models, no torch, no heavy install - the torch/numpy/PIL conversions it does at runtime are all things ComfyUI already ships.
It's an output node (OUTPUT_NODE = True), so it has no output sockets and it's meant to sit at the end of your graph. It runs every time the graph runs, and it logs its whole life story in Chinese to your console - verbose, but genuinely useful when something fails.
The inputs that matter
Only two required, both dead simple:
- bot_token (STRING) - your bot's token from @BotFather (
/newbotcreates one). Yes, you need to make a bot first; it takes two minutes and costs nothing. - chat_id (INT) - the Telegram user ID you're sending to.
Then the optional part, which is where the node earns its keep:
- image (IMAGE) - wire in any image output. Batches are handled: each frame in the batch is sent as its own photo.
- VHS_FILENAMES - this is Video Helper Suite's file-names output. If you render video with VHS, drag its
VHS_FILENAMESsocket in and the node picks the first file ending in-audio.mp4, falling back to plain.mp4. It deliberately prefers the muxed-with-audio version, which is the right instinct for a video you're about to watch on a phone.
Send both at once if you like - it'll fire the images first, then the video.
Install
Via ComfyUI Manager (search "EasyTgUploader"), or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/LineSeaFood/ComfyUI-EasyTgUploader
cd ComfyUI-EasyTgUploader
pip install -r requirements.txt # just "requests"
Then restart ComfyUI. That's the entire setup - no model downloads, no config file. Find it in the node menu under its own EasyTgUploader category as "Easy Telegram Uploader".
Where people get burned
- The chat_id trap. The schema hard-caps
chat_idatmin: 0, and the node refuses anything ≤ 0. That works for your personal user ID - but group chats and channels use negative IDs, so you can't DM a group with this node, no matter how hard you squint. To find your own ID: message your bot once, then hithttps://api.telegram.org/bot<token>/getUpdatesin a browser and readmessage.from.idout of the JSON. - Video hits a 50MB wall. Telegram's Bot API tops out at 50MB per video via
sendVideo, and the node enforces it with a hard error. A long or high-bitrate render will bounce; trim or re-encode before expecting it through. - The token lives in the workflow. This is the one thing the KB's API-node security frame warns about that actually applies here: your bot token is stored in the node field, which means it's in your workflow JSON. Export or share that file and your token leaks. Don't put a token you can't afford to lose in a workflow you share - and if one ever leaks,
/revokeit at BotFather and generate a new one. A bot token isn't a model API key, but treat it the same way.
Verdict
It's not a slick node - no captions, no keyboard, no retry logic, and the 50MB cap rules out big videos. But for "render finished, notify me," it's the simplest thing that works, and it pairs naturally with VHS. If you want remote control of ComfyUI from Telegram (prompting, queueing, checking status), that's a different, bigger project. This one just talks, and sometimes that's all you need.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| bot_token | STRING | — | |
| chat_id | INT | 00–999999999999 | — |
| imageopt | IMAGE | — | |
| VHS_FILENAMESopt | VHS_FILENAMES | — |
Outputs (0)
No outputs