Agent skill

Taste Distillation

by affaan-m in affaan-m/ECC

Measure a set of reference videos into a reusable style pack - colour grade as a 3D LUT, cut rhythm as a shot-length distribution, hero stills, screen-blend overlay plates, and a text spec for a…

MITAuto-check passed

Install Taste Distillation

skills CLI
$ npx skills add affaan-m/ECC --skill taste-distillation -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install affaan-m/ECC taste-distillation --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/taste-distillation .claude/skills/taste-distillation && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
taste-distillation
GitHub stars
277k
Token cost
~2.3k tokens
SKILL.md length
1,175 words
Files
15 (incl. scripts)
Skills in repo
683
Repo updated
First seen
Licence
MIT

At a glance

Measure a set of reference videos into a reusable style pack - colour grade as a 3D LUT, cut rhythm as a shot-length distribution, hero stills, screen-blend overlay plates, and a text spec for a…

  • Works in 2 steps: Absolute thresholds fail. On a bright… → Rank by separation, not by brightness.…
  • The user wants to capture the look of reference footage
  • SKILL.md covers When to Activate, The Core Finding, What a Pack Contains and Running It, plus 7 more sections
  • Runs Python scripts from its folder; calls python and pip; needs FAL_KEY

What it does

Taste Distillation is an agent skill from affaan-m/ECC. Measure a set of reference videos into a reusable style pack - colour grade as a 3D LUT, cut rhythm as a shot-length distribution, hero stills, screen-blend overlay plates, and a text spec for a generative model. Use when the user wants to capture the look of reference footage, build a repeatable look, mint assets from references, or reproduce someone's grade and pacing.

Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 16 other files, including scripts (for example `scripts/distill.py`, `scripts/mint.py` and `scripts/taste/__init__.py`).

The repository describes itself as: The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond. The licence is MIT.

When your agent uses it

  • The user wants to capture the look of reference footage
  • Build a repeatable look
  • Mint assets from references
  • Reproduce someones grade and pacing

Example prompts

  • “/taste-distillation”

Requirements

  • Python 3
  • A credential in FAL_KEY

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. Absolute thresholds fail. On a bright reference an L>55 AND chroma>12
  2. Rank by separation, not by brightness. "Share of bright saturated pixels"

What it can do on your machine

Read from SKILL.md and the folder at commit 2d515e4. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 14 files in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python
    • pip

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • FAL_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Taste Distillation loads about 2.3k tokens when it runs. Until then it costs about 98 tokens; SKILL.md has 1,175 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~98
When it runs · the whole SKILL.md, loaded when a task matches
~2.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from affaan-m/ECC at commit 2d515e4, republished under its MIT licence (© affaan-m). 1,175 words, ~2,273 tokens.

Download SKILL.mdSave it as .claude/skills/taste-distillation/SKILL.md (or your agent's skills folder). This skill also uses 14 other files; get the full folder from GitHub.
name
taste-distillation
description
Measure a set of reference videos into a reusable style pack - colour grade as a 3D LUT, cut rhythm as a shot-length distribution, hero stills, screen-blend overlay plates, and a text spec for a generative model. Use when the user wants to capture the look of reference footage, build a repeatable look, mint assets from references, or reproduce someone's grade and pacing.
metadata.origin
ECC

Taste Distillation

This standalone skill ships its implementation in scripts/; use taste-application for the subsequent generated or local-take edit. Keep each named genre in its own pack. Measurements from Flash Ethereal must not be silently reused for Fluid Sketch or 3D Cyber Glitch. A measured zero is valid data; distinguish it from an absent field.

Local dependencies are in scripts/requirements.txt. Separately authorized provider work also needs scripts/requirements-live.txt, credentials and explicit TASTE_FORGE_ALLOW_LIVE=1. --dry-run does not read credentials or submit jobs. Never infer that a workflow was saved from a local endpoint name; use the actual provider-side workflow or request evidence.

Turn reference videos into a style pack: a folder of measurements and assets that later stages consume deterministically.

When to Activate

  • "capture the look of these clips" / "distill the vibe" / "make this repeatable"
  • User has reference footage and wants a LUT, a grade, or matching pacing
  • Building a library of looks partitioned by genre
  • Any request where the answer would otherwise be "describe the style in a prompt"

The Core Finding

Prompting cannot deliver a grade. Measurement can.

Measured on real footage: three paid generations with escalating colour direction moved midtone a* from +1.9 → +2.8 → +0.3 against a +24.9 target, and contrast never left ~19 against a 34.7 target. Applying a measured pack to the same footage hit chroma MAE 1.88 and contrast 33.7 in one deterministic pass, for free.

So the split is: the model supplies content, motion and lighting structure; the pack supplies the look. Colour words in a generation prompt are worse than useless — they cost money and push the render away from the neutral base the LUT wants. Say so explicitly in the prompt: "Colour: none. Render neutral. Grading is applied afterwards."

What a Pack Contains

stylepacks/<genre>/
  grade.json      measured colour statistics (see below)
  cadence.json    every detected shot boundary + the derived distribution
  look.cube       33^3 LUT, drag straight into Resolve as a node LUT
  spec.json       VLM description, grounded in the measurements
  grounding.txt   the measured facts fed to the VLM
  stills/         full-res frames from the longest shots (conditioning images)
  plates/         screen-blend overlay elements lifted onto black
  props/          minted GLB meshes
  pack.json       manifest

Running It

bash
python mint.py --genre <name> --refs a.mov b.mov c.mov     # offline, no API key
python distill.py --genre <name>                            # one VLM call

mint.py is pure numeric analysis — no network, no key, deterministic, so a pack can be regenerated rather than backed up.

The Measurements That Matter

Chroma by luminance zone, not globally

Colour identity usually lives in one luminance band. A global a*/b* offset mathematically cannot represent split-toning. Measure chroma inside zones (L* edges [0,15,35,55,75,100]).

A real signature: violet at L*25 (a* +24.9, b* −17.5), near-neutral at both ends. Reporting only the darkest and lightest zones calls that "uniform cast" — always print the whole curve.

Median + MAD, never mean + std

Chroma in real reference sets is strongly right-skewed. On one measured reel the mean midtone chroma was 36.9 against a median of 17.5, so a mean-based LUT pushed colour ~3x harder than the material warranted.

Contrast is std(L*), not white minus black

The white−black range is ~100 on almost any real footage and discriminates nothing.

Background share is a first-class statistic

Record the share of pixels below L*10. No moment of the distribution can see it: a clip can hold the right mean, std and chroma while its blacks have been lifted into grey. This is exactly how a grade once scored MAE 1.88 / contrast 33.7 while the actual frame was a muddy purple mess.

Mask the interface before measuring

Screen-recorded references carry static furniture — letterbox bars, a status bar, a like icon, caption text. All of it lands in the statistics as if it were the look: black bars inflate shadow weight, a red heart skews a* toward magenta. Temporal variance separates them cleanly — the footage moves, the interface does not — so no hand-tuned crop is needed. On real material this keeps ~65% of pixels.

Cadence needs an adaptive threshold

The right content-detector threshold is material-dependent: a high-contrast action reference cuts hard enough for 30, a moody one hides its cuts under it. Sweep descending thresholds and take the highest one that still recovers ≥90% of the shots the most sensitive setting finds — that biases toward real cuts over noise. Reject thresholds implying an absurd cut rate (>100/min); continuous camera moves trip the detector every frame.

Run the whole sweep in one decode pass with a shared StatsManager. The naive version re-decodes per threshold, which on 60fps source is the difference between seconds and minutes.

Show full SKILL.md (510 more words)Show less

Overlay Plates: Assets, Not Screenshots

A still is a whole frame — compositing one just puts a second picture on top. A plate is the reference's graphic vocabulary (flares, streaks, glitch fragments) lifted onto black so it screen-blends with no keying.

Two traps, both hit on real material:

  1. Absolute thresholds fail. On a bright reference an L>55 AND chroma>12 selection takes ~90% of frame, and the "plate" is the picture — including a recognisable face. Select by percentile (~top 3%) and reject any plate covering more than ~22% of frame.
  2. Rank by separation, not by brightness. "Share of bright saturated pixels" ranks a washed-out frame top and a black frame with one intense flare — the actual signature — near the bottom. Score p99.5(energy) / median(energy).

Also mask before scoring: burnt-in typography is bright, saturated and high-contrast, so an unmasked run yields a perfect plate of someone else's title card.

Grounding the VLM

Feed the measurements into the system prompt before asking for a description. Ungrounded, a VLM will report "no apparent colour grading, neutral" on footage with a +24.9 a* cast. Grounded, it describes the cast correctly and infers the secondary accent independently.

Ban hedging words (varied, mixed, dynamic, some, often, neutral, or) — a model cannot render "varied lighting". Enforce the ban in code, not just in the prompt: it was violated in roughly one run in three. Re-ask per-field, keep the least-hedged answer after N attempts rather than failing.

Caveat worth stating to the user: once the spec is grounded in the measurements it is no longer an independent check on them.

LUT Baking Gotchas

  • A LUT can only encode a per-pixel RGB function. Anything distribution-dependent (histogram matching, percentile anchors) must be reduced to a constant before baking, or it silently measures the uniform LUT grid instead of the footage.
  • cv2.cvtColor(LAB2RGB) clamps internally, so an out-of-gamut test using it reports 0%. Convert Lab→linear sRGB by hand; a real measurement was 83.3% OOG.
  • Offset chroma transfer, not affine. Affine divides by the source σ and overshoots — on real footage it flipped b* to +11.6 against a −17.5 target. Offset took MAE from 6.23 to 2.13.
  • Gamut compression cost 3.8x runtime for identical MAE. Make it opt-in.

Anti-Patterns

Don'tWhy
Tune against synthetic test footageCost four separate wrong conclusions on one project; real footage overturned every one
Trust MAE alone1.88 MAE looked like success on a visibly broken frame
Use mean/std for chromaRight-skewed; pushes ~3x too hard
Compare only endpoint zonesBoth ends are near-neutral by construction
Describe the look and stopThe spec is for content and structure; the pack is for colour

Handoff

The pack is the interface. Once it exists, use the taste-application skill to generate and assemble against it, or hand look.cube to a colourist directly.

Bundled Code

scripts/ in this skill is a working implementation, not pseudocode. It has no project-specific assumptions: point it at any reference videos and it produces a pack.

bash
pip install -r scripts/requirements.txt
export FAL_KEY=...            # only needed for the stages that call fal

Every network call is stubbed under TASTE_FORGE_DRY_RUN=1 or --dry-run, so the plan, prompts, track layout and manifest can be inspected without spending.

© affaan-m, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 14 other files (scripts) in skills/taste-distillation of affaan-m/ECC.

  • SKILL.md
  • scripts/distill.py
  • scripts/mint.py
  • scripts/requirements-live.txt
  • scripts/requirements.txt
  • scripts/taste/__init__.py
  • scripts/taste/assemble.py
  • scripts/taste/cadence.py
  • scripts/taste/falapi.py
  • scripts/taste/frames.py
  • scripts/taste/grade.py
  • scripts/taste/pack.py
  • scripts/taste/plates.py
  • scripts/taste/render3d.py
  • scripts/taste/timeline.py

Open the folder on GitHubat commit 2d515e4

Compare with similar skills

Taste Distillation next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Taste Distillation compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Taste Distillation this skillaffaan-m/ECC277k—~2.3kAutomated safety check: PassMIT
AI Presenter VideoNousResearch/hermes-agent253k—~2.3kAutomated safety check: PassMIT
Historical Science Video Packanbeime/skill7.8k—~480Automated safety check: PassNone
Videothedaviddias/Front-End-Checklist74k—~562Automated safety check: PassMIT
MoneyPrinterTurbo Video Generatorharry0703/MoneyPrinterTurbo130k—~2.1kAutomated safety check: WarnMIT
Avatar Videocalesthio/OpenMontage66k—~1.6kAutomated safety check: PassAGPL-3.0

Similar skills

  • AI Presenter Video

    NousResearch/hermes-agent

    Produces a presenter-led video from a topic or script plus one authorized presenter image, with captions, lip-sync checks and acceptance reports.

    253k GitHub stars~2.3k tokensUpdated today
    Media & CreativeAuto-check passed
  • Produces a full material pack for a three-minute history-of-science explainer video from a theme, era and core conclusion: narration, storyboard, Veo2 prompts and character design.

    7.8k GitHub stars~480 tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Video

    thedaviddias/Front-End-Checklist

    A skill your agent uses when applies to any page embedding or hosting video content (YouTube, Vimeo, self-hosted).

    74k GitHub stars~562 tokensUpdated 4 days ago
    AI & LLM EngineeringAuto-check passed
  • MoneyPrinterTurbo Video Generator

    harry0703/MoneyPrinterTurbo

    Installs and runs MoneyPrinterTurbo to turn a topic or script into a finished short video with voice-over, subtitles, stock footage and music.

    130k GitHub stars~2.1k tokensUpdated yesterday
    Media & CreativeAuto-check: warnings
  • Avatar Video

    calesthio/OpenMontage

    Create AI avatar videos with precise control over avatars, voices, scripts, scenes, and backgrounds using HeyGen's v2 API.

    66k GitHub stars~1.6k tokensUpdated 7 days ago
    Media & CreativeAuto-check passed
  • Proof Video

    openclaw/openclaw

    Add subtitles, captions, narration cues, or zoom to a proof video or PR recording using repo-local capture helpers and a system ffmpeg renderer.

    392k GitHub stars~2.4k tokensUpdated today
    Media & CreativeAuto-check passed

More from affaan-m/ECC

All 682 skills in this repo
  • Skill Stocktake

    affaan-m/ECC

    Audits your installed Claude skills and commands for quality, with a quick mode for recently changed skills and a full mode that evaluates all of them through subagents.

    277k GitHub starsUsed in 5 repos~3.1k tokens
    Auto-check passed
  • Ingests, indexes, searches, edits and monitors video, audio and live streams through the VideoDB Python SDK, returning stream links, clips and timestamps.

    277k GitHub starsUsed in 3 repos~3.5k tokens
    Auto-check: notes
  • Docs Governance

    affaan-m/ECC

    Route broad documentation-governance requests to existing ECC skills and run an opt-in, read-only audit of mapped documentation roles, links, ADR indexes, and evidence references.

    277k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Rules Distillation

    affaan-m/ECC

    Scans installed skills for principles that recur across them and proposes rule-file changes: append, revise, add a section, create a file or leave as covered.

    277k GitHub starsUsed in 2 repos~2.3k tokens
    Auto-check passed
  • Builds DRAFT counterparty agreements from one markdown template and a small JSON spec per party, with clauses picked by the party's role.

    277k GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • Set an ECC-specific frontend design direction for production UI work.

    277k GitHub starsUsed in 1 repo~2.2k tokens
    Auto-check passed

Questions about Taste Distillation

What does Taste Distillation do?

Measure a set of reference videos into a reusable style pack - colour grade as a 3D LUT, cut rhythm as a shot-length distribution, hero stills, screen-blend overlay plates, and a text spec for a…. Taste Distillation is an agent skill from affaan-m/ECC. Measure a set of reference videos into a reusable style pack - colour grade as a 3D LUT, cut rhythm as a shot-length distribution, hero stills, screen-blend overlay plates, and a text spec for a generative model.

When should I use Taste Distillation?

Taste Distillation fits situations like: the user wants to capture the look of reference footage; build a repeatable look; mint assets from references; reproduce someones grade and pacing.

How do I install Taste Distillation in Claude Code?

Run `npx skills add affaan-m/ECC --skill taste-distillation -a claude-code`. Or copy the skill folder (skills/taste-distillation in affaan-m/ECC) into .claude/skills/taste-distillation in your project. Claude Code loads it when a task matches its description.

How do I install Taste Distillation in Codex?

Run `npx skills add affaan-m/ECC --skill taste-distillation -a codex`. Or copy the skill folder (skills/taste-distillation in affaan-m/ECC) into .agents/skills/taste-distillation in your project. Codex loads it when a task matches its description.

Can I use Taste Distillation in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add affaan-m/ECC --skill taste-distillation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/taste-distillation, .gemini/skills/taste-distillation, .github/skills/taste-distillation and .opencode/skills/taste-distillation in your project.

What does Taste Distillation need to run?

Going by SKILL.md and its folder, Taste Distillation needs Python for the scripts in its folder, the command-line tools its instructions call (python and pip) and credentials named FAL_KEY. Our summary lists: Python 3; A credential in FAL_KEY.

Does Taste Distillation access the network?

SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Taste Distillation safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Taste Distillation use?

Taste Distillation is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Taste Distillation use?

About 2.3k tokens (SKILL.md is roughly 9.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Taste Distillation?

Skills that share tags, products or a category with Taste Distillation: AI Presenter Video (NousResearch/hermes-agent, 253k stars), Historical Science Video Pack (anbeime/skill, 7.8k stars), Video (thedaviddias/Front-End-Checklist, 74k stars) and MoneyPrinterTurbo Video Generator (harry0703/MoneyPrinterTurbo, 130k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Taste Distillation?

affaan-m (a GitHub user) maintains it in affaan-m/ECC, which has 276,673 GitHub stars. The repository holds 683 skills in this directory. The repository was last updated on October 11, 2026.

Source: affaan-m/ECC on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.