🪟 Windows TippsAffinity Ships a Major Update With Over 60 New Features(17.09.2026 um 19:13 Uhr)
🤖 Android TippsNutzer von Google Fotos dürfen sich auf großes Update freuen(17.09.2026 um 18:32 Uhr)
🕵️ HackingOnline-Täter locken Kinder in Chatgruppen - ooe.ORF.at(17.09.2026 um 17:22 Uhr)
🪟 Windows TippsAffinity Ships a Major Update With Over 60 New Features(17.09.2026 um 19:13 Uhr)
🤖 Android TippsNutzer von Google Fotos dürfen sich auf großes Update freuen(17.09.2026 um 18:32 Uhr)
🕵️ HackingOnline-Täter locken Kinder in Chatgruppen - ooe.ORF.at(17.09.2026 um 17:22 Uhr)
🔧 Programmierung 🕛 vor 1 Monat 16 Min Lesezeit
0

Teaching Claude Code to Direct: A Stateful Video-Editing Skill Built on Gemini's Interactions API and MCP

↗ Quelle (dev.to)
🗣️ Stimme:
📑 Inhaltsübersicht

TL;DR: ). Pick one of the paths below.






Path A: The plugin marketplace (fewest keystrokes)



Inside Claude Code, type:




CODE
/plugin marketplace add xbill9/omni-skill-claude
/plugin install omni-video@omni-skill-claude






This installs the skill and auto-registers the MCP server. The plugin manifest carries no API key (as it should!) — the server reads GEMINI_API_KEY from your environment, so make sure it's exported before launching Claude Code.






Path B: Clone and bootstrap (this repo)






CODE
# 1. Get the code
git clone https://github.com/xbill9/omni-skill-claude.git
cd omni-skill-claude

# 2. One-command setup: installs deps, registers the MCP server
# in .mcp.json, and prompts for your API key (stored in ~/gemini.key)
./init.sh

# 3. Restart Claude Code in this directory and approve the server
# when prompted. Verify with:
/mcp # should list omni-video-agent






That's genuinely it. init.sh is safe to rerun if anything looks off.






Path C: Install into your project



From a clone of the repo:




CODE
make init TARGET=/path/to/your/project






This copies the skill into <project>/.claude/skills/omni-video/ and writes the omni-video-agent entry into that project's .mcp.json. It reuses ~/gemini.key if you've set one up. Restart Claude Code in the target project, approve the server, done. Generated videos land in the project directory.






Path D: Docker (nothing on the host but Docker)



The repo ships a Dockerfile that builds an image containing only the server and its deps — no keys, no Claude Code:




CODE
make docker-build   # builds xbill9/omni-video-agent

claude mcp add omni-video-agent --env GEMINI_API_KEY="$(cat ~/gemini.key)" -- \
docker run --rm -i -e GEMINI_API_KEY -v "$PWD:$PWD" -w "$PWD" xbill9/omni-video-agent






The -v "$PWD:$PWD" -w "$PWD" mount matters: the server saves videos to disk and reads local files for the image/video-input tools, so the container must see your project at the same absolute path as the host. (One caveat: upload_to_youtube's first-run OAuth flow opens a browser, which containers famously don't have — run that one from a host install.)






Troubleshooting, the whole guide





  • /mcp doesn't list the server → restart Claude Code in the project directory.

  • The server won't start at all → the Gemini client is created at launch, so a missing key kills the process before it says hello. Run source set_env.sh (or export GEMINI_API_KEY) and restart.

  • Anything else → ask Claude to call get_help; failures come back as readable 🔴 ... strings.






Examples: a session in practice



Once installed, you talk to it in plain English. A real flow looks like:



You: "Generate a video of a red fox running through fresh snow at golden hour, 16:9."



Claude calls:




CODE
generate_video(
prompt="A tracking shot of a red fox running through fresh snow at golden hour",
aspect_ratio="16:9",
delivery="uri",
)
# 🟢 Video successfully saved!
# • Saved to: ./gen_1784759001.mp4
# • Interaction ID: v1_ChdpRU5...






You: "Nice. Make it nighttime, heavy snowfall."




CODE
edit_video(
previous_interaction_id="v1_ChdpRU5...",
edit_prompt="make it nighttime with heavy snowfall",
delivery="uri",
)
# 🟢 Video successfully saved!
# • Saved to: ./edit_1784759050.mp4
# • Interaction ID: v1_Xk9mPq2... ← a NEW id; the next edit chains this one






Same fox, same trees, same camera move — only the time of day and weather change. No re-prompting, no continuity roulette.



And for footage that didn't come from the model at all:



You: "Take ./team-photo.png and animate it — everyone waves at the camera."




CODE
animate_image(
image_path="./team-photo.png",
motion_prompt="the group smiles and waves at the camera, subtle handheld motion",
)






You: "Turn ./demo-screencast.mp4 into a Pixar-style animation."




CODE
edit_user_video(
video_path="./demo-screencast.mp4",
edit_prompt="Make it a Pixar animation style",
delivery="uri",
)






Both return interaction IDs too — so follow-up refinements switch to edit_video and go stateful from there. And when the cut is final:



You: "Ship it to YouTube, unlisted."




CODE
upload_to_youtube(
video_path="./edit_1784759050.mp4",
title="Fox in the Snow — generated with Omni Flash",
description="Generated and edited with the omni-video Claude Code skill.",
privacy_status="unlisted",
)
# 🟢 Video successfully uploaded to YouTube!
# • URL: https://www.youtube.com/watch?v=...






First run, the tool walks you through the one-time OAuth setup (a client_secrets.json from Google Cloud Console; the token is cached after that). Prompt to published URL, all inside one Claude Code session.






Dogfooding: about that demo video 🐕🍖



If the term is new to you: "eating your own dog food" means using your own product for real work, not just demoing it. It's the difference between "this should work" and "I ship with this every day." If a tool is good enough for your users, it should be good enough for you — and if it isn't, you'll be the first to feel the pain and fix it.



This repo dogfoods itself at every layer:




  • The skill is active inside its own repository — open Claude Code in a clone and the omni-video skill and omni-video-agent server are already wired up, so every development session doubles as an integration test.

  • The demo video for this article was generated by the exact skill the article describes, from inside a Claude Code session in this repo. These are the real calls and the real, unedited output — the same fox example used throughout the article, run for keeps:




CODE
generate_video(
prompt="A tracking shot of a red fox running through fresh snow at golden hour, "
"birch trees in the background, low sun flaring through the branches, "
"shallow depth of field, photorealistic, cinematic",
aspect_ratio="16:9",
delivery="uri",
)
# 🟢 Video successfully saved!
# • Saved to: gen_1784824947.mp4
# • Interaction ID: v1_Chdja1JpYXFyVkVkcWVqTWNQaHFULW9BWRIXY2tSaWFxclZFZHFlak1jUGhxVC1vQVk






One incremental edit later — note that only the change is described, nothing about the fox, the trees, or the camera:




CODE
edit_video(
previous_interaction_id="v1_Chdja1JpYXFyVkVkcWVqTWNQaHFULW9BWRIXY2tSaWFxclZFZHFlak1jUGhxVC1vQVk",
edit_prompt="make it nighttime with heavy snowfall, moonlight instead of golden hour",
delivery="uri",
)
# 🟢 Video successfully saved!
# • Saved to: edit_1784825027.mp4
# • Interaction ID: v1_Chdja1JpYXFyVkVkcWVqTWNQaHFULW9BWRIXd2tSaWF1RGdHXzZhX3VNUHI4LThzUTQ






A detail you only notice with real receipts in hand: the two interaction IDs share their first half. The session lineage is visible in the ID itself — the common prefix is the stored context both turns belong to, and the differing tail is the new turn. Also worth noting: both clips came out around 2.6 MB, under the ~4 MB inline ceiling — but delivery="uri" was the right call anyway, because you don't know the size until it's too late.



And here is that final cut — published straight from the same session with the skill's own upload_to_youtube tool (privacy_status="unlisted"), so the publishing step got dogfooded too:








  • The cover image at the top of this article is a frame from the first clip in the receipts above (gen_1784824947.mp4, two seconds in) — so the header art was generated by the tool the article describes, too.


  • If I wanted the ending changed, I wouldn't regenerate — I'd edit_video with the latest interaction ID (...UHI4LThzUTQ, the second one, not the first) and describe the change. That's the whole point.



Dogfooding is the cheapest credibility there is: no cherry-picked gallery, no "results may vary" fine print — the tool's real output is embedded right here, receipts and all. If the model had mangled the motion or lost the fox between edits, you'd be looking at the evidence right now.






Links





  • Repo:


  • Gemini Omni prompting guide:



This is a third-party community project, not affiliated with or endorsed by Anthropic or Google. Bring your own Gemini API key — and remember video generations are billable and slow, so nail the prompt, batch your edits, and save the YouTube upload for the final cut.

Vollständiger Original-Artikel
Den kompletten Beitrag mit allen Details direkt auf dev.to lesen.
↗ Original-Artikel auf dev.to lesen
Wie bewertest du diesen Beitrag?
1 Klick Feedback
Teilen mit Netzwerk & Team:

Community-Analysen & Experten-Meinungen 0

Verfasse deine eigene Analyse, teile Workarounds oder diskutiere diesen Vorfall im Blog.
Noch keine Community-Analyse verfasst. Markiere einen Textabschnitt oder klicke oben auf Eigene Analyse verfassen“!
Community Pulse: Relevanz-Einschätzung
1 Klick Experten-Votum
🔴 Akute Relevanz 0%
🟡 In Evaluierung 0%
🟢 Keine Auswirkung 0%
Spannende Innovation 0%
Verwandte Story-Cluster & Quellen (Vektor-KI)
Port 8095 Engine
1 Quelle
Projects are now a conversation with Claude
1 Quelle
Microsoft Brings Windows 11 Auto SR to Intel Core Ultra Series 3-Based PCs
1 Quelle
Affinity Ships a Major Update With Over 60 New Features
Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten Teaching Claude Code to Direct: A Stateful Video-Editing Skill Built on Gemini's Interactions API and MCP

Thematisch verwandte Begriffe: Teaching, Claude, Code, Direct · 6 Treffer

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...