@mevdragon/vidfarm-devcli 0.20.5 → 0.20.6
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.
- package/SKILL.director.md +45 -1
- package/demo/dist/app.js +49 -49
- package/dist/src/app.js +3 -2
- package/dist/src/cli.js +42 -0
- package/dist/src/editor-chat.js +74 -2
- package/dist/src/services/hyperframes.js +138 -1
- package/package.json +1 -1
package/SKILL.director.md
CHANGED
|
@@ -249,6 +249,41 @@ Read-only state (does **not** advance the job or bill): `GET /api/v1/composition
|
|
|
249
249
|
"delivery": "flat VO cadence, hold the beat before the punch, beat drop lands on the reveal",
|
|
250
250
|
"preserve": ["keep the beat drop on the reveal cut", "keep the flat unbothered delivery"]
|
|
251
251
|
},
|
|
252
|
+
"static_vs_pivot": {
|
|
253
|
+
"summary": "Keep the reveal structure and audio swagger; swap the subject-specific visuals and copy.",
|
|
254
|
+
"scene_replacement": {
|
|
255
|
+
"overall": "replace_some",
|
|
256
|
+
"reason": "the proof/reveal beats are load-bearing, but the subject matter can pivot",
|
|
257
|
+
"must_keep": ["final reveal beat", "setup-to-payoff contrast"],
|
|
258
|
+
"should_replace": ["subject-specific graphics", "brand-specific screenshots"],
|
|
259
|
+
"load_bearing_scenes": ["hook setup", "payoff reveal"]
|
|
260
|
+
},
|
|
261
|
+
"narration": {
|
|
262
|
+
"overall": "customize_script",
|
|
263
|
+
"reason": "the spoken words are source-specific and stop making sense after a subject swap",
|
|
264
|
+
"same_timing_required": true,
|
|
265
|
+
"use_premium_tts_when_customizing": true
|
|
266
|
+
},
|
|
267
|
+
"music": {
|
|
268
|
+
"overall": "recreate_under_narration",
|
|
269
|
+
"reason": "the music energy matters, but the original combined track should not stay under a rewritten script",
|
|
270
|
+
"volume_guidance": "keep low under VO unless the beat-drop is the joke engine"
|
|
271
|
+
},
|
|
272
|
+
"captions": {
|
|
273
|
+
"overall": "retime_to_new_narration",
|
|
274
|
+
"reason": "caption animation is tied to the spoken words",
|
|
275
|
+
"animation_dependency": "word-by-word timing follows narration cadence"
|
|
276
|
+
},
|
|
277
|
+
"visual_rebuild": {
|
|
278
|
+
"default_strategy": "ai_images_with_ken_burns",
|
|
279
|
+
"reason": "most replacement scenes are graphic/still-like and do not need expensive motion video"
|
|
280
|
+
},
|
|
281
|
+
"viral_dna": {
|
|
282
|
+
"must_keep": ["hook structure", "payoff timing", "audio attitude"],
|
|
283
|
+
"flexible": ["subject matter", "product imagery", "copy details"],
|
|
284
|
+
"do_not_change": ["core reveal mechanic", "caption cadence"]
|
|
285
|
+
}
|
|
286
|
+
},
|
|
252
287
|
"preserve": ["..."], "avoid": ["..."], "promotions": ["..."], "keywords": ["..."]
|
|
253
288
|
}
|
|
254
289
|
}
|
|
@@ -258,6 +293,15 @@ Read-only state (does **not** advance the job or bill): `GET /api/v1/composition
|
|
|
258
293
|
|
|
259
294
|
**`viral_dna.emotional_punch`** is the FEELING of the format and what makes it land — the part a remix most often flattens. Where hook/retention/payoff are the mechanical structure, this captures the vibe, the joke, and the intonation. It is now **audio-aware**: the decompose feeds the transcript into the reasoning, so `mechanism`/`delivery` account for the trending sound, the music-bed drop, and vocal cadence (on short-form the sound is frequently the biggest driver of the punch). When you re-theme or remix, rebuild `humor`'s joke around the new subject rather than dropping it, match `tone`/`delivery` so intonation and comedic timing survive, and never trade the `peak_moment` payoff for a flat product plug.
|
|
260
295
|
|
|
296
|
+
**`viral_dna.static_vs_pivot`** is the first-class lazy-prompt playbook. It tells you what must stay versus what can pivot when the user gives a thin prompt like "recreate this for my business" and little else. Use it to decide:
|
|
297
|
+
|
|
298
|
+
- whether most scenes should be replaced or only some
|
|
299
|
+
- whether narration must be customized or the original audio should stay
|
|
300
|
+
- whether background music must be recreated under a new voice
|
|
301
|
+
- whether animated captions need fresh timing against new narration
|
|
302
|
+
- whether cheap AI images + Ken Burns are sufficient, or whether real/AI motion footage is required
|
|
303
|
+
- which beats are load-bearing viral DNA versus merely subject-specific dressing
|
|
304
|
+
|
|
261
305
|
Use it whenever you need to know what the video says or shows: writing/translating captions, matching hooks or dubs to spoken audio, or planning scene-level edits.
|
|
262
306
|
|
|
263
307
|
- **Editor chat (frontend AI)** exposes this as the optional `video_context` tool — the copilot calls it on demand.
|
|
@@ -287,7 +331,7 @@ Use it whenever you need to know what the video says or shows: writing/translati
|
|
|
287
331
|
}
|
|
288
332
|
```
|
|
289
333
|
|
|
290
|
-
**Use it to pick concrete moves:** `typography.caption_style` maps to a `set_captions` preset; `transitions.*` to a `set_transitions` call; keep `pacing` (cut rhythm / avg_scene_seconds) when adding or splitting scenes; follow `broll.reliance`/`sourcing` to decide HUNT raws (`/raws/scan`) vs generate; lay `audio.*`. **`emotional`** is HOW to keep the FEELING while you swap the subject — the vibe/joke/intonation/sound are the first things a remix flattens, so honor `emotional.comedic_timing` (the held beat / hard cut that sells the joke), preserve `emotional.intonation` when you re-voice narration, and treat every `emotional.vibe_anchors` entry as a must-do (on short-form the trending sound / beat drop is often the biggest carrier of the punch — keep it and land it on the same cut). **Protect** any beat in `important_scenes` or with `must_keep:true` / `importance:"critical"` — swap the subject but preserve its timing, role, and caption cadence. Treat `editing_bias`/`do`/`dont` as hard constraints; an explicit user instruction still wins. `status:"none"` → run `POST /auto-decompose` first.
|
|
334
|
+
**Use it to pick concrete moves:** `typography.caption_style` maps to a `set_captions` preset; `transitions.*` to a `set_transitions` call; keep `pacing` (cut rhythm / avg_scene_seconds) when adding or splitting scenes; follow `broll.reliance`/`sourcing` to decide HUNT raws (`/raws/scan`) vs generate; lay `audio.*`. **`emotional`** is HOW to keep the FEELING while you swap the subject — the vibe/joke/intonation/sound are the first things a remix flattens, so honor `emotional.comedic_timing` (the held beat / hard cut that sells the joke), preserve `emotional.intonation` when you re-voice narration, and treat every `emotional.vibe_anchors` entry as a must-do (on short-form the trending sound / beat drop is often the biggest carrier of the punch — keep it and land it on the same cut). Pair that with `viral_dna.static_vs_pivot`: if narration is `customize_script`, revoice and then retime captions/scenes that depend on the old VO; if visual_rebuild is `ai_images_with_ken_burns`, do the cheap still+motion path before reaching for AI video; if a scene is listed under `load_bearing_scenes`, preserve its beat even when you swap the subject. **Protect** any beat in `important_scenes` or with `must_keep:true` / `importance:"critical"` — swap the subject but preserve its timing, role, and caption cadence. Treat `editing_bias`/`do`/`dont` as hard constraints; an explicit user instruction still wins. `status:"none"` → run `POST /auto-decompose` first.
|
|
291
335
|
|
|
292
336
|
- **Editor chat (frontend AI)** already receives the harness inline in `editor_context.editor_harness` (no tool call needed); it can also fetch this route via `http_request`.
|
|
293
337
|
- **Desktop agents (Claude Code / Codex)**: `vidfarm pull` writes `editor-harness.json` to the fork dir alongside `video-context.json`, and also materializes a merged agent bundle at `.harness/context.json` plus `.harness/agent-guide.md`. This deliberately does **not** write a top-level `AGENTS.md`, because many user repos already own that file. For local scripting or agentic edits, read `.harness/agent-guide.md` and `.harness/context.json` FIRST; do not freestyle from `composition.html` alone. The `pull` grounding line reports the generated brief paths.
|