DIGIT Gemini Omni Video
Keep editing the same clip like you're chatting
- first_frame
- source_video
- reference1
- reference2
- reference3
- reference4
- reference5
- reference6
- reference7
- video
- video_paths
- status
- interaction_id
Most video-gen nodes are one-shot: prompt, wait, get a clip, and if you want a change you start over with a different prompt and hope. This node wraps Gemini's Interactions API - the gemini-omni-flash-preview model that's built for stateful, conversational generation. Generate a clip, get back an interaction_id, and the intended loop is: feed that ID back into the node on the next run so your follow-up prompt edits the same conversation instead of starting fresh. The closest thing to "ask the video model to change the ending" that exists right now.
One honesty note before you get excited: the README describes that loop, but the currently shipped code raises if you actually set previous_interaction_id on Vertex AI - the platform path doesn't support it for this model yet. The node exposes the plumbing (interaction_id output, previous_interaction_id input) so the loop is ready when Google flips it on. Today, the edit path that works is connecting source_video and writing an edit prompt. It's preview-era tech either way.
How it works
The node submits a generation through Vertex AI's Interactions API, waits for completion, and returns the video plus the new interaction_id. The task dropdown (default auto) picks the mode from what you connect: prompt only → text-to-video, first_frame → image-to-video, reference1…7 → reference-to-video, source_video → edit.
The inputs that matter:
- prompt - required (there's no conversational continuation to fall back on yet, despite the plumbing).
- model -
gemini-omni-flash-preview, the only option right now. - aspect_ratio - 16:9 or 9:16.
- duration_seconds - 3–10.
- batch_count - 1–8 concurrent jobs (each becomes its own interaction).
- task -
auto, or force a specific mode. - seed - 0 is random.
- first_frame / source_video / reference1…7 - the mode triggers.
- previous_interaction_id - the conversational hook the node exposes, but which the current Vertex AI path rejects. Keep it empty for now.
- delivery -
inline(default, returns the file in the response) oruri(writes to your GCS bucket;output_gcs_uriis required for that). URI delivery is the path for larger output. - store / background - storage and async-run toggles.
Outputs: video (a list), video_paths, status, and interaction_id - the ID you'd feed back in once follow-ups land.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/thedepartmentofexternalservices/comfyui-digit.git
cd comfyui-digit
pip install -r requirements.txt
gcloud auth application-default login
gcloud config set project YOUR_PROJECT_ID
(Or ComfyUI Manager → search comfyui-digit → install.) Restart ComfyUI, look under DIGIT.
Common issues
The current code is explicit about its own limitation: set previous_interaction_id and you get previous_interaction_id is not supported on Vertex AI for gemini-omni-flash-preview. Connect source_video and use an edit prompt instead. That's the pack telling you the conversational loop isn't wired to the platform yet - the working edit path today is source_video + an edit prompt, and you cannot use source_video and previous_interaction_id at the same time anyway. Also note reference images and first_frame are mutually exclusive, and the node raises if you connect both.
Otherwise it's the standard Vertex story: auth via gcloud, project billing, region "global" for Omni. And set expectations - this is a preview model, so output quality and consistency are a notch below the dedicated Veo node in the same pack. Reach for Omni when you want the conversational workflow; reach for Veo when the clip has to be right.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| model | COMBO | gemini-omni-flash-preview | 1 options: gemini-omni-flash-preview |
| aspect_ratio | COMBO | 16:9 | 2 options: 16:9, 9:16 |
| duration_seconds | INT | 83–10 | — |
| batch_count | INT | 11–128 | Number of video jobs to submit before polling. Jobs run concurrently, subject to Google quota. |
| task | COMBO | auto | 5 options: auto, text_to_video, image_to_video, reference_to_video, edit |
| seed | INT | 00–2147483647 | — |
| gcp_project_id | STRING | GCP project ID. Auto-detected from DIGIT_GCP_PROJECT env var or GCP metadata. | |
| gcp_region | STRING | GCP region. Omni Flash uses 'global'. Auto-detected from DIGIT_GCP_REGION env var. | |
| first_frameopt | IMAGE | — | |
| source_videoopt | VIDEO | — | |
| previous_interaction_idopt | STRING | — | |
| deliveryopt | COMBO | inline | 2 options: inline, uri |
| output_gcs_uriopt | STRING | GCS URI required for Vertex URI delivery, e.g. gs://my-bucket/output/ | |
| storeopt | BOOLEAN | true | — |
| backgroundopt | BOOLEAN | false | — |
| reference1opt | IMAGE | — | |
| reference2opt | IMAGE | — | |
| reference3opt | IMAGE | — | |
| reference4opt | IMAGE | — | |
| reference5opt | IMAGE | — | |
| reference6opt | IMAGE | — | |
| reference7opt | IMAGE | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| video | VIDEO | — |
| video_paths | VIDEO_PATHS | — |
| status | STRING | — |
| interaction_id | STRING | — |