Nodes/ComfyUI Beeble AI/Beeble Upload
ComfyUI Node

Beeble Upload

Upload once, run a hundred SwitchX prompts — Beeble Upload

By am-pipeline-prod·Created 4 months ago·Updated 4 months ago· 3
Beeble Upload
  • source
  • video
  • beeble_uri
media_typeimage
filenameinput.png
fps24.0

Every time you run a Beeble SwitchX node with a wired source, it uploads that source again. Fine for one shot. Wasteful when you're doing a prompt sweep - fifty variations off the same reference - because that's fifty uploads of the same bytes. Beeble Upload exists to break that loop: it pre-stages an asset on Beeble's storage once and hands you a beeble:// URI you can feed into as many SwitchX runs as you like.

The author's own framing is the right one: use it for batch/sweep workflows, for cached re-runs of the same workflow, and when you want the upload boundary explicit and visible. Don't use it for a single one-shot generation - the SwitchX node uploads internally, and adding a staging step is just extra graph for nothing.

The inputs

  • source (IMAGE, required) - the asset. A single still for image, a multi-frame batch for video. Same data shape as the SwitchX source/alpha/reference_image inputs.
  • media_type (enum, default image) - how to encode: image writes a PNG, video encodes the frame batch as MP4 (libx264, yuv420p).
  • filename (STRING, default input.png) - mostly cosmetic; the extension is auto-corrected to .png or .mp4 to match media_type, so it just shows up tidily on the Beeble dashboard.
  • fps (FLOAT, default 24) - only used when media_type is video.
  • video (optional VIDEO socket) - the modern path. If you're coming from a file-backed or lazy video pipeline (Topaz output, AM Read Video's VIDEO socket, an AM Pipe transform chain), wiring this uploads the underlying file directly - no IMAGE-batch materialisation, no uint8 re-encode, less RAM. When wired it forces media_type to video and ignores source.

The output

One socket, and it's the whole point: beeble_uri (STRING), a beeble://... URL. Take it and drop it into any SwitchX node's source_uri, reference_image_uri, or alpha_uri field instead of wiring the IMAGE again. The node's ComfyUI input cache also works in your favor: re-run the same workflow and it reuses the previous URI instead of re-uploading.

Mechanically it's the same two-step dance the SwitchX node does internally: encode locally, ask the API for a presigned upload URL, then PUT the bytes. You're not uploading to "a folder" - you're getting back a reference the Beeble API can fetch on demand.

Setup and gotchas

Install via ComfyUI Manager (comfyui-beeble-ai) or clone + pip install -r requirements.txt into ComfyUI/custom_nodes, restart, and set your key: BEEBLE_API_KEY env var, or api_key = "..." in ~/.config/comfyui-beeble-ai/config.toml (%APPDATA%\comfyui-beeble-ai\config.toml on Windows). No models, no heavy dependencies - the pack only pulls requests, imageio[ffmpeg], Pillow, and numpy.

Worth knowing: staging an upload doesn't cost generation credits, and the hard limits of the underlying API still apply downstream - a video upload beyond 240 frames or ~2.77M pixels will just fail at SwitchX time, so trim before you stage. And a beeble:// URI is only useful to the Beeble API; if you switch tools, the reference is meaningless. One more honest caveat, same as the rest of the pack: this is a self-serve MIT wrapper, not officially maintained, so budget for a fork if your pipeline depends on it.

CategoryBeeble AI

Inputs (5)

NameTypeDefaultDescription
sourceIMAGEThe source asset to upload. Single still for media_type='image' (PNG); multi-frame batch for media_type='video' (MP4). Same data shape as the Beeble SwitchX 'source' / 'alpha' / 'reference_image' inputs.
media_typeCOMBOimageHow to encode and upload the IMAGE input. 'image': single still, written as PNG. 'video': frame batch, encoded as MP4 (libx264, yuv420p).
filenameSTRINGinput.pngFilename hint sent to the API. Extension is auto-corrected to .png or .mp4 to match media_type, so this is mostly cosmetic for the Beeble dashboard.
fpsoptFLOAT24.01–240Frames per second (only used when media_type='video').
videooptVIDEOOptional VIDEO input. When wired, this node uploads the underlying file directly (for `VideoFromFile` sources) or PyAV-encodes to a temp MP4 (for `VideoFromComponents` / lazy AM transform chains) — no IMAGE-batch materialisation, no re-encode from uint8. media_type is forced to 'video' and `source` is ignored. Wire this when upstream is Topaz Video Enhance, AM Read Video → VIDEO socket, or a lazy AM transform chain.

Outputs (1)

NameTypeDescription
beeble_uriSTRING