Communitygithub.com

distillation-de-goût

Mesure un ensemble de vidéos de référence pour créer un pack de style réutilisable : étalonnage sous forme de LUT 3D, rythme de coupe sous forme de distribution de longueur de plan, images clés, plaques de fusion d'écran et un spécification textuelle pour un modèle génératif.

Qu'est-ce que distillation-de-goût ?

Cette compétence transforme des vidéos de référence en un **pack de style** reproductible : un dossier structuré contenant des mesures et des assets (LUT 3D, distribution des coupes, images clés, plaques de fusion d'écran, maillages GLB, et une spécification textuelle pour un modèle génératif). Elle résout le problème fondamental que les modèles d'IA ne peuvent pas reproduire un étalonnage précis à partir d'une simple description textuelle – les mesures montrent que les descriptions de couleur dans les prompts sont inefficaces et coûtent cher, tandis qu'un pack mesuré atteint une erreur chromatique (MAE) de 1.88 et un contraste de 33.7 en un seul passage déterministe. La compétence effectue une analyse purement numérique (sans réseau, sans clé API) via `mint.py`, puis une seule appel LLM via `distill.py`. Elle utilise des métriques robustes : médiane + MAD pour la chroma (évitant les biais des moyennes), une segmentation de la luminance en zones (évitant les statistiques globales qui masquent le split-toning), et un masquage automatique des éléments d'interface (lettre-box, boutons, barres) par variance temporelle. Le pack final peut être utilisé avec la compétence `taste-application` pour générer du contenu ou remis directement à un coloriste.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/taste-distillation

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Distillation de Goût

Cette compétence autonome livre son implémentation dans scripts/ ; utilisez taste-application pour le montage ultérieur généré ou local. Gardez chaque genre nommé dans son propre pack. Les mesures de Flash Ethereal ne doivent pas être réutilisées silencieusement pour Fluid Sketch ou 3D Cyber Glitch. Une mesure zéro est une donnée valide ; distinguez-la d'un champ absent.

Les dépendances locales sont dans scripts/requirements.txt. Le travail de fournisseur séparément autorisé a également besoin de scripts/requirements-live.txt, d'identifiants et de TASTE_FORGE_ALLOW_LIVE=1 explicite. --dry-run ne lit pas les identifiants ni ne soumet de tâches. Ne déduisez jamais qu'un workflow a été sauvegardé à partir d'un nom de point de terminaison local ; utilisez le workflow côté fournisseur ou la preuve de la requête.

Transformez des vidéos de référence en un pack de style : un dossier de mesures et d'assets que les étapes ultérieures consomment de manière déterministe.

Quand Activer

  • « capturer le look de ces clips » / « distiller l'ambiance » / « rendre cela reproductible »
  • L'utilisateur a des images de référence et veut une LUT, un étalonnage ou un rythme correspondant
  • Construire une bibliothèque de looks partitionnés par genre
  • Toute requête où la réponse serait autrement « décrire le style dans un prompt »

La Découverte Fondamentale

Le prompt ne peut pas livrer un étalonnage. La mesure le peut.

Mesuré sur des images réelles : trois générations payées avec une direction de couleur croissante ont déplacé le a* des tons moyens de +1.9 → +2.8 → +0.3 par rapport à une cible de +24.9, et le contraste n'a jamais quitté ~19 contre une cible de 34.7. L'application d'un pack mesuré à la même séquence a touché une MAE chromatique de 1.88 et un contraste de 33.7 en un seul passage déterministe, gratuitement.

Donc la division est : le modèle fournit le contenu, le mouvement et la structure d'éclairage ; le pack fournit le look. Les mots de couleur dans un prompt de génération sont pire qu'inutiles — ils coûtent de l'argent et éloignent le rendu de la base neutre que la LUT souhaite. Dites-le explicitement dans le prompt : « Couleur : aucune. Rendu neutre. L'étalonnage est appliqué a posteriori. »

Contenu d'un Pack

stylepacks/<genre>/
  grade.json      statistiques de couleur mesurées (voir ci-dessous)
  cadence.json    chaque limite de plan détectée + la distribution dérivée
  look.cube       LUT 33^3, glissez directement dans Resolve comme LUT de nœud
  spec.json       description VLM, ancrée dans les mesures
  grounding.txt   les faits mesurés fournis au VLM
  stills/         images plein format des plans les plus longs (images de conditionnement)
  plates/         éléments de superposition de fusion d'écran extraits sur fond noir
  props/          maillages GLB frappés
  pack.json       manifeste

Exécution

python mint.py --genre <nom> --refs a.mov b.mov c.mov     # hors ligne, pas de clé API
python distill.py --genre <nom>                            # un appel VLM

mint.py est une analyse numérique pure — pas de réseau, pas de clé, déterministe, donc un pack peut être regénéré plutôt que sauvegardé.

Les Mesures Qui Comptent

Chroma par zone de luminance, pas globalement

L'identité de couleur vit généralement dans une bande de luminance. Un décalage global a*/b* ne peut mathématiquement pas représenter un split-toning. Mesurez la chroma à l'intérieur de zones (bords L* [0,15,35,55,75,100]).

Une vraie signature : violet à L25 (a +24.9, b* −17.5), quasi neutre aux deux extrémités. Ne rapporter que les zones les plus sombres et les plus claires appelle cela « dominante uniforme » — imprimez toujours la courbe entière.

Médiane + MAD, jamais moyenne + écart type

La chroma dans les ensembles de référence réels est fortement asymétrique à droite. Sur un rouleau mesuré, la chroma moyenne des tons moyens était de 36.9 contre une médiane de 17.5, donc une LUT basée sur la moyenne poussait la couleur ~3x plus fort que ce que le matériau justifiait.

Le contraste est std(L*), pas blanc moins noir

La plage blanc−noir est ~100 sur presque toutes les images réelles et ne discrimine rien.

La part d'arrière-plan est une statistique de première classe

Enregistrez la part des pixels en dessous de L*10. Aucun moment de la distribution ne peut la voir : un clip peut avoir la bonne moyenne, écart type et chroma alors que ses noirs ont été relevés en gris. C'est exactement comment un étalonnage a un jour obtenu un score MAE 1.88 / contraste 33.7 alors que l'image réelle était un désordre violet boueux.

Masquez l'interface avant de mesurer

Les références enregistrées d'écran portent des éléments d'interface statiques — barres de lettre-box, barre de statut, icône de like, texte de légende. Tout cela atterrit dans les statistiques comme s'il s'agissait du look : les barres noires gonflent le poids des ombres, un cœur rouge fausse a* vers le magenta. La variance temporelle les sépare proprement — l'image bouge, l'interface pas — donc aucun recadrage manuel n'est nécessaire. Sur du matériel réel, cela conserve ~65% des pixels.

Le rythme a besoin d'un seuil adaptatif

Le bon seuil de détection de contenu dépend du matériau : une référence d'action à haut contraste coupe assez fort pour 30, une référence moody cache ses coupes en dessous. Parcourez les seuils décroissants et prenez le plus élevé qui récupère encore ≥90% des plans que le réglage le plus sensible trouve — cela favorise les vraies coupes par rapport au bruit. Rejetez les seuils impliquant un taux de coupe absurde (>100/min) ; les mouvements de caméra continus déclenchent le détecteur à chaque image.

Effectuez tout le balayage en un seul passage de décodage avec un StatsManager partagé. La version naïve re-décode par seuil, ce qui sur une source 60fps est la différence entre secondes et minutes.

Plaques de Fusion : Assets, Pas Captures d'Écran

Une image fixe est une image entière — en composer une met juste une deuxième image par-dessus. Une plaque est le vocabulaire graphique de la référence (éblouissements, traînées, fragments de glitch) extrait sur fond noir de sorte qu'il se fonde avec un écran sans incrustation.

Deux pièges, tous deux rencontrés sur du matériel réel :

  1. Les seuils absolus échouent. Sur une référence lumineuse, une sélection L>55 ET chroma>12 prend ~90% de l'image, et la « plaque » est l'image — y compris un visage reconnaissable. Sélectionnez par percentile (~top 3%) et rejetez toute plaque couvrant plus de ~22% de l'image.
  2. Classez par séparation, pas par luminosité. « Part de pixels lumineux saturés » classe une image délavée en tête et une image noire avec un seul éblouissement intense — la véritable signature — près du bas. Scorez p99.5(énergie) / médiane(énergie).

Masquez aussi avant de noter : la typographie incrustée est lumineuse, saturée et à haut contraste, donc une exécution non masquée produit une plaque parfaite de la carte de titre de quelqu'un d'autre.

Ancrage du VLM

Introduisez les mesures dans le prompt système avant de demander une description. Non ancré, un VLM signalera « aucun étalonnage apparent, neutre » sur une image avec un a* à +24.9. Ancré, il décrit correctement la dominante et infère l'accent secondaire indépendamment.

Interdisez les mots d'hésitation (varié, mixte, dynamique, quelques, souvent, neutre, ou) — un modèle ne peut pas rendre « éclairage varié ». Appliquez l'interdiction dans le code, pas seulement dans le prompt : elle était violée dans environ une exécution sur trois. Redemandez par champ, gardez la réponse la moins hésitante après N tentatives plutôt que d'échouer.

Avertissement à mentionner à l'utilisateur : une fois la spécification ancrée dans les mesures, elle n'est plus un contrôle indépendant sur celles-ci.

Pièges de la Cuisson de LUT

  • Une LUT ne peut encoder qu'une fonction RVB par pixel. Tout ce qui dépend de la distribution (correspondance d'histogramme, ancres de percentile) doit être réduit à une constante avant la cuisson, sinon il mesure silencieusement la grille uniforme de la LUT au lieu de l'image.
  • cv2.cvtColor(LAB2RGB) sature en interne, donc un test hors gamut utilisant cela signale 0%. Convertissez Lab→sRGB linéaire à la main ; une mesure réelle était de 83.3% hors gamut.
  • Transfert de chroma par décalage, pas affine. L'affine divise par le σ de la source et dépasse — sur des images réelles, il a inversé b* à +11.6 contre une cible de −17.5. Le décalage a fait passer la MAE de 6.23 à 2.13.
  • La compression de gamut coûtait 3.8x le temps d'exécution pour une MAE identique. Rendez-la optionnelle.

Anti-Patterns

À ne pas fairePourquoi
Régler sur des séquences de test synthétiquesA coûté quatre conclusions erronées distinctes sur un projet ; les séquences réelles les ont toutes renversées
Faire confiance uniquement à la MAEUne MAE de 1.88 semblait être un succès sur une image visiblement cassée
Utiliser moyenne/écart type pour la chromaAsymétrique à droite ; pousse ~3x trop fort
Comparer uniquement les zones d'extrémitéLes deux extrémités sont quasi neutres par construction
Décrire le look et s'arrêterLa spécification est pour le contenu et la structure ; le pack est pour la couleur

Passation

Le pack est l'interface. Une fois qu'il existe, utilisez la compétence taste-application pour générer et assembler par rapport à lui, ou remettez look.cube directement à un coloriste.

Code Fourni

scripts/ dans cette compétence est une implémentation fonctionnelle, pas du pseudo-code. Elle n'a pas d'hypothèses spécifiques à un projet : pointez-la vers n'importe quelles vidéos de référence et elle produit un pack.

pip install -r scripts/requirements.txt
export FAL_KEY=...            # uniquement nécessaire pour les étapes qui appellent fal

Chaque appel réseau est simulé sous TASTE_FORGE_DRY_RUN=1 ou --dry-run, donc le plan, les prompts, la disposition des pistes et le manifeste peuvent être inspectés sans dépenser.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

Skills associés