Nodes/OnlyGemini/OG Omni Flash
ComfyUI Node

OG Omni Flash

Restyle Your Own Footage, and Get the Motion Back Mostly Intact

By choquevolqueta·Created 10 days ago·Updated 6 days ago· 0
OG Omni Flash
  • video
  • ref_image_1
  • ref_image_2
  • ref_image_3
  • ref_image_4
  • ref_image_5
  • ref_image_6
  • first_frame
  • last_frame
  • frames
  • audio
  • interaction_id
◄prompt►
◄modelgemini-omni-1.1-flash►
◄taskauto►
◄aspect_ratio16:9►
◄resolution720p►
◄seed69►
◄api_key►
◄previous_interaction_id►

Here's the workflow that made me sit up: build the shot in Blender as a previz - grey materials, real camera move, real character timing - then hand that ugly clip to a model with four or five reference images of the look you want and get back something that moves the same way and looks finished. That's what OmniFlashGen ("OG Omni Flash") does, and it's the one thing in this pack Veo cannot do, because Veo only accepts videos it made itself.

It's built on Gemini Omni Flash (gemini-omni-1.1-flash by default, or gemini-omni-flash-preview) through the Interactions API - different model, different endpoint, different behaviour from the Veo node next door. Read the caveats before you plan an edit around it.

How it reads your inputs

The node's real work is translation. It assembles an ordered input list - your video, then up to six reference images, then optional first and last frames, then text - and writes the text itself as a labelled brief. Your video is tagged <VIDEO_0> and described as the source to edit, with an explicit instruction to preserve camera movement, timing and subject motion. References are tagged <IMAGE_REF_n> and told not to be used as literal frames, only as style or subject guides. Your prompt is appended underneath.

That framing is why it works: references nagging it to copy their content would fight the motion you're trying to keep. So use prompt for style and content ("1960s Kodachrome, dusty warm light"), not choreography.

The video goes up as a real upload to the Files API, which the node polls until processing finishes, and the request carries store: True - you're saving a session, not just sending bytes. Then it downloads the result, decodes frames and audio with PyAV, and returns the interaction id.

The inputs you'll actually set

task defaults to auto, letting the model infer the job from what you connected. Set it to edit when you've wired a video in and mean it - the node refuses edit with no video instead of guessing. The rest are text_to_video, image_to_video, reference_to_video.

prompt is the style brief; model picks the build. aspect_ratio is 16:9 or 9:16 only. resolution offers 720p, 1080p, 4k, and honesty is required: 720p is native, the other two are upscales. seed is sent when it's zero or above, so -1 genuinely means "let the model choose" - unlike the Veo node, where the seed field is cosmetic.

Optional: video (the VIDEO type, which is why this needs a recent ComfyUI), ref_image_1 through ref_image_6, first_frame, last_frame, and previous_interaction_id - the good bit. Paste the id from a previous run and you're continuing the same session ("now make it night", "warmer grade") without re-explaining the shot.

Outputs are frames (a list holding one batched tensor), audio, and interaction_id. Feed the id into previous_interaction_id on the next node and you have an iteration chain.

The caveats that decide whether this is your tool

Ten seconds, silently trimmed. Anything over 10 s gets cut to the first 10 s. The node prints a line, then quietly edits what's left. Cut your previz first or you'll wonder where the ending went.

Not frame-perfect. The model regenerates guided by your motion. Camera move and action survive approximately, not pixel-exactly. If you're compositing tracked elements onto specific frames, this is the wrong tool.

Region. Uploaded-video editing is unavailable in the EEA, Switzerland and the UK. Google's restriction, not a bug.

People and minors. Media with recognizable people or minors is blocked - a fascinating constraint when your use case is styling footage of someone acting.

Your footage is uploaded and the session is stored. No way around it; that's the mechanism.

Install

Manager → search OnlyGemini → Install Custom Nodes → restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/choquevolqueta/OnlyGemini.git
cd OnlyGemini
pip install -r requirements.txt

This is the node that actually requires a recent ComfyUI: it takes the native VIDEO type and serialises through comfy_api.latest, so an older install fails on import. You also need av (in requirements) to turn its returned mp4 into frames and audio, plus a Gemini key - GEMINI_API_KEY, a .env in the pack folder, or the api_key widget, which also accepts an env var name.

A core Load Video into video is the whole input side. Generate references locally or with OG NanoBanana Generate and they drop into ref_image_1..6.

Where people get burned

task='edit' requires a video input. You set the task before wiring the video, or the video node is muted. Wire a VIDEO in, or switch task to auto.

Provide a prompt, a video, or at least one reference image. The node checks for actual content before spending your money, and an empty prompt with nothing connected trips it.

Edit rejected with no useful explanation. Check three things in order: length over 10 s, region, recognizable people.

Upload seems to hang. Large clips take a while to process on Google's side before generation starts, and the node waits up to 30 minutes on that poll. Encode smaller - 720p, short - and it's dramatically quicker. The generation step has the same ceiling, so a busy day can genuinely time out. Retry before blaming your graph.

Categoryvideo/generation

Inputs (17)

NameTypeDefaultDescription
promptSTRING—
modelCOMBOgemini-omni-1.1-flash2 options: gemini-omni-1.1-flash, gemini-omni-flash-preview
taskCOMBOauto5 options: auto, edit, text_to_video, image_to_video, reference_to_video
aspect_ratioCOMBO16:92 options: 16:9, 9:16
resolutionCOMBO720p3 options: 720p, 1080p, 4k
seedINT69-1–2147483646—
api_keySTRINGGemini API key or env variable name
videooptVIDEOVideo base a editar/reestilizar.
ref_image_1optIMAGEImagen de referencia estética.
ref_image_2optIMAGEImagen de referencia estética.
ref_image_3optIMAGEImagen de referencia estética.
ref_image_4optIMAGEImagen de referencia estética.
ref_image_5optIMAGEImagen de referencia estética.
ref_image_6optIMAGEImagen de referencia estética.
first_frameoptIMAGEPrimer fotograma (interpolación).
last_frameoptIMAGEÚltimo fotograma (interpolación).
previous_interaction_idoptSTRINGID de una edición previa de Omni para continuar (multiturno).

Outputs (3)

NameTypeDescription
framesIMAGE—
audioAUDIO—
interaction_idSTRING—