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.
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…
$ npx skills add affaan-m/ECC --skill taste-distillation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install affaan-m/ECC taste-distillation --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "taste-distillation" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/taste-distillation into .claude/skills/taste-distillation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taste-distillation", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/affaan-m/ECC/tree/main/skills/taste-distillationType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add affaan-m/ECC --skill taste-distillation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install affaan-m/ECC taste-distillation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/taste-distillation .agents/skills/taste-distillation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "taste-distillation" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/taste-distillation into .agents/skills/taste-distillation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taste-distillation", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add affaan-m/ECC --skill taste-distillation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install affaan-m/ECC taste-distillation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/taste-distillation .cursor/skills/taste-distillation && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "taste-distillation" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/taste-distillation into .cursor/skills/taste-distillation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taste-distillation", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/affaan-m/ECC.git --path skills/taste-distillation--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add affaan-m/ECC --skill taste-distillation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install affaan-m/ECC taste-distillation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/taste-distillation .gemini/skills/taste-distillation && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "taste-distillation" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/taste-distillation into .gemini/skills/taste-distillation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taste-distillation", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install affaan-m/ECC taste-distillationInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add affaan-m/ECC --skill taste-distillation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/taste-distillation .github/skills/taste-distillation && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "taste-distillation" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/taste-distillation into .github/skills/taste-distillation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taste-distillation", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add affaan-m/ECC --skill taste-distillation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install affaan-m/ECC taste-distillation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/affaan-m/ECC.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/taste-distillation .opencode/skills/taste-distillation && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "taste-distillation" agent skill from https://github.com/affaan-m/ECC/tree/main/skills/taste-distillation into .opencode/skills/taste-distillation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "taste-distillation", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
taste-distillationMeasure 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. 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.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 2d515e4. It shows what the files ask for, not the result of running them.
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.
Ships 14 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonpipFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names these keys or tokens, usually read from environment variables:
FAL_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from affaan-m/ECC at commit 2d515e4, republished under its MIT licence (© affaan-m). 1,175 words, ~2,273 tokens.
.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.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.
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."
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 manifestpython mint.py --genre <name> --refs a.mov b.mov c.mov # offline, no API key
python distill.py --genre <name> # one VLM callmint.py is pure numeric analysis — no network, no key, deterministic, so a pack
can be regenerated rather than backed up.
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.
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.
The white−black range is ~100 on almost any real footage and discriminates nothing.
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.
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.
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.
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:
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.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.
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.
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.| Don't | Why |
|---|---|
| Tune against synthetic test footage | Cost four separate wrong conclusions on one project; real footage overturned every one |
| Trust MAE alone | 1.88 MAE looked like success on a visibly broken frame |
| Use mean/std for chroma | Right-skewed; pushes ~3x too hard |
| Compare only endpoint zones | Both ends are near-neutral by construction |
| Describe the look and stop | The spec is for content and structure; the pack is for colour |
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.
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.
pip install -r scripts/requirements.txt
export FAL_KEY=... # only needed for the stages that call falEvery 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
SKILL.md and 14 other files (scripts) in skills/taste-distillation of affaan-m/ECC.
Open the folder on GitHubat commit 2d515e4
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Taste Distillation this skillaffaan-m/ECC | 277k | — | ~2.3k | Automated safety check: Pass | MIT | |
| AI Presenter VideoNousResearch/hermes-agent | 253k | — | ~2.3k | Automated safety check: Pass | MIT | |
| Historical Science Video Packanbeime/skill | 7.8k | — | ~480 | Automated safety check: Pass | None | |
| Videothedaviddias/Front-End-Checklist | 74k | — | ~562 | Automated safety check: Pass | MIT | |
| MoneyPrinterTurbo Video Generatorharry0703/MoneyPrinterTurbo | 130k | — | ~2.1k | Automated safety check: Warn | MIT | |
| Avatar Videocalesthio/OpenMontage | 66k | — | ~1.6k | Automated safety check: Pass | AGPL-3.0 |
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.
anbeime/skill
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.
thedaviddias/Front-End-Checklist
A skill your agent uses when applies to any page embedding or hosting video content (YouTube, Vimeo, self-hosted).
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.
calesthio/OpenMontage
Create AI avatar videos with precise control over avatars, voices, scripts, scenes, and backgrounds using HeyGen's v2 API.
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.
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.
affaan-m/ECC
Ingests, indexes, searches, edits and monitors video, audio and live streams through the VideoDB Python SDK, returning stream links, clips and timestamps.
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.
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.
affaan-m/ECC
Builds DRAFT counterparty agreements from one markdown template and a small JSON spec per party, with clauses picked by the party's role.
affaan-m/ECC
Set an ECC-specific frontend design direction for production UI work.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.