← JuicyLucy AdsCONTENT HISTORY

Update to JuicyLucy Ads

Snapshot Oct 24, 2026 · 13:24 UTC · version 0.33.2

Collection source: downloaded plugin package. These snapshots do not have a confirmed matching collection source. Differences in file lists alone do not establish changes to the package.

WHAT CHANGED

Instructions updated for media-use

Full description — Now says: OS for 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...

Observed in instructions or declared skills. Runtime behavior has not been tested.

Save JuicyLucy Ads and check future changes in Following.

Up to 3 plugins free · no card required.

All fields and original values.

Full description

Before

Sep 30, 2026 · 23:16 UTC

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 T...

After

Oct 24, 2026 · 13:24 UTC

OS for 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 cat...

Skill instructions

Before

Sep 30, 2026 · 23:16 UTC

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 T...

After

Oct 24, 2026 · 13:24 UTC

OS for 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 cat...

Supporting files

Before

Sep 30, 2026 · 23:16 UTC

[{"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.mp...

After

Oct 24, 2026 · 13:24 UTC

[{"relative_path":".gitignore","size_in_bytes":17},{"relative_path":"audio/references/captions/authoring.md","size_in_bytes":10198},{"relative_path":"audio/references/captions/motion.md","size_in_bytes":5656},{"relative_path":"audio/refe...

Compare saved observations

Download comparison JSON

SKILL.md text changes

− removed · + added

--- before
+++ after
@@ -1,33 +1,33 @@
 ---
 name: media-use
-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.
+description: Agent Media OS for 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. In this plugin, music and voiceover come from `juicy`; sound effects come from the bundled library (`resolve --type sfx --local-only`), with no account.
 ---
 
-> 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.
+> Modified by Juicy Lucy AI, UAB for JuicyLucy Ads: CLI invocations (pointed at the installed launchers, never npm latest), the review-approval reference, the pointer to HyperFrames' own plugin rules, third-party install instructions, references to omitted provider integrations and usage telemetry, unpinned install and HeyGen video instructions, the environment a script passes to its local preview server and the pattern it reads Chrome's local address with, one line break and/or frontmatter (description layout, upstream-only metadata) adjusted at build time. See the plugin root NOTICE for details.
 
 
 # media-use
 
 The media OS for HyperFrames: resolve · generate · operate · remember — every media type, one skill, zero context noise.
 
-First 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`.
+In this plugin, music and voiceover come from the `juicy` command (the `juicy-cli` skill), and `~/.juicylucy/bin/hyperframes media-use resolve --type sfx --local-only` resolves sound effects from the renderer's own bundled library with no sign-in. Always pass `--local-only` for a sound effect: without it the resolve searches Openverse first and can return a sound licensed CC BY, whose credit an ad cannot carry. Never install or sign in to another media provider for an ad. Verify with `~/.juicylucy/bin/hyperframes media-use resolve --doctor`.
 
 ## Resolve — the one verb
 
 ```bash
-hyperframes media-use resolve --type <type> --intent "<description>" --project <dir>
+~/.juicylucy/bin/hyperframes media-use resolve --type <type> --intent "<description>" --project <dir>
 ```
 
 Returns one line: `resolved <id> → <path> (<type>, <metadata>)`. All search noise stays on disk.
 
 | Type    | One-line intent                                                                  |
 | ------- | -------------------------------------------------------------------------------- |
-| `bgm`   | background music (HeyGen catalog, 10k+ tracks)                                   |
-| `sfx`   | sound effects (bundled 19-file library + catalog)                                |
+| `bgm`   | not here: music comes from `~/.juicylucy/bin/juicy audio music`                                   |
+| `sfx`   | sound effects (the renderer's bundled library, with `--local-only`; no sign-in)  |
 | `image` | photos, backgrounds (HeyGen asset search, 75k+ vectors)                          |
 | `icon`  | icons, symbols (transparent)                                                     |
 | `logo`  | official brand marks (theSVG → GitHub avatar → favicon; never redrawn)           |
-| `voice` | TTS voiceover (HeyGen free-usage path; optional local Kokoro)                    |
+| `voice` | not here: voiceover comes from `~/.juicylucy/bin/juicy audio voiceover`                           |
 | `grade` | measured correction candidate; broad polish/stylization follows Media Treatments |
 | `lut`   | user-provided or explicitly chosen reusable validated `.cube` file               |
 
@@ -40,14 +40,14 @@
 do not name color grading or an effect. Inspect the real `<img>`/`<video>`,
 choose one primary intent, then use deterministic persistence and verification.
 Use a matching recipe as an optional tested seed, or inspect
-`hyperframes media-treatment --capabilities --json`, then request one relevant
+`~/.juicylucy/bin/hyperframes media-treatment --capabilities --json`, then request one relevant
 family/effect with `--capability <id>` and assemble a custom treatment from
 canonical controls. Never load `--all` for ordinary authoring. A treatment may
 compose correction, a preset, finishing, compatible shader effects, supported
 keyframes, and optional Registry overlays. Add only source-justified bounded
 tuning and compatible parts, never effects merely to make the result look more
 sophisticated. Persist the final combined payload with
-`hyperframes media-treatment`.
+`~/.juicylucy/bin/hyperframes media-treatment`.
 
 Use one progressively escalating workflow. For video, inspect one labeled
 early/middle/late contact sheet rather than reading frames separately. Apply one
@@ -79,7 +79,7 @@
 | Image that is a placeholder, tiny, or upscaled-looking   | a better `image` (and/or upscale — see `references/operations.md`)                                     |
 | Hard scene cuts / transitions with no sound              | transition `sfx`                                                                                       |
 | A piece over ~10s with no music bed                      | `bgm`                                                                                                  |
-| Footage that reads under/over-exposed or color-cast      | a corrective grade (inspect it with `hyperframes media-treatment --selector '#hero' --analyze --json`) |
+| Footage that reads under/over-exposed or color-cast      | a corrective grade (inspect it with `~/.juicylucy/bin/hyperframes media-treatment --selector '#hero' --analyze --json`) |
 | Photographic media that feels visually flat or off-topic | one specific source-appropriate preset or custom treatment, with the intended target named             |
 | A meaningful media entrance/reveal that feels static     | one supported seek-safe treatment animation; preserve color unless the request also justifies a preset |
 
@@ -91,9 +91,8 @@
 | ------------------------------------------------------------------------- | -------------------------------- |
 | resolve / reuse / adopt / ingest, flags, cascade, inventory               | `references/resolve.md`          |
 | color grading, LUTs, smart grade (`--for`), grade-compare                 | `references/grading.md`          |
-| voiceover / TTS, music, SFX, captions, transcription (audio engine)       | `references/audio.md`            |
+| captions, transcription                                                   | `audio/references/transcribe.md` |
 | cut / reframe / transform existing media, exact error diffusion, HEVC     | `references/operations.md`       |
 | source-aware creative treatments, realtime effects, overlays, reveals     | `references/media-treatments.md` |
-| install + auth, provider table, RAM ladders, `--local-only`, `--provider` | `references/setup-providers.md`  |
 | remembered preferences + frozen recipes (user memory)                     | `references/memory.md`           |
 | ownership matrix, usage stats, telemetry, privacy (maintainer-facing)     | `references/meta.md`             |
Full technical diff · 3 changed fields

changed /description

BEFORE
"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."
AFTER
"Agent Media OS for 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. In this plugin, music and voiceover come from `juicy`; sound effects come from the bundled library (`resolve --type sfx --local-only`), with no account."

changed /included_files

BEFORE
[
  {
    "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
  }
]
AFTER
[
  {
    "relative_path": ".gitignore",
    "size_in_bytes": 17
  },
  {
    "relative_path": "audio/references/captions/authoring.md",
    "size_in_bytes": 10198
  },
  {
    "relative_path": "audio/references/captions/motion.md",
    "size_in_bytes": 5656
  },
  {
    "relative_path": "audio/references/captions/transcript-handling.md",
    "size_in_bytes": 5389
  },
  {
    "relative_path": "audio/references/remove-background.md",
    "size_in_bytes": 9157
  },
  {
    "relative_path": "audio/references/transcribe.md",
    "size_in_bytes": 3296
  },
  {
    "relative_path": "luts/README.md",
    "size_in_bytes": 1087
  },
  {
    "relative_path": "luts/index.json",
    "size_in_bytes": 1997
  },
  {
    "relative_path": "references/grading.md",
    "size_in_bytes": 7810
  },
  {
    "relative_path": "references/media-treatment-recipes.md",
    "size_in_bytes": 36607
  },
  {
    "relative_path": "references/media-treatments.md",
    "size_in_bytes": 14877
  },
  {
    "relative_path": "references/memory.md",
    "size_in_bytes": 4225
  },
  {
    "relative_path": "references/meta.md",
    "size_in_bytes": 5548
  },
  {
    "relative_path": "references/operations.md",
    "size_in_bytes": 10942
  },
  {
    "relative_path": "references/resolve.md",
    "size_in_bytes": 10342
  },
  {
    "relative_path": "scripts/audio-duck.mjs",
    "size_in_bytes": 4697
  },
  {
    "relative_path": "scripts/dither.mjs",
    "size_in_bytes": 9969
  },
  {
    "relative_path": "scripts/eval.mjs",
    "size_in_bytes": 14891
  },
  {
    "relative_path": "scripts/lib/config-lock.mjs",
    "size_in_bytes": 1520
  },
  {
    "relative_path": "scripts/lib/cutlist.mjs",
    "size_in_bytes": 6381
  },
  {
    "relative_path": "scripts/lib/duck.mjs",
    "size_in_bytes": 3345
  },
  {
    "relative_path": "scripts/lib/error-diffusion.mjs",
    "size_in_bytes": 6631
  },
  {
    "relative_path": "scripts/lib/index-gen.mjs",
    "size_in_bytes": 1924
  },
  {
    "relative_path": "scripts/lib/manifest.mjs",
    "size_in_bytes": 9424
  },
  {
    "relative_path": "scripts/lib/media-fetch.mjs",
    "size_in_bytes": 2838
  },
  {
    "relative_path": "scripts/lib/media-home.mjs",
    "size_in_bytes": 730
  },
  {
    "relative_path": "scripts/lib/parakeet-words.mjs",
    "size_in_bytes": 1149
  },
  {
    "relative_path": "scripts/lib/prefs-store.mjs",
    "size_in_bytes": 6617
  },
  {
    "relative_path": "scripts/lib/recipe-store.mjs",
    "size_in_bytes": 13205
  },
  {
    "relative_path": "scripts/lib/transcriptCutFade.mjs",
    "size_in_bytes": 911
  },
  {
    "relative_path": "scripts/lib/words.mjs",
    "size_in_bytes": 728
  },
  {
    "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": 1633
  },
  {
    "relative_path": "scripts/transcribe.mjs",
    "size_in_bytes": 7824
  },
  {
    "relative_path": "scripts/transcript-cut.mjs",
    "size_in_bytes": 10894
  }
]

changed /skill_md_contents

BEFORE
"---\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"
AFTER
"---\nname: media-use\ndescription: Agent Media OS for 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. In this plugin, music and voiceover come from `juicy`; sound effects come from the bundled library (`resolve --type sfx --local-only`), with no account.\n---\n\n> Modified by Juicy Lucy AI, UAB for JuicyLucy Ads: CLI invocations (pointed at the installed launchers, never npm latest), the review-approval reference, the pointer to HyperFrames' own plugin rules, third-party install instructions, references to omitted provider integrations and usage telemetry, unpinned install and HeyGen video instructions, the environment a script passes to its local preview server and the pattern it reads Chrome's local address with, one line break 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\nIn this plugin, music and voiceover come from the `juicy` command (the `juicy-cli` skill), and `~/.juicylucy/bin/hyperframes media-use resolve --type sfx --local-only` resolves sound effects from the renderer's own bundled library with no sign-in. Always pass `--local-only` for a sound effect: without it the resolve searches Openverse first and can return a sound licensed CC BY, whose credit an ad cannot carry. Never install or sign in to another media provider for an ad. Verify with `~/.juicylucy/bin/hyperframes media-use resolve --doctor`.\n\n## Resolve — the one verb\n\n```bash\n~/.juicylucy/bin/hyperframes 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`   | not here: music comes from `~/.juicylucy/bin/juicy audio music`                                   |\n| `sfx`   | sound effects (the renderer's bundled library, with `--local-only`; no sign-in)  |\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` | not here: voiceover comes from `~/.juicylucy/bin/juicy audio voiceover`                           |\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`~/.juicylucy/bin/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`~/.juicylucy/bin/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 `~/.juicylucy/bin/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| captions, transcription                                                   | `audio/references/transcribe.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| remembered preferences + frozen recipes (user memory)                     | `references/memory.md`           |\n| ownership matrix, usage stats, telemetry, privacy (maintainer-facing)     | `references/meta.md`             |\n"
Full snapshot data
{
  "description": "Agent Media OS for 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. In this plugin, music and voiceover come from `juicy`; sound effects come from the bundled library (`resolve --type sfx --local-only`), with no account.",
  "included_files": [
    {
      "relative_path": ".gitignore",
      "size_in_bytes": 17
    },
    {
      "relative_path": "audio/references/captions/authoring.md",
      "size_in_bytes": 10198
    },
    {
      "relative_path": "audio/references/captions/motion.md",
      "size_in_bytes": 5656
    },
    {
      "relative_path": "audio/references/captions/transcript-handling.md",
      "size_in_bytes": 5389
    },
    {
      "relative_path": "audio/references/remove-background.md",
      "size_in_bytes": 9157
    },
    {
      "relative_path": "audio/references/transcribe.md",
      "size_in_bytes": 3296
    },
    {
      "relative_path": "luts/README.md",
      "size_in_bytes": 1087
    },
    {
      "relative_path": "luts/index.json",
      "size_in_bytes": 1997
    },
    {
      "relative_path": "references/grading.md",
      "size_in_bytes": 7810
    },
    {
      "relative_path": "references/media-treatment-recipes.md",
      "size_in_bytes": 36607
    },
    {
      "relative_path": "references/media-treatments.md",
      "size_in_bytes": 14877
    },
    {
      "relative_path": "references/memory.md",
      "size_in_bytes": 4225
    },
    {
      "relative_path": "references/meta.md",
      "size_in_bytes": 5548
    },
    {
      "relative_path": "references/operations.md",
      "size_in_bytes": 10942
    },
    {
      "relative_path": "references/resolve.md",
      "size_in_bytes": 10342
    },
    {
      "relative_path": "scripts/audio-duck.mjs",
      "size_in_bytes": 4697
    },
    {
      "relative_path": "scripts/dither.mjs",
      "size_in_bytes": 9969
    },
    {
      "relative_path": "scripts/eval.mjs",
      "size_in_bytes": 14891
    },
    {
      "relative_path": "scripts/lib/config-lock.mjs",
      "size_in_bytes": 1520
    },
    {
      "relative_path": "scripts/lib/cutlist.mjs",
      "size_in_bytes": 6381
    },
    {
      "relative_path": "scripts/lib/duck.mjs",
      "size_in_bytes": 3345
    },
    {
      "relative_path": "scripts/lib/error-diffusion.mjs",
      "size_in_bytes": 6631
    },
    {
      "relative_path": "scripts/lib/index-gen.mjs",
      "size_in_bytes": 1924
    },
    {
      "relative_path": "scripts/lib/manifest.mjs",
      "size_in_bytes": 9424
    },
    {
      "relative_path": "scripts/lib/media-fetch.mjs",
      "size_in_bytes": 2838
    },
    {
      "relative_path": "scripts/lib/media-home.mjs",
      "size_in_bytes": 730
    },
    {
      "relative_path": "scripts/lib/parakeet-words.mjs",
      "size_in_bytes": 1149
    },
    {
      "relative_path": "scripts/lib/prefs-store.mjs",
      "size_in_bytes": 6617
    },
    {
      "relative_path": "scripts/lib/recipe-store.mjs",
      "size_in_bytes": 13205
    },
    {
      "relative_path": "scripts/lib/transcriptCutFade.mjs",
      "size_in_bytes": 911
    },
    {
      "relative_path": "scripts/lib/words.mjs",
      "size_in_bytes": 728
    },
    {
      "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": 1633
    },
    {
      "relative_path": "scripts/transcribe.mjs",
      "size_in_bytes": 7824
    },
    {
      "relative_path": "scripts/transcript-cut.mjs",
      "size_in_bytes": 10894
    }
  ],
  "name": "media-use",
  "skill_md_contents": "---\nname: media-use\ndescription: Agent Media OS for 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. In this plugin, music and voiceover come from `juicy`; sound effects come from the bundled library (`resolve --type sfx --local-only`), with no account.\n---\n\n> Modified by Juicy Lucy AI, UAB for JuicyLucy Ads: CLI invocations (pointed at the installed launchers, never npm latest), the review-approval reference, the pointer to HyperFrames' own plugin rules, third-party install instructions, references to omitted provider integrations and usage telemetry, unpinned install and HeyGen video instructions, the environment a script passes to its local preview server and the pattern it reads Chrome's local address with, one line break 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\nIn this plugin, music and voiceover come from the `juicy` command (the `juicy-cli` skill), and `~/.juicylucy/bin/hyperframes media-use resolve --type sfx --local-only` resolves sound effects from the renderer's own bundled library with no sign-in. Always pass `--local-only` for a sound effect: without it the resolve searches Openverse first and can return a sound licensed CC BY, whose credit an ad cannot carry. Never install or sign in to another media provider for an ad. Verify with `~/.juicylucy/bin/hyperframes media-use resolve --doctor`.\n\n## Resolve — the one verb\n\n```bash\n~/.juicylucy/bin/hyperframes 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`   | not here: music comes from `~/.juicylucy/bin/juicy audio music`                                   |\n| `sfx`   | sound effects (the renderer's bundled library, with `--local-only`; no sign-in)  |\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` | not here: voiceover comes from `~/.juicylucy/bin/juicy audio voiceover`                           |\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`~/.juicylucy/bin/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`~/.juicylucy/bin/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 `~/.juicylucy/bin/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| captions, transcription                                                   | `audio/references/transcribe.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| remembered preferences + frozen recipes (user memory)                     | `references/memory.md`           |\n| ownership matrix, usage stats, telemetry, privacy (maintainer-facing)     | `references/meta.md`             |\n"
}

SHA-256 of public snapshot: 90f7d189bc6848a90d1e0006b203e833bb374db6e281e8c1164cce1b867e2531