Skip to content

4nrry/media-agent

v0.14.0MIT

Media production by an agent on a machine with an 8 GB GPU and commercial licensing, one skill per modality with rules that hold for any model: image and video generation, image retouching, voice-over at -16 LUFS, music and sound with per-item licenses, video composed as code, editing finished video, a 3D product turntable, scripted 3D scenes with characters in Blender, and sourcing rules for factual videos. Two hooks warn: where vipsthumbnail -o really writes, and when Kinocut runs before any skill is loaded.

media-agent

Media production by an agent on your own machine with an 8 GB GPU, where commercial licensing matters and tools fail without saying so. One skill per modality: its rules hold for any model of that kind, and each tool's notes sit in the skill's references/, so a new model is a new reference file, not a new skill.

/plugin install media-agent@4nrry
SkillRules forBundled tools
image-generationexplore, choose on a contact sheet, final still, what never to generateGrok Imagine (Grok Build, Hermes), Gemini (agy, API) wrappers; contact-sheet.sh
video-generationstill-to-video, one camera move, resolution by use, checking every clipGemini Omni and Grok video wrappers
image-retouchingweight licenses, removal vs inpainting, one GPU job at a timeheadless ComfyUI (comfy-run.py)
voiceone sentence per file, caption vs spoken text, -16 LUFS, the durations JSONvo-normalize.sh, hermes-tts.sh (xAI voice); TTS engine notes
audiolicenses and credits, exact-length music, SFX, fixing real recordingsElevenLabs (eleven.py), ACE-Step, stock search (media-search.py)
video-compositionvideo as code: frame-driven scenes, captions from the voice JSON, formats from one source, short vertical video for Reels, Shorts and TikTokRemotion, HTML + Chrome + ffmpeg
video-editingre-render vs patch the mp4, checking the outputKinocut, registered as an MCP server (.mcp.json)
3d-turntablea 360° product turn as transparent framesheadless Blender (turntable.py)
3d-scenesscripted sets, rigged .glb figures that keep their rotation and pose, preview and final quality, frozen-frame checkscene_kit.py, check_motion.py (headless Blender)
sourced-videotwo opened sources per fact, what stays out, equal time for each side, sources on screencheck_sources.py (episode spec)

Two hooks warn and never block:

  • hooks/guard-vipsthumbnail.sh (PreToolUse on Bash(vipsthumbnail *)) warns when -o name without a slash will write next to the input file.
  • hooks/skill-before-kinocut.sh (PreToolUse on the Kinocut MCP tools) asks the agent to load the matching skill when it calls Kinocut before any media-agent skill, once per session. The first call still runs.

The plugin does not decide licenses for you (Remotion's employee limit, ElevenLabs' free tier): the skills state the rule and the user decides. Paths and keys come from environment variables (COMFY_HOME, *_API_KEY).

Evidence: behavior checks from one real production, not effect measurements — bench/plugins/media-agent/results/2026-10-13-production-checks-CLAIMS.md.