feat(skills): add tasteforge-video skill for repeatable taste-driven video work

Curated skill delegating to the canonical tasteforge package in
Ito-Markets/ito-video: taste interviews, style-pack validation, offline
distillation with measured grounding, deterministic cadence application to
local footage, EDL/FCPXML export, and generated-media provenance audits.
Provider (Fal) generation requires explicit separately authorized execution
and fails closed in ECC; local references never mean a saved provider
workflow. Registered in the opt-in media-generation install module, npm
files, and catalog counts via scripts/ci/catalog.js. Contract tests cover
frontmatter/triggers, the fail-closed boundary, manifest and npm-packed
discoverability (real tarball check opt-in via ECC_TEST_NPM_PACK=1).
This commit is contained in:
affaan
2026-08-18 12:04:33 +00:00
parent 06c5e118c4
commit 9c450046be
12 changed files with 314 additions and 15 deletions
+123
View File
@@ -0,0 +1,123 @@
---
name: tasteforge-video
description: Use when a user wants a taste interview for video work, to distill a visual aesthetic into structured, reusable constraints (a style pack), to validate or audit a style pack, to apply a pack's measured cadence and look to local footage, or to export an editable EDL/FCPXML cut. Also for auditing generated-media provenance and for deciding what is local-deterministic versus provider generation. All ECC-side operations are offline and deterministic; provider (Fal) generation fails closed here.
metadata:
origin: ECC
---
# TasteForge Video
TasteForge turns "make it feel like this reference" into a repeatable,
inspectable workflow: interview taste, distill it into a structured style
pack, validate the pack, apply its measured cadence and look to local media,
and export an editable timeline. The canonical implementation is the
`tasteforge` package in the Itô video repository; ECC orchestrates and
explains it and does not vendor or duplicate its code.
## When to Use
- The user asks to **interview for video taste** before any footage is made
("ask me about the look", "interview me about aesthetic direction").
- The user wants to **distill an aesthetic into structured constraints** — a
reusable style pack rather than vibes ("turn these references into a pack").
- The user wants to **validate a style pack** (is the metadata complete,
schema-valid, cadence measured, spec distilled?).
- The user wants to **apply a style pack to local footage** — plan a cut from
the pack's measured cadence over local clips, deterministically.
- The user wants to **export EDL/FCPXML** — an editable, frame-exact handoff
to DaVinci Resolve / Premiere / Final Cut.
- The user asks for a **generated-media provenance audit** — where did this
pack, spec, or cut come from; what was measured locally versus generated by
a provider; what was dry-run.
- The user mentions TasteForge, style packs, flashethereal, taste distillation,
cadence/rhythm planning, or a taste interview for video.
## Local Deterministic Operations vs Provider Generation
This boundary is the core of the skill. Everything ECC can actually run is
**local, deterministic, and offline**:
| Operation | Deterministic? | ECC may run |
|---|---|---|
| Taste interview → profile | yes (offline) | yes |
| Pack inspect / validate against schemas | yes | yes |
| Distill profile (+ measured grounding) → spec | yes (dry-run semantics) | yes |
| Apply pack cadence to local media → report + timeline | yes | yes |
| Export EDL (CMX3600) / FCPXML 1.9 | yes | yes |
| Provenance / lineage report | yes | yes |
| Vision-model distillation of stills | **provider generation** | **no** |
| Reference-to-video, image-to-3D, hosted compose | **provider generation** | **no** |
**Provider generation must fail closed in ECC.** Any live Fal (or other
provider) call — generating shots, minting prop meshes, hosted VLM
distillation — requires explicit separately authorized execution under a
separate lane with its own review. ECC never calls Fal, never reads any API
key or other credentials (`FAL_KEY` included), uploads no media, and mutates
no provider account state. When a request needs provider generation, state
exactly that boundary, run the local half (interview, pack validation,
planning, export), and stop.
**Never claim a Fal workflow is saved.** A local reference to a Fal endpoint,
model id, or dry-run URL (they appear inside pack metadata) is
**reference-only**: it never means a provider-side workflow was saved,
persisted, or is authorized to run. Anything produced offline carries
dry-run/dry_run semantics — say "dry-run spec" or "deterministic plan", never
"generated by the model".
## Canonical Implementation
- Repository: `Ito-Markets/ito-video` — find it under the workspace's
canonical local GitHub checkout root (never a hard-coded machine path);
package directory `tasteforge/`.
- CLI: `python3 -m tasteforge <command>``provenance`, `inspect`, `validate`,
`interview`, `distill`, `apply`, `export`. `--live` flags exit with code 2
and refuse.
- Schemas are the contract: taste profile, pack manifest, grade, cadence,
spec, timeline events, application reports (`provider` is enum-locked to
`"none"`; `dry_run` to `true`).
- Recovered-source lineage and deliberate exclusions live in the repo's
`PROVENANCE.md`. Run `python3 -m tasteforge provenance` for the machine-
readable version.
ECC's job is to route here, run the local deterministic commands, and
interpret their JSON — not to reimplement cadence planning, LUT/grade
statistics, or timeline emission. If the canonical package is absent, say so
and stop; do not reconstruct its logic inline.
## Workflow
1. **Interview** (`interview`): collect answers for the look axes — palette,
grain, lighting, focal length, camera motion, subject framing, grade,
mood adjectives, avoid list — and separately the content brief. Keep look
and content separate; merging them is the classic failure.
2. **Distill** (`distill`): map the profile onto the spec schema offline,
embedding the pack's measured grounding (black/white point, contrast,
per-zone chroma, palette, cut rhythm) when a pack is supplied. The result
is a dry-run spec: deterministic, provider `"none"`.
3. **Validate** (`validate` / `inspect`): check the pack against its schemas;
report errors vs warnings (missing stills in a metadata-only pack are a
warning, not an error).
4. **Apply** (`apply`): plan shot durations from the pack's measured cadence
(seeded, deterministic) over the user's local clips; produce the
application report and frame-exact timeline events.
5. **Export** (`export`): write CMX3600 EDL + FCPXML 1.9 with rational,
NTSC-safe times for import into a real NLE.
6. **Audit** (`provenance`): report lineage — recovered-source digests,
generation history, fixture provenance, provider references as
pointer-only records.
## Example Session
```bash
# in the canonical ito-video checkout
python3 -m tasteforge validate stylepacks/flashethereal
python3 -m tasteforge interview --answers answers.json --genre flashethereal --out profile.json
python3 -m tasteforge distill --profile profile.json --pack stylepacks/flashethereal --out spec.json
python3 -m tasteforge apply --pack stylepacks/flashethereal --media media.json --duration 20 --out report.json
python3 -m tasteforge export --events events.json --out-dir out --title flashethereal-cut
python3 -m tasteforge provenance
```
If the user asks for the shots to actually be generated: stop, explain the
fail-closed provider boundary, and deliver the deterministic plan, spec, and
editable timeline instead.