reframe-video 0.6.28 → 0.6.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,5 +14,7 @@ Verified against each asset page's license field on 2026-06-11.
14
14
  | bgm-song21.mp3 | [Mysterious Ambience (song21)](https://opengameart.org/content/mysterious-ambience-song21) | cynicmusic (pixelsphere.org) | multi-licensed; used under its CC0 option |
15
15
 
16
16
  CC0 requires no attribution; this file records provenance anyway.
17
- Files placed here named after a procedural SFX (e.g. `whoosh.wav`) override
18
- the synthesizer for that name.
17
+ These files are loaded only by an explicit `file:` cue (e.g.
18
+ `{ sfx: undefined, file: "whoosh.wav" }`). A bare `sfx:` name always uses the
19
+ procedural synthesizer (so its pitch/auto-variation applies) — it is no longer
20
+ auto-overridden by a same-named `.wav` here.
package/dist/bin.js CHANGED
@@ -2452,8 +2452,6 @@ async function resolveCueFile(cue, sceneDir) {
2452
2452
  `audio cue file "${p}" not found (tried absolute, scene-relative, assets/sfx/)`
2453
2453
  );
2454
2454
  }
2455
- const vendored = join(VENDORED, `${cue.source.name}.wav`);
2456
- if (existsSync2(vendored)) return vendored;
2457
2455
  const { name, params } = cue.source;
2458
2456
  return writeCached(`${name}-${fnv1a(JSON.stringify(params))}`, () => synthSfx(name, params));
2459
2457
  }
package/dist/cli.js CHANGED
@@ -1944,8 +1944,6 @@ async function resolveCueFile(cue, sceneDir) {
1944
1944
  `audio cue file "${p}" not found (tried absolute, scene-relative, assets/sfx/)`
1945
1945
  );
1946
1946
  }
1947
- const vendored = join(VENDORED, `${cue.source.name}.wav`);
1948
- if (existsSync(vendored)) return vendored;
1949
1947
  const { name, params } = cue.source;
1950
1948
  return writeCached(`${name}-${fnv1a(JSON.stringify(params))}`, () => synthSfx(name, params));
1951
1949
  }
@@ -581,8 +581,14 @@ up). `params.gainDb` trims a single hit.
581
581
  **bgm beds** (`bgm.synth`): `ambient-pad` `lofi` `pulse` `tension` `uplift` — or
582
582
  `bgm.file` for your own. **Mixing**: any cue takes `fadeIn`/`fadeOut` (seconds) and `pan`
583
583
  (-1 left … 0 centre … +1 right). A `video` clip's audio takes `fadeIn` and `pan` too
584
- (clip fade-out isn't supported yet). The bed auto-ducks under cues (`bgm.duck`). See
585
- `examples/scenes/sfx-showcase.ts` to audition the whole palette.
584
+ (clip fade-out isn't supported yet). The bed auto-ducks under cues (`bgm.duck`).
585
+
586
+ **Recorded samples** are a separate layer from the synth palette: use a `file:` cue to
587
+ play a CC0 file from `assets/sfx/` — keyboard typing (`keypress-*.wav`, also driven by
588
+ `textTypeCues`), `footstep_*`, and the Kenney UI pack (`click_*`/`confirmation_*`/
589
+ `select_*`/…). A bare `sfx:` name always synthesizes (so it pitch-varies); pass
590
+ `file: "whoosh.wav"` to play the recorded version instead. Audition the procedural set
591
+ with `examples/scenes/sfx-showcase.ts` and the samples with `sample-showcase.ts`.
586
592
 
587
593
  ## Rules
588
594
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reframe-video",
3
- "version": "0.6.28",
3
+ "version": "0.6.29",
4
4
  "description": "Declarative motion graphics that AI can write and humans can tweak — human edits survive AI regeneration. Deterministic mp4 renders from a plain-data scene format.",
5
5
  "keywords": [
6
6
  "motion-graphics",