$npx -y skills add calesthio/OpenMontage --skill gemini-omniGenerate and conversationally edit short videos with Google Gemini Omni Flash (gemini-omni-flash-preview). Use when: (1) iterating on a clip with natural-language edits instead of regenerating ("make the phone invisible, keep everything else the same"), (2) generating 3-10s 720
| 1 | # Gemini Omni Flash (Google DeepMind) |
| 2 | |
| 3 | Gemini Omni is Google DeepMind's video generation **and editing** model family, announced at I/O 2026. The first model, **Gemini Omni Flash** (`gemini-omni-flash-preview`, developer access since June 30, 2026), generates 3-10 second clips at 720p/24fps with synthesized audio via the Gemini **Interactions API**. Its differentiator in the OpenMontage fleet is **stateful conversational editing**: each generation returns an `interaction_id`, and a follow-up call with `previous_interaction_id` edits that video in place — no other wrapped provider can refine a clip without regenerating it. |
| 4 | |
| 5 | OpenMontage wraps it as `gemini_omni_video` (native Gemini API, no gateway). It shares `GOOGLE_API_KEY`/`GEMINI_API_KEY` with `google_imagen` and `google_tts` — one key, three capabilities. Paid tier only: ~$0.10 per second of output video (billed as 5,792 output tokens/sec at $17.50/1M). |
| 6 | |
| 7 | ## When to pick it (and when not) |
| 8 | |
| 9 | | Use it for | Prefer another provider for | |
| 10 | |---|---| |
| 11 | | Iterative refinement — generate, review, then edit the same clip in layers | One-shot cinematic hero clips (→ Seedance 2.0, see `seedance-2-0`) | |
| 12 | | Editing an existing/uploaded clip (restyle, add/remove objects, change text) | Clips longer than 10s or above 720p | |
| 13 | | On-screen rendered text and word-by-word text beats | Seed-reproducible generations (no seed support) | |
| 14 | | Reference-image-bound subjects/styles via prompt tags | First/last-frame interpolation (→ `veo_video`) | |
| 15 | | Timecode-scheduled multi-beat clips from one prompt | Non-English narration (English only fully supported) | |
| 16 | |
| 17 | Route through `video_selector` for generation operations. **Editing (`edit_video`) is a direct-tool operation** — call `gemini_omni_video` from the registry, because the multi-turn interaction state lives outside the selector's model. |
| 18 | |
| 19 | ## Generation prompting |
| 20 | |
| 21 | Describe **scene + camera + lighting + motion + audio**. Official example: |
| 22 | |
| 23 | > Continuous, unbroken handheld shot of a fluffy tabby cat sitting on a sunny windowsill, looking out into a leafy garden. The cat's tail twitches slowly, and its ears rotate slightly toward ambient noises. Sunbeams illuminate dust motes in the air. |
| 24 | |
| 25 | - **Force a single shot** explicitly: "In a single continuous shot," / "No scene cuts." Otherwise the model may cut between scenes. |
| 26 | - **Negatives go in prose** — there is no `negative_prompt` parameter: "No dialogue," "No extra sound effects." |
| 27 | - **No sampler controls**: system instructions, temperature, top_p, and seeds are all unsupported. The prompt is the only lever. |
| 28 | - **Meta-prompt for quality**: "Consider micro-detail, expression and timing to create a very rich, detailed but entirely natural scene." |
| 29 | |
| 30 | ### Timecode syntax |
| 31 | |
| 32 | Schedule beats with bracketed ranges or natural language — this maps directly onto OpenMontage scene-plan timings: |
| 33 | |
| 34 | ``` |
| 35 | [0-3s] A person is walking [3-6s] They stop and turn around |
| 36 | ``` |
| 37 | |
| 38 | > "After 3 seconds, a woman enters the scene." / "At 5s the chorus starts in the background audio." |
| 39 | |
| 40 | ### Audio and on-screen text |
| 41 | |
| 42 | Audio is synthesized automatically; direct it in the prompt: "Include calm background music," "The audio is a low tinny radio broadcast in the background." Rendered text works and can be timed: |
| 43 | |
| 44 | > One word on the screen at a time: 'did, you, know, that, Omni, can, do, awesome, text?' Each word appears for 1s. |
| 45 | |
| 46 | ## Reference images (`<FIRST_FRAME>` / `<IMAGE_REF_N>` tags) |
| 47 | |
| 48 | Pass local images via `reference_image_paths` (they are sent in order), then bind them to roles **inside the prompt** with tags. `<IMAGE_REF_N>` indexes from 0 in the order supplied: |
| 49 | |
| 50 | ``` |
| 51 | in the style of <IMAGE_REF_0> a woman <IMAGE_REF_1> is walking |
| 52 | ``` |
| 53 | |
| 54 | ``` |
| 55 | [0-3s] A studio fashion sequence. Starting with woman <IMAGE_REF_0>, she is |
| 56 | holding <IMAGE_REF_1> [3-6s] Then we see the man <IMAGE_REF_2> holding <IMAGE_REF_3> |
| 57 | ``` |
| 58 | |
| 59 | - `<FIRST_FRAME>` makes an image the opening frame: `<FIRST_FRAME> a woman is walking`. |
| 60 | - Use high-resolution images; describe the intended motion specifically rather than "make it move." |
| 61 | - Say what each image *is* (product / character / style / background reference) — the model decides usage from context. |
| 62 | |
| 63 | ## Conversational editing (the differentiator) |
| 64 | |
| 65 | **Editing |