⚓ Bada Async Gemini Studio
A prompt desk that never touches your VRAM
- prompt
A prompt writer that runs nothing on your GPU
Every other prompt-enhancer node runs a model - a small abliterated LLM on your own card, loading and unloading between generations. This one doesn't. It's a writing desk: describe what you want, pick an engine tuned for your target model, get finished English prompt text back. The "zero VRAM, no queue block" claim is real, and for the boring reason - the work happens in the node's own panel (talking to Google), and the node on your canvas is a carrier for the string.
That framing matters, because the pack bills it as a studio, and a studio is a UI. Open it and you get four tabs: MiniMax H3 for video-with-audio prompts (text, first-frame, first-last-loop, last-frame, all-in-one reference), LTX-Video 2.5, KREA 2 for photorealism, and Uncensored Gemini chat. Those names are the targets, not models you're running here. The Gemini tab is the one doing language-model work.
What the node in your graph really does
Read the schema and it's almost anticlimactic. The required input is generated_prompt, a multiline STRING. The optional input is system_instruction, also a multiline STRING. There's one output - prompt, a STRING.
So the studio writes into generated_prompt, and the node emits that text. Wire prompt into the text of a CLIPTextEncode and you're done. No image input to attach references to (the studio handles that itself), no API-key field, no temperature or seed knob - and if you want a negative prompt, that's a second encoder you fill in yourself.
The one field worth actually touching is system_instruction. Its default is the author's own brief - read any attached reference images for palette, lighting and framing, then "output ONLY the final detailed prompt in English without any markdown conversational preamble or commentary." That last sentence is doing more work than it looks like. Chat models leak their habits into your conditioning: role delimiters, "Here is your enhanced prompt:", markdown scaffolding. On an LLM-encoded checkpoint those tokens are not neutral. Override the instruction when you want a different register - a tag-leaning brief for a booru-trained base, or "no camera jargon" if you're tired of anamorphic flares.
Why bother, when the encoder is already an LLM
Because the blank page is the bottleneck. The community pattern is chaining - one model describes, another rewrites for the target, then you generate - and "prompt enhancer" mentions went 12 → 66 → 188 → 253 between 2023 and mid-2026. It also nudges the two places LLM prompters usually fail: preamble bleed, and the enhancer inventing detail you never asked for.
The honest trade: a local abliterated 8B is free, offline and uncensored, but writes mediocre prose and eats VRAM. This is the opposite - nicer English, nothing loaded, but your prompt and any reference images leave the machine. The Uncensored Gemini tab pushes safety filters to BLOCK_NONE, backed by a "3-pass zero-refusal" ladder (direct → cinematic override → artistic metaphor). Be clear-eyed about that: it's a rephrasing loop, not abliteration. There are no weights to edit, so it changes your input, not Google's filter.
Installing it
It ships in the Bada Utils pack, so you install the pack - all seven modules come with it.
- ComfyUI Manager: search
ComfyUI-Bada-Utils, Install. - Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/bada-ya/ComfyUI-Bada-Utils.git
Then restart ComfyUI and hard-refresh the browser with Ctrl + F5 - the sidebar panel and node UI are frontend code and won't appear on a soft refresh.
No model files and no heavy pip dependencies in the README. For the API-backed engines, the key lives in the studio's own config rather than a node field - set nothing up and you'll get errors or empty output, with the node saying nothing about why.
One more thing to switch off: Nodes 2.0. The README asks for Classic Canvas rendering for the same reason rgthree does - the Vue-based node rewrite breaks custom on-canvas widgets, and small packs don't get ported for free.
Traps, in the order you'll hit them
Generate first, then queue. The value only exists once the studio has put text in generated_prompt. Queue before you generate and you'll cheerfully sample last session's prompt.
"Send to active CLIP" needs an active CLIPTextEncode selected on the canvas - it injects into whatever node is selected. Bypassing this node doesn't disable anything either, since it's a passthrough: the output is whatever string is sitting in the widget.
The duration numbers are prompt spec, not generation. "1~30s, up to 721 frames" is what you're asking a video model for. Your model still has its own ceiling - Wan's native window is around 81 frames, roughly five seconds - so a beautiful 721-frame prompt won't produce one clip that long.
It's a small, single-author pack that reaches the network. Not an accusation, just the category: the one big security incident in this ecosystem was an LLM/vision node - arbitrary Python with full OS access, no sandbox - and an enhancer holding an API key is exactly the shape of thing people install without reading.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| generated_prompt | STRING | — | |
| system_instructionopt | STRING | You are a world-class AI prompt engineer specializing in cinematic video and image generation (such as Wan 2.1, LTX-Video, FLUX, SDXL, Midjourney). Carefully analyze any attached reference images (noticing color palettes, lighting, subject appearance, framing, texture) along with the user's instructions. Craft a rich, detailed, coherent, and visually captivating English prompt. Describe subjects, actions, environment, camera movement, atmospheric lighting, and high-fidelity textures. Output ONLY the final detailed prompt in English without any markdown conversational preamble or commentary. | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |