mirror of
https://github.com/affaan-m/ECC.git
synced 2026-09-08 07:37:48 +02:00
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:
@@ -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.
|
||||
Reference in New Issue
Block a user