Communitygithub.com

taste-application

Genera un nuevo video a partir de un paquete de estilo destilado y lo edita en una pieza terminada; el plan se inspira en la referencia.

¿Qué es taste-application?

Este skill, 'taste-application', constituye la segunda mitad del pipeline de generación de video estilizado. Su función es tomar un 'paquete de estilo' generado por el skill complementario 'taste-distillation' (que mide las referencias) y producir un video nuevo que se ajuste a ese estilo, cortándolo con un ritmo editorial preciso. Está diseñado para agentes de IA como Claude Code y asume que el usuario ya posee un paquete de estilo y metraje de base o generado. El skill se ejecuta íntegramente desde un script en Python (`scripts/pipeline.py`) y no requiere un checkout separado de un repositorio de video. Su valor principal radica en la capacidad de generar 'tomas' (takes) largas que luego se cortan internamente para lograr alta eficiencia (77% frente al 21% de generar un clip por cada toma), preservando la continuidad visual y el ritmo medido del estilo de referencia. El skill también soporta la creación de activos 3D y su integración en el video final, así como rigurosas reglas de etalonaje (color grading) y verificación de resultados, incluyendo la detección de formas de distribución y no solo promedios.

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

Preguntar en tu IA favorita

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

Documentación

Aplicación de Estilo (taste-application)

La segunda mitad del pipeline. taste-distillation mide las referencias para crear un paquete de estilo; esto genera contenido a partir de ese paquete y lo edita.

Contrato de Ejecución y Entrega

La implementación original se encuentra en scripts/; no se necesita un checkout separado de ito-video. Instale scripts/requirements.txt para procesamiento local. Instale scripts/requirements-live.txt solo para ejecución en el proveedor. Las cargas, envíos y descargas en vivo requieren la variable TASTE_FORGE_ALLOW_LIVE=1 además de las credenciales; actívela solo para la ejecución autorizada del usuario. --dry-run permanece libre de credenciales y genera marcadores etiquetados. Un tiempo de espera ambiguo del proveedor no se reintenta como un nuevo trabajo pago. Inspeccione la solicitud al proveedor antes de decidir si otro envío está justificado.

Utilice tomas completadas existentes sin llamadas al proveedor:

python scripts/pipeline.py --genre example --root stylepacks \
  --takes media/take-a.mp4 media/take-b.mp4 --duration 12 --fps 30 \
  --out out/review-v1.mp4

--duration es un objetivo de cadencia de mejor esfuerzo, no un tiempo de ejecución exacto. Las tomas completas pueden producir una edición más corta o más larga; el ensamblador no duplica clips ni añade relleno para alcanzar el objetivo. El manifiesto de salida conserva la duration real y añade duration_contract con los segundos solicitados y reales, el déficit, el exceso y la política cadence_target. Las diferencias de al menos un fotograma de salida se advierten explícitamente. No se proporciona un modo de duración exacta; cuando se requiera un tiempo de ejecución exacto, inspeccione el recibo y revise o rechace el corte antes de la entrega.

El pipeline conserva los archivos de toma clasificados de cada ejecución porque el FCPXML y EDL editables los referencian. Rechaza colisiones de salida e informa fallos de exportación de la línea de tiempo. Una renderización completada no es un proyecto de editor guardado ni una aprobación creativa. Conserve los activos fuente y los puntos de control del proyecto versionados antes y después de las ediciones en vivo; registre la ruta guardada y el resumen por separado del recibo de la línea de tiempo en memoria.

Los gráficos de Fal listos para clonar y su compilador de entrada sin conexión están documentados en workflows/README.md. Compile el resumen y la dirección de estilo antes del envío; no asuma que un campo de esquema desconectado afecta a una instrucción del modelo. Valide los campos del endpoint actual contra el proveedor real antes de una ejecución paga.

Para Blender, utilice el GLB texturizado completo; la retopología es un derivado con nombre separado y nunca reemplaza esa fuente. blender_prop.py soporta --width 1920 --height 1080 --fps 30 --receipt receipt.json explícitos y conserva la iluminación de borde y las texturas de material derivadas del paquete. Guardar una escena es distinto a renderizarla; inspeccione el estado del recibo y las imágenes empaquetadas.

Para las superposiciones de Resolve, use taste.resolve.apply_placements con objetos inyectados desde un destino versionado explícitamente seleccionado. Establezca source_end_mode según la convención verificada en ese host. No asuma un final de fuente inclusivo entre versiones de Resolve. El adaptador asigna efectos superpuestos sobre pistas conservadas y verifica cada colocación inmediatamente y de nuevo después de todas las adiciones. Los enteros compuestos deben coincidir con la API instalada; para el host Studio 21 verificado, Screen es 5, no el 22 incorrecto del constructor histórico. El recibo prueba solo la colocación en memoria. Guarde el proyecto, verifique su punto de control, luego inspeccione la salida renderizada exacta antes de informar la entrega.

Cuándo Activar

  • "haz un video con este estilo" / "aplica el paquete" / "complementa este metraje"
  • Ensamblar clips generados en algo con un ritmo de edición real
  • Acuñar props 3D a partir de un aspecto y devolverlos al video
  • Verificar que una pieza terminada realmente coincide con su referencia

División del Trabajo

El modelo proporciona contenido, movimiento, encuadre y estructura de iluminación. El paquete proporciona color y ritmo. Esto se mide, no es una preferencia estilística; consulte taste-distillation para los números. Consecuencias prácticas:

  • La instrucción de generación contiene lenguaje de color cero. Añada "Color: ninguno. Renderizar neutro. El etalonaje se aplica después."
  • Mantenga dos banderas separadas: --brief (qué SUCEDE: sujeto, acción, lugar) y --style-steer (cómo SE VE). Fusionarlas filtra palabras de estilo en la escena ("verde azulado" se convierte en un objeto verde azulado) y palabras de sujeto en la gradación.
  • El modelo responde mucho mejor a reglas locales y comprobables que a las globales. "Fondos completamente negros y sin iluminación; sujetos que se inclinan hacia el blanco" funciona; "contraste extremo" no.

Generar TOMAS, No Planos

La lectura obvia de "coincidir con la cadencia" es una generación por plano. Es económicamente absurdo. Una referencia de 0.78s/plano contra un endpoint con un mínimo de 4 segundos convierte una pieza de 10s en 12 llamadas, 48 segundos generados para 10 usados (21% de eficiencia), y doce clips no relacionados cosidos en lo que debería leerse como continuo.

Los editores ruedan una toma más larga y cortan dentro de ella. Agrupar planos en tomas de ~5s: 3 llamadas, 13 segundos generados, 77% de eficiencia, y planos consecutivos que realmente pertenecen entre sí porque provinieron de la misma generación.

Dígale al modelo qué forma quiere, o renderiza un push lento y bloqueado y seis cortes dentro de él se leen como un tartamudeo:

"Filmado como UNA sola toma continua sin cortes duros dentro de ella. Se cortará en 6 piezas de aproximadamente 0.8s en la edición, por lo que el encuadre, el sujeto y la luz deben seguir cambiando en todo momento; cualquier ventana de 0.8s tiene que sostenerse por sí misma como su propio plano."

Reglas de Corte

  • Re-codifique, nunca copie en streaming. La copia en streaming solo corta en keyframes, que a 0.78s significa que la duración del plano redondea cada límite al GOP más cercano, destruyendo lo mismo que el pipeline existe para preservar.
  • Al complementar metraje existente, use sus propios límites de plano. Dividir un video base en piezas contiguas y reproducirlas en orden solo reensambla el original: cada "corte" cae en medio de un plano y es invisible. Medido, un ensamblaje de 20 planos registró solo 12 cortes detectados. Detecte límites reales y tome cada N-ésimo para que las selecciones consecutivas estén garantizadas como no continuas. Eso movió una medición de corte de 1.29s a 0.83s contra un objetivo de 0.78s.
  • Muestree las duraciones de los planos de la distribución de la referencia, no de su media, para que el corte herede la varianza del ritmo en lugar de aplanarse a clips uniformes.

Reglas de Etalonaje

  • La medición directa supera a una LUT horneada cuando tienes el clip: mídela, empareja su función de distribución acumulada (CDF) L*, aplica croma por zona. grade_clip_direct alcanzó MAE 1.58 y contraste 34.0 frente a 34.7.
  • Ancle, no empareje CDF, cuando el histograma del clip no se parece al de la referencia. Forzar un clip generado con 68% de negro sobre un histograma de referencia ocupado elevó todo el fondo fuera del negro: la preservación del fondo cayó al 26.0% (CDF) frente al 69.0% (anclaje), mientras que MAE y contraste aún se veían excelentes. Por defecto, use anclaje de tono.
  • El tamaño del lote importa. Etalonar 48 fotogramas a la vez mató el proceso por falta de memoria; 6 es seguro.

Comportamiento Recuperado de la Plataforma fal

Estas observaciones y ejemplos de endpoints provienen del flujo de trabajo recuperado. Vuelva a verificar los metadatos actuales del endpoint; no son garantías sobre cada versión futura del proveedor. Las plantillas de gráfico incluidas registran las entradas del flujo de trabajo verificadas por separado, incluido el control explícito de audio generado.

Estos cuestan tiempo real de descubrir. Verifíquelos antes de diseñar un gráfico.

LímiteDetalle
Sin renderizador 3Dfal tiene image-to-3d, text-to-3d, 3d-to-3d y nada más. Cada endpoint 3d-to-3d emite otra malla. No hay categoría 3d-to-image/3d-to-video, por lo que un GLB acuñado no puede reingresar a un gráfico de video de fal. Renderice localmente, luego use fal-ai/ffmpeg-api/images-to-video.
compose no puede superponerfal-ai/ffmpeg-api/compose rechaza una segunda pista con "Multiple video tracks are not supported" — y cuenta una pista de image como pista de video. Solo secuencia una pista de video. Componga localmente con ffmpeg.
compose keyframes están en milisegundosNada en la respuesta lo dice. Una ejecución enviada en segundos es aceptada y devuelve un video 1000x más corto.
extract-frame ofrece solo primero/medio/últimoSin marca de tiempo arbitraria. Use los tres como tres imágenes de condicionamiento distintas.
Sin bucles, sin concatenación de cadenas en el DAGLa expansión por plano debe crearse nodo por nodo, o mantenerse local.
Kling 3.0 no tiene referencia-a-videoLa línea v3 es solo texto/imagen/control de movimiento; referencia-a-video vive en la línea o3: fal-ai/kling-video/o3/pro/reference-to-video.
Los prefijos no son uniformesbytedance/*, tripo3d/*, meshy/*, minimax/*, openai/* no llevan ningún prefijo fal-ai/. kling-video, veo3.1, flux-*, hunyuan-3d, ffmpeg-api sí lo llevan.

Selecciones de endpoints

RanuraMejorAlternativa de valor
referencia→videobytedance/seedance-2.5/reference-to-video (~$0.473/s @720p)fal-ai/kling-video/o3/pro/reference-to-video (~$0.112/s)
imagen→3Dfal-ai/hunyuan-3d/v3.1/pro/image-to-3d ($0.375, hasta 8 vistas)tripo3d/h3.1/image-to-3d ($0.20)
texto→3Dfal-ai/hunyuan-3d/v3.1/pro/text-to-3dtripo3d/h3.1/text-to-3d
retopologíafal-ai/hunyuan-3d/v3.1/smart-topology ($0.75)tripo3d/tripo/remesh (~75x más barato)
división de partesfal-ai/hunyuan-3d/v3.1/part (solo FBX)tripo3d/tripo/segment
texto→imagenfal-ai/nano-banana-pro ($0.15 fijo)fal-ai/flux-2-pro ($0.03/MP)

Seedance es ~4x el precio de Kling o3 por los mismos 5 segundos. Lo gana en fidelidad de múltiples referencias (hasta 50 referencias mixtas de imagen/video/audio) y no lo gana cuando se condiciona en una sola imagen fija.

Los IDs de modelo y los precios varían. Verifique contra fal.ai/models antes de prometer alguno.

La Rama 3D

python mint3d.py --genre <nombre> --from-stills 4 --retopo --render
python mint3d.py --genre <nombre> --prompt "a cracked chrome visor" --render
  • Genere una placa limpia primero; no levante de las imágenes fijas de referencia. El requisito de entrada declarado del endpoint es fondo simple, objeto único, objeto >50% del fotograma. Los carretes de referencia son lo opuesto a eso — collages, planos generales, varios sujetos, gráficos sobreimpresos — y producen ruido esculpido. Texto → placa de un solo objeto → malla cuesta ~$0.15 extra y es la diferencia entre una malla utilizable y una descartada.
  • La múltiple vista se nombra por campos por ángulo, no una lista. input_image_url (frontal, requerido), luego back_image_url, left_image_url, right_image_url, left_front_image_url, right_front_image_url, top_image_url, bottom_image_url. No hay input_image_urls ni bandera multi_view — inventarlas degrada cada acuñación a una sola vista mientras parece funcionar. Una etiqueta de ángulo incorrecta es peor que omitir la vista, porque el modelo confía en ella.
  • Diríjase al GLB por clave, no por posición. La respuesta lleva un PNG thumbnail y un bloque model_urls junto a model_glb; tomar la primera URL funciona solo hasta que las claves se reordenan, y un PNG de vista previa se descarga bien — nada falla hasta que Blender se niega a abrirlo.
  • Solicite mapas PBR. Sin ellos, la malla se ilumina como cartón pintado.
  • Retopologice si alguien va a editarlo o riggearlo. Las mallas generadas son densas y caóticas.
  • Renderice localmente para cerrar el ciclo. Una vez que un plato giratorio son fotogramas, es metraje, y todas las etapas posteriores ya manejan metraje — etalónelo, córtelo, examínelo como elemento, o súbalo como referencia de condicionamiento. Use Blender cuando un binario esté en PATH; mantenga un rasterizador de software ligero como predeterminado, porque un contexto GL sin cabeza es lo más común que falta en un contenedor y un renderizador que solo funciona en una estación de trabajo no es parte de un pipeline.

Verifique, Luego Confíe

Cada otra etapa afirma un resultado. Compruébelo, y compruebe la forma de la distribución, no solo los momentos:

  • background — proporción del fotograma por debajo de L*10 frente a la cifra del paquete. Compare con la referencia, no con el clip fuente: una fuente generada con 68% de negro es más negra que cualquier referencia en una banda de 24–55%, por lo que "preservar los negros de la fuente" exige lo incorrecto e igualmente excusa una gradación levantada.
  • chroma_mae — error a*/b* por zona, usando la mediana (coincidiendo con cómo se midieron los objetivos del paquete; una media aquí compara una estadística sensible a la asimetría con una robusta e informa un desajuste de definición como un error).
  • contrast / black_point / white_point
  • banding — contenedores de histograma L* vacíos entre los ocupados. Contar los contenedores vacíos totales no funciona: un clip legítimamente oscuro tiene contenedores de resaltados vacíos.
  • cadence — duración media de plano detectada frente a la de la referencia.

Cuidado con la trampa de las unidades: OpenCV cambia la convención Lab con el dtype. En float32, L* es 0–100 y a*/b* están firmados; en uint8, L* es 0–255 y a*/b* están sesgados +128. Mezclarlos informa errores de croma en los cientos.

Cadena Completa

python pipeline.py --genre <nombre> --refs a.mov b.mov \
  --brief "what happens" --duration 12 \
  --base-video existing.mp4 --out out/FINAL.mp4

acuñar → destilar → (mint3d) → aplicar → forjar → verificar. Las etapas 1–3 están en caché, por lo que iterar sobre resúmenes nunca vuelve a medir nada. --dry-run simula cada llamada de red: el plan, las instrucciones, la disposición de pistas y el manifiesto aún se ejecutan.

Anti-Patrones

No hacerPor qué
Una generación por plano21% de eficiencia, 12 clips no relacionados
Poner color en la instrucciónMedido que no funciona; se aleja de la base neutra que la LUT quiere
Copia en streaming de los cortesLos límites solo en keyframes destruyen el ritmo de sub-segundo
Cortar un video base de forma contiguaReensambla el original; cada corte invisible
Confiar en compose para superponerNo puede; rechaza la segunda pista
Enviar segundos a composeSilenciosamente 1000x más corto
Entregar solo con MAEAñada la verificación de proporción de fondo

El Metraje Prestado Lleva la UI de la App de Captura

El peor defecto encontrado en un corte entregado: el video finalizado enviaba el botón de "me gusta", el contador de vistas y la burbuja de comentarios de otra persona, porque la base

...[truncado para traducción]

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 relacionados