Communitygithub.com

taste-distillation

Mide un conjunto de videos de referencia para convertirlos en un paquete de estilo reutilizable: etalonaje como LUT 3D, ritmo de corte como distribución de duración de planos, fotogramas clave, placas de superposición con fusión de pantalla y una especificación de texto para un modelo generativo. Úsalo cuando el usuario desee capturar el aspecto de metraje de referencia, construir un look reproducible, generar activos a partir de referencias o reproducir un estilo existente.

¿Qué es taste-distillation?

Este skill, independiente y autocontenido, analiza metraje de referencia (videos) para extraer un paquete de estilo (style pack) que puede aplicarse de forma determinista en etapas posteriores (por ejemplo, mediante el skill `taste-application`). A diferencia de depender de descripciones textuales (prompts) para replicar un look—que resultan costosas e imprecisas—, el skill realiza mediciones cuantitativas: estadísticas de color por zonas de luminancia, distribución de duración de planos, contraste, proporción de fondo negro y enmascaramiento automático de elementos de interfaz estáticos. El resultado incluye un LUT 3D (look.cube) listo para usar en DaVinci Resolve, fotogramas clave, placas de superposición (flares, destellos) sobre fondo negro, y una especificación textual fundamentada en las mediciones. Funciona sin conexión a internet para la etapa de medición numérica (mint.py), y realiza una única llamada a un VLM (distill.py) para generar la descripción textual, siempre con opción de simulación (dry-run). El skill está implementado en scripts/ y es aplicable a cualquier conjunto de videos de referencia, sin dependencias específicas de proyecto.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/taste-distillation

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Destilación de Estilo (Taste Distillation)

Este skill independiente incluye su implementación en scripts/; utiliza taste-application para la edición posterior generada o local. Mantén cada género nombrado en su propio paquete. Las mediciones de Flash Ethereal no deben reutilizarse silenciosamente para Fluid Sketch o 3D Cyber Glitch. Un cero medido es un dato válido; distínguelo de un campo ausente.

Las dependencias locales están en scripts/requirements.txt. El trabajo de proveedor autorizado por separado también necesita scripts/requirements-live.txt, credenciales y TASTE_FORGE_ALLOW_LIVE=1 explícito. --dry-run no lee credenciales ni envía trabajos. Nunca infieras que un flujo de trabajo se guardó desde un nombre de punto final local; usa la evidencia del flujo de trabajo o solicitud real del proveedor.

Convierte videos de referencia en un paquete de estilo: una carpeta de mediciones y activos que las etapas posteriores consumen de forma determinista.

Cuándo activarlo

  • "captura el aspecto de estos clips" / "destila la vibra" / "hazlo repetible"
  • El usuario tiene metraje de referencia y quiere un LUT, un etalonaje o un ritmo de edición coincidente
  • Construir una biblioteca de looks divididos por género
  • Cualquier solicitud cuya respuesta sería "describe el estilo en un prompt"

El hallazgo fundamental

El prompting no puede dar un etalonaje. La medición sí.

Medido en metraje real: tres generaciones pagadas con dirección de color creciente movieron el a* de tonos medios de +1,9 → +2,8 → +0,3 frente a un objetivo de +24,9, y el contraste nunca abandonó ~19 frente a un objetivo de 34,7. Aplicar un paquete medido al mismo metraje obtuvo un MAE de croma de 1,88 y un contraste de 33,7 en un solo paso determinista, gratis.

Así que la división es: el modelo proporciona contenido, movimiento y estructura de iluminación; el paquete proporciona el look. Las palabras de color en un prompt de generación son peores que inútiles: cuestan dinero y alejan el render de la base neutra que el LUT necesita. Dilo explícitamente en el prompt: "Color: ninguno. Render neutro. El etalonaje se aplica después."

Qué contiene un paquete

stylepacks/<genero>/
  grade.json      estadísticas de color medidas (ver más abajo)
  cadence.json    cada límite de plano detectado + la distribución derivada
  look.cube       LUT 33^3, arrastra directamente a Resolve como LUT de nodo
  spec.json       descripción VLM, fundamentada en las mediciones
  grounding.txt   los hechos medidos proporcionados al VLM
  stills/         fotogramas de máxima resolución de los planos más largos (imágenes de condicionamiento)
  plates/         elementos de superposición con fusión de pantalla extraídos sobre fondo negro
  props/          mallas GLB acuñadas
  pack.json       manifiesto

Cómo ejecutarlo

python mint.py --genre <nombre> --refs a.mov b.mov c.mov     # sin conexión, sin clave API
python distill.py --genre <nombre>                            # una llamada VLM

mint.py es análisis numérico puro: sin red, sin clave, determinista, por lo que un paquete puede regenerarse en lugar de respaldarse.

Las mediciones que importan

Croma por zona de luminancia, no global

La identidad del color suele vivir en una banda de luminancia. Un desplazamiento global a*/b* matemáticamente no puede representar un split-toning. Mide el croma dentro de las zonas (bordes L* [0,15,35,55,75,100]).

Una firma real: violeta en L25 (a +24,9, b* −17,5), casi neutro en ambos extremos. Informar solo de las zonas más oscuras y más claras lo llama "tinte uniforme" — imprime siempre la curva completa.

Mediana + MAD, nunca media + desviación estándar

El croma en conjuntos de referencia reales está fuertemente sesgado a la derecha. En un metraje medido, la media del croma en tonos medios fue de 36,9 frente a una mediana de 17,5, por lo que un LUT basado en la media empujó el color ~3 veces más de lo que justificaba el material.

El contraste es la desviación estándar de L*, no blanco menos negro

El rango blanco−negro es de ~100 en casi cualquier metraje real y no discrimina nada.

La proporción de fondo es una estadística de primera clase

Registra la proporción de píxeles por debajo de L*10. Ningún momento de la distribución puede verlo: un clip puede tener la media, desviación estándar y croma correctos mientras sus negros se han elevado hasta volverse grises. Así es como un etalonaje obtuvo una vez un MAE de 1,88 / contraste de 33,7 mientras que el fotograma real era un desastre púrpura embarrado.

Enmascara la interfaz antes de medir

Las referencias grabadas de pantalla llevan mobiliario estático: barras de letterbox, una barra de estado, un icono de "me gusta", texto de subtítulos. Todo ello aparece en las estadísticas como si fuera parte del look: las barras negras influyen el peso de las sombras, un corazón rojo sesga a* hacia el magenta. La varianza temporal los separa limpiamente — el metraje se mueve, la interfaz no — por lo que no se necesita un recorte ajustado a mano. En material real, esto conserva ~65% de los píxeles.

El ritmo de corte necesita un umbral adaptativo

El umbral correcto del detector de contenido depende del material: una referencia de acción de alto contraste corta lo suficientemente fuerte para 30, una de ambiente oculta sus cortes debajo de él. Barre umbrales descendentes y toma el más alto que aún recupere ≥90% de los cortes que encuentra la configuración más sensible — eso sesga hacia cortes reales en lugar de ruido. Rechaza umbrales que impliquen una tasa de corte absurda (>100/min); los movimientos de cámara continuos activan el detector en cada fotograma.

Ejecuta todo el barrido en una sola pasada de decodificación con un StatsManager compartido. La versión ingenua redecodifica por umbral, lo que en una fuente de 60 fps es la diferencia entre segundos y minutos.

Placas de superposición: activos, no capturas de pantalla

Un fotograma fijo es un fotograma completo — componer uno simplemente coloca una segunda imagen encima. Una placa es el vocabulario gráfico de la referencia (destellos, rayas, fragmentos de glitch) extraído sobre negro para que se fusione por pantalla sin necesidad de encuadre.

Dos trampas, ambas acertadas en material real:

  1. Los umbrales absolutos fallan. En una referencia brillante, una selección L>55 AND croma>12 toma ~90% del fotograma, y la "placa" es la imagen — incluyendo una cara reconocible. Selecciona por percentil (~top 3%) y rechaza cualquier placa que cubra más de ~22% del fotograma.
  2. Clasifica por separación, no por brillo. "Proporción de píxeles brillantes y saturados" clasifica un fotograma lavado en la parte superior y un fotograma negro con un destello intenso — la firma real — cerca de la parte inferior. Puntúa con p99.5(energía) / mediana(energía).

Además, enmascara antes de puntuar: la tipografía incrustada es brillante, saturada y de alto contraste, por lo que una ejecución sin enmascarar produce una placa perfecta de la tarjeta de título de otra persona.

Fundamentando el VLM

Introduce las mediciones en el prompt del sistema antes de pedir una descripción. Sin fundamento, un VLM informará "sin etalonaje aparente, neutro" en metraje con un tinte a* de +24,9. Con fundamento, describe el tinte correctamente e infiere el acento secundario de forma independiente.

Prohíbe las palabras de ambigüedad (variado, mixto, dinámico, alguno, a menudo, neutro, o) — un modelo no puede renderizar "iluminación variada". Aplica la prohibición en el código, no solo en el prompt: se violó en aproximadamente una de cada tres ejecuciones. Vuelve a preguntar por campo, conserva la respuesta menos ambigua después de N intentos en lugar de fallar.

Advertencia que vale la pena indicar al usuario: una vez que la especificación está fundamentada en las mediciones, ya no es una comprobación independiente sobre ellas.

Problemas conocidos al hornear LUT

  • Un LUT solo puede codificar una función RGB por píxel. Cualquier cosa que dependa de la distribución (coincidencia de histograma, anclajes de percentiles) debe reducirse a una constante antes de hornear, o mide silenciosamente la cuadrícula uniforme del LUT en lugar del metraje.
  • cv2.cvtColor(LAB2RGB) recorta internamente, por lo que una prueba fuera de gama que lo use informa 0%. Convierte Lab→sRGB lineal manualmente; una medición real mostró un 83,3% fuera de gama.
  • Transfiere el croma con desplazamiento, no afín. El afín divide por la σ de la fuente y se excede — en metraje real invirtió b* a +11,6 frente a un objetivo de −17,5. El desplazamiento redujo el MAE de 6,23 a 2,13.
  • La compresión de gama costó 3,8 veces el tiempo de ejecución para un MAE idéntico. Hazla optativa.

Anti-patrones

No hagasPor qué
Ajustar contra metraje de prueba sintéticoCostó cuatro conclusiones erróneas separadas en un proyecto; el metraje real las desmintió todas
Confiar solo en el MAE1,88 de MAE parecía un éxito en un fotograma visiblemente defectuoso
Usar media/desviación estándar para el cromaSesgado a la derecha; empuja ~3 veces más fuerte
Comparar solo las zonas extremasAmbos extremos son casi neutros por construcción
Describir el look y pararLa especificación es para contenido y estructura; el paquete es para el color

Traspaso

El paquete es la interfaz. Una vez que existe, usa el skill taste-application para generar y ensamblar contra él, o entrega look.cube directamente a un colorista.

Código incluido

scripts/ en este skill es una implementación funcional, no pseudocódigo. No tiene suposiciones específicas de proyecto: apúntalo a cualquier video de referencia y produce un paquete.

pip install -r scripts/requirements.txt
export FAL_KEY=...            # solo necesario para las etapas que llaman a fal

Cada llamada de red está simulada bajo TASTE_FORGE_DRY_RUN=1 o --dry-run, por lo que el plan, los prompts, la disposición de pistas y el manifiesto se pueden inspeccionar sin gastar.

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/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

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.

Skills relacionados