{"id":20886,"plugin_id":"plugins_6aa93d4d067c8191bdd2a1969bee8916","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:16:38.089Z","digest":"bbef62997f3c52e75e6698a4cb735aaacd3cd2b8bbd1b24853b9e4d3ca6c286e","against":null,"payload":{"description":"Agent Media OS, the single skill for every media need in a HyperFrames project. Resolve BGM, SFX, image, icon, brand logo, voice, color grade, or LUT into a frozen local file or paste-ready block + ledger record (one verb, `resolve`); generate via TTS / music / image models when the catalog misses; produce voiceover, transcription, captions, and background removal through one shared audio engine; operate on media (cut / reframe / transform); and reuse assets across projects. Also use for vague feedback that real footage looks dark, flat, boring, should feel retro/camcorder/print/ASCII, needs privacy, or needs a media reveal.","included_files":[{"relative_path":".gitignore","size_in_bytes":17},{"relative_path":"audio/assets/sfx/CREDITS.md","size_in_bytes":1183},{"relative_path":"audio/assets/sfx/chime.mp3","size_in_bytes":27309},{"relative_path":"audio/assets/sfx/click-soft.mp3","size_in_bytes":11702},{"relative_path":"audio/assets/sfx/click.mp3","size_in_bytes":11702},{"relative_path":"audio/assets/sfx/error.mp3","size_in_bytes":51827},{"relative_path":"audio/assets/sfx/glitch-1.mp3","size_in_bytes":84427},{"relative_path":"audio/assets/sfx/glitch-2.mp3","size_in_bytes":112128},{"relative_path":"audio/assets/sfx/glitch-3.mp3","size_in_bytes":99072},{"relative_path":"audio/assets/sfx/impact-bass-1.mp3","size_in_bytes":67709},{"relative_path":"audio/assets/sfx/impact-bass-2.mp3","size_in_bytes":82944},{"relative_path":"audio/assets/sfx/key-press.mp3","size_in_bytes":3909},{"relative_path":"audio/assets/sfx/manifest.json","size_in_bytes":3721},{"relative_path":"audio/assets/sfx/notification.mp3","size_in_bytes":78576},{"relative_path":"audio/assets/sfx/ping.mp3","size_in_bytes":26400},{"relative_path":"audio/assets/sfx/pop.mp3","size_in_bytes":23040},{"relative_path":"audio/assets/sfx/riser.mp3","size_in_bytes":321024},{"relative_path":"audio/assets/sfx/sparkle.mp3","size_in_bytes":57678},{"relative_path":"audio/assets/sfx/typing.mp3","size_in_bytes":26852},{"relative_path":"audio/assets/sfx/whoosh-cinematic.mp3","size_in_bytes":177408},{"relative_path":"audio/assets/sfx/whoosh-short.mp3","size_in_bytes":18390},{"relative_path":"audio/assets/sfx/whoosh.mp3","size_in_bytes":18390},{"relative_path":"audio/references/bgm.md","size_in_bytes":8178},{"relative_path":"audio/references/captions/authoring.md","size_in_bytes":9757},{"relative_path":"audio/references/captions/motion.md","size_in_bytes":5656},{"relative_path":"audio/references/captions/transcript-handling.md","size_in_bytes":5655},{"relative_path":"audio/references/remove-background.md","size_in_bytes":8669},{"relative_path":"audio/references/requirements.md","size_in_bytes":4563},{"relative_path":"audio/references/sfx.md","size_in_bytes":3727},{"relative_path":"audio/references/transcribe.md","size_in_bytes":2987},{"relative_path":"audio/references/tts-to-captions.md","size_in_bytes":1975},{"relative_path":"audio/references/tts.md","size_in_bytes":12940},{"relative_path":"audio/scripts/audio.mjs","size_in_bytes":13014},{"relative_path":"audio/scripts/heygen-tts.mjs","size_in_bytes":4277},{"relative_path":"audio/scripts/lib/audio-meta.mjs","size_in_bytes":1166},{"relative_path":"audio/scripts/lib/bgm-volume.mjs","size_in_bytes":236},{"relative_path":"audio/scripts/lib/bgm.mjs","size_in_bytes":11257},{"relative_path":"audio/scripts/lib/concurrency.mjs","size_in_bytes":527},{"relative_path":"audio/scripts/lib/gemini-auth.mjs","size_in_bytes":1610},{"relative_path":"audio/scripts/lib/gemini-auth.py","size_in_bytes":1981},{"relative_path":"audio/scripts/lib/gemini-auth_test.py","size_in_bytes":4430},{"relative_path":"audio/scripts/lib/gemini-tts.mjs","size_in_bytes":4711},{"relative_path":"audio/scripts/lib/heygen.mjs","size_in_bytes":7363},{"relative_path":"audio/scripts/lib/python.mjs","size_in_bytes":2574},{"relative_path":"audio/scripts/lib/sfx.mjs","size_in_bytes":5435},{"relative_path":"audio/scripts/lib/tts.mjs","size_in_bytes":17346},{"relative_path":"audio/scripts/lyria-recipe.py","size_in_bytes":5023},{"relative_path":"audio/scripts/wait-bgm.mjs","size_in_bytes":5544},{"relative_path":"luts/README.md","size_in_bytes":1087},{"relative_path":"luts/index.json","size_in_bytes":1997},{"relative_path":"references/audio.md","size_in_bytes":2458},{"relative_path":"references/grading.md","size_in_bytes":6922},{"relative_path":"references/media-treatment-recipes.md","size_in_bytes":36072},{"relative_path":"references/media-treatments.md","size_in_bytes":13920},{"relative_path":"references/memory.md","size_in_bytes":3328},{"relative_path":"references/meta.md","size_in_bytes":7004},{"relative_path":"references/operations.md","size_in_bytes":14877},{"relative_path":"references/resolve.md","size_in_bytes":9793},{"relative_path":"references/setup-providers.md","size_in_bytes":7495},{"relative_path":"references/telemetry-dashboard.md","size_in_bytes":4200},{"relative_path":"scripts/audio-duck.mjs","size_in_bytes":4069},{"relative_path":"scripts/dither.mjs","size_in_bytes":9969},{"relative_path":"scripts/eval.mjs","size_in_bytes":14891},{"relative_path":"scripts/lib/cutlist.mjs","size_in_bytes":6095},{"relative_path":"scripts/lib/duck.mjs","size_in_bytes":3266},{"relative_path":"scripts/lib/error-diffusion.mjs","size_in_bytes":6631},{"relative_path":"scripts/lib/index-gen.mjs","size_in_bytes":1920},{"relative_path":"scripts/lib/manifest.mjs","size_in_bytes":7146},{"relative_path":"scripts/lib/media-fetch.mjs","size_in_bytes":2838},{"relative_path":"scripts/lib/npx-sync.mjs","size_in_bytes":2328},{"relative_path":"scripts/lib/parakeet-words.mjs","size_in_bytes":1149},{"relative_path":"scripts/lib/prefs-store.mjs","size_in_bytes":6604},{"relative_path":"scripts/lib/recipe-store.mjs","size_in_bytes":13020},{"relative_path":"scripts/lib/telemetry.mjs","size_in_bytes":6476},{"relative_path":"scripts/lib/transcriptCutFade.mjs","size_in_bytes":911},{"relative_path":"scripts/lib/words.mjs","size_in_bytes":764},{"relative_path":"scripts/prefs.mjs","size_in_bytes":2407},{"relative_path":"scripts/recipe.mjs","size_in_bytes":4040},{"relative_path":"scripts/resolve.mjs","size_in_bytes":657},{"relative_path":"scripts/transcribe.mjs","size_in_bytes":6664},{"relative_path":"scripts/transcript-cut.mjs","size_in_bytes":9137}],"name":"media-use","skill_md_contents":"---\nname: media-use\ndescription: Agent Media OS, the single skill for every media need in a HyperFrames project. Resolve BGM, SFX, image, icon, brand logo, voice, color grade, or LUT into a frozen local file or paste-ready block + ledger record (one verb, `resolve`); generate via TTS / music / image models when the catalog misses; produce voiceover, transcription, captions, and background removal through one shared audio engine; operate on media (cut / reframe / transform); and reuse assets across projects. Also use for vague feedback that real footage looks dark, flat, boring, should feel retro/camcorder/print/ASCII, needs privacy, or needs a media reveal.\n---\n\n> Modified by Juicy Lucy AI, UAB for JuicyLucy Ads: CLI invocation, the review-approval reference and/or frontmatter (description layout, upstream-only metadata) adjusted at build time. See the plugin root NOTICE for details.\n\n\n# media-use\n\nThe media OS for HyperFrames: resolve · generate · operate · remember — every media type, one skill, zero context noise.\n\nFirst run: install and sign in to the `heygen` CLI (the free-usage path), then verify with `hyperframes media-use resolve --doctor`. Setup and providers: `references/setup-providers.md`.\n\n## Resolve — the one verb\n\n```bash\nhyperframes media-use resolve --type <type> --intent \"<description>\" --project <dir>\n```\n\nReturns one line: `resolved <id> → <path> (<type>, <metadata>)`. All search noise stays on disk.\n\n| Type    | One-line intent                                                                  |\n| ------- | -------------------------------------------------------------------------------- |\n| `bgm`   | background music (HeyGen catalog, 10k+ tracks)                                   |\n| `sfx`   | sound effects (bundled 19-file library + catalog)                                |\n| `image` | photos, backgrounds (HeyGen asset search, 75k+ vectors)                          |\n| `icon`  | icons, symbols (transparent)                                                     |\n| `logo`  | official brand marks (theSVG → GitHub avatar → favicon; never redrawn)           |\n| `voice` | TTS voiceover (HeyGen free-usage path; optional local Kokoro)                    |\n| `grade` | measured correction candidate; broad polish/stylization follows Media Treatments |\n| `lut`   | user-provided or explicitly chosen reusable validated `.cube` file               |\n\nBefore resolving fresh, list reusable candidates with `--candidates` and judge fit yourself — reuse rules, all flags, ingest (`--from`), and adopt are in `references/resolve.md`.\n\n## Treat broad visual feedback as media intent\n\nWhen a user explicitly asks to fix, polish, stylize, obscure, emphasize, or\nreveal photographic media, read `references/media-treatments.md` even if they\ndo not name color grading or an effect. Inspect the real `<img>`/`<video>`,\nchoose one primary intent, then use deterministic persistence and verification.\nUse a matching recipe as an optional tested seed, or inspect\n`hyperframes media-treatment --capabilities --json`, then request one relevant\nfamily/effect with `--capability <id>` and assemble a custom treatment from\ncanonical controls. Never load `--all` for ordinary authoring. A treatment may\ncompose correction, a preset, finishing, compatible shader effects, supported\nkeyframes, and optional Registry overlays. Add only source-justified bounded\ntuning and compatible parts, never effects merely to make the result look more\nsophisticated. Persist the final combined payload with\n`hyperframes media-treatment`.\n\nUse one progressively escalating workflow. For video, inspect one labeled\nearly/middle/late contact sheet rather than reading frames separately. Apply one\ncandidate and inspect one after-sheet for ordinary correction or polish.\nEscalate to individual frames or moving draft evidence only when the result is\nambiguous, temporal, stylized, LUT-based, HDR/LOG-sensitive, private, or\nbrand-critical.\n\nFor ordinary correction or polish, persist the final treatment's\npreset/adjustment JSON.\nDo not generate a `.cube` LUT merely to encode exposure, shadows, contrast, or\nwarmth. Use a LUT only when the user supplies one or the selected treatment\nexplicitly owns one. `resolve --type grade --for ... --analyze` is measurement\nevidence, not permission to replace the chosen treatment with a generated LUT.\nDo not recreate supported vignette, grain, blur, pixelate, color, or treatment\neffects with CSS/SVG overlays; that bypasses Studio controls and the canonical\npreview/render shader path.\n\n## Be proactive — run a media opportunity pass\n\nThe human usually can't tell which media would lift the piece. You can. When you build or review a composition, do **one** grounded scan and then **ask once** — don't silently add, and don't nag per asset.\n\nSurface an opportunity only when a concrete signal is present:\n\n| Signal detected                                          | Offer                                                                                                  |\n| -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |\n| On-screen text / a script with no voiceover              | TTS voiceover (audio engine)                                                                           |\n| Emoji or a `<div>` styled as an icon                     | resolve real `icon`s                                                                                   |\n| Image that is a placeholder, tiny, or upscaled-looking   | a better `image` (and/or upscale — see `references/operations.md`)                                     |\n| Hard scene cuts / transitions with no sound              | transition `sfx`                                                                                       |\n| A piece over ~10s with no music bed                      | `bgm`                                                                                                  |\n| Footage that reads under/over-exposed or color-cast      | a corrective grade (inspect it with `hyperframes media-treatment --selector '#hero' --analyze --json`) |\n| Photographic media that feels visually flat or off-topic | one specific source-appropriate preset or custom treatment, with the intended target named             |\n| A meaningful media entrance/reveal that feels static     | one supported seek-safe treatment animation; preserve color unless the request also justifies a preset |\n\nRules that keep this a help, not nagware: **grounded, not generic** (no signal → no suggestion); **opinionated + concrete** (propose the specific fix with defaults chosen — the human approves **all / some / none**); **once per project** (one consolidated ask; respect \"leave it\"); **surface, never silently mutate** (color grades especially: propose and preview — a gray-world \"correction\" ruins an intentional sunset or neon look).\n\n## Where to look — read only the file your task needs\n\n| Task                                                                      | Read                             |\n| ------------------------------------------------------------------------- | -------------------------------- |\n| resolve / reuse / adopt / ingest, flags, cascade, inventory               | `references/resolve.md`          |\n| color grading, LUTs, smart grade (`--for`), grade-compare                 | `references/grading.md`          |\n| voiceover / TTS, music, SFX, captions, transcription (audio engine)       | `references/audio.md`            |\n| cut / reframe / transform existing media, exact error diffusion, HEVC     | `references/operations.md`       |\n| source-aware creative treatments, realtime effects, overlays, reveals     | `references/media-treatments.md` |\n| install + auth, provider table, RAM ladders, `--local-only`, `--provider` | `references/setup-providers.md`  |\n| remembered preferences + frozen recipes (user memory)                     | `references/memory.md`           |\n| ownership matrix, usage stats, telemetry, privacy (maintainer-facing)     | `references/meta.md`             |\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}