Communitygithub.com

taste-application

Génère des vidéos à partir d’un pack de style distillé et les monte en un produit fini en s’inspirant d’une référence.

Qu'est-ce que taste-application ?

Cette compétence constitue la seconde moitié du pipeline Taste. Après que **taste-distillation** a mesuré les références pour produire un pack de style, elle génère de nouvelles vidéos en s’appuyant sur ce pack, puis les assemble en un montage cohérent. Elle prend en charge des exécutions locales via `scripts/` et des exécutions chez un fournisseur (fal, Blender, Resolve) avec des contrôles stricts de livraison, de collision de sortie et de vérification. La compétence optimise l’économie des générations en regroupant les plans en « prises » continues (~5 s) au lieu d’une génération par plan, ce qui porte l’efficacité de 21 % à 77 % et produit des plans consécutifs réellement liés. Elle impose des règles de coupe précises (ré-encodage, non stream-copy, échantillonnage de la distribution des durées), un étalonnage basé sur la mesure directe (L* CDF, chroma par zone) et une vérification rigoureuse de la forme de distribution (fonds noirs, MAE médian, cadence). Un volet 3D permet de générer des maillages à partir de texte ou d’images, de les retopologiser et de les intégrer dans la vidéo finale, le tout avec des avertissements sur les limites des plateformes (fal, Blender, Resolve) et des anti-patrons documentés.

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

Demander à votre IA préférée

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

Documentation

Taste Application

La seconde moitié du pipeline. taste-distillation mesure les références pour produire un pack de style ; celle-ci génère à partir de ce pack et monte le résultat.

Contrat d’exécution et de livraison

L’implémentation originale est livrée ici dans scripts/ ; aucun checkout séparé de ito-video n’est nécessaire. Installez scripts/requirements.txt pour le traitement local. Installez scripts/requirements-live.txt uniquement pour l’exécution chez le fournisseur. Les téléversements, soumissions et téléchargements en direct nécessitent TASTE_FORGE_ALLOW_LIVE=1 en plus des identifiants ; ne le définissez que pour l’exécution autorisée de l’utilisateur. --dry-run reste sans identifiant et produit des placeholders étiquetés. Un délai d’attente ambigu du fournisseur n’est pas réessayé comme un nouveau travail payant. Inspectez la requête du fournisseur avant de décider si une nouvelle soumission est justifiée.

Utilisez les prises terminées existantes sans aucun appel au fournisseur :

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 est une cible de cadence au mieux, pas une durée exacte. Les plans complets peuvent produire un montage plus court ou plus long ; l’assembleur ne duplique pas les clips ni n’ajoute de remplissage pour atteindre la cible. Le manifeste de sortie conserve la duration réelle et ajoute duration_contract avec les secondes demandées et réelles, le sous-dépassement, le dépassement et la politique cadence_target. Les différences d’au moins une image de sortie sont signalées explicitement. Aucun mode de durée exacte n’est fourni ; lorsqu’une durée exacte est requise, inspectez le reçu et révisez ou rejetez le montage avant la livraison.

Le pipeline conserve les fichiers de plans notés de chaque exécution car les FCPXML et EDL modifiables les référencent. Il refuse les collisions de sortie et signale les échecs d’exportation de la timeline. Un rendu terminé n’est pas un projet d’édition sauvegardé ni une approbation créative. Conservez les actifs sources et les points de contrôle versionnés du projet avant et après les modifications en direct ; enregistrez le chemin sauvegardé et l’empreinte séparément du reçu de la timeline en mémoire.

Les graphes Fal prêts à cloner et leur compilateur d’entrée hors ligne sont documentés dans workflows/README.md. Compilez le brief et la direction stylistique avant la soumission ; ne présumez pas qu’un champ de schéma déconnecté affecte une invite de modèle. Validez les champs actuels du point de terminaison par rapport au fournisseur réel avant une exécution payante.

Pour Blender, utilisez le GLB source texturé complet ; la retopologie est un dérivé nommé séparément et ne remplace jamais cette source. blender_prop.py prend en charge --width 1920 --height 1080 --fps 30 --receipt receipt.json explicite et préserve l’éclairage de bord et les textures de matière dérivés du pack. Sauvegarder une scène est différent de la rendre ; inspectez l’état du reçu et les images packagées.

Pour les superpositions Resolve, utilisez taste.resolve.apply_placements avec des objets injectés provenant d’une cible versionnée explicitement sélectionnée. Définissez source_end_mode sur la convention vérifiée sur cet hôte. Ne supposez pas une fin de source inclusive entre les versions de Resolve. L’adaptateur alloue les effets de chevauchement au-dessus des pistes préservées et vérifie chaque placement immédiatement et à nouveau après tous les ajouts. Les entiers de composition doivent correspondre à l’API installée ; pour l’hôte vérifié Studio 21, Screen est 5, pas le 22 incorrect du constructeur historique. Le reçu prouve uniquement le placement en mémoire. Sauvegardez le projet, vérifiez son point de contrôle, puis inspectez la sortie rendue exacte avant de signaler la livraison.

Quand activer

  • « Faire une vidéo dans ce style » / « appliquer le pack » / « compléter ces images »
  • Assembler des clips générés en quelque chose avec un vrai rythme de montage
  • Créer des accessoires 3D à partir d’un look et les réintégrer dans la vidéo
  • Vérifier qu’un produit fini correspond effectivement à sa référence

Division du travail

Le modèle fournit le contenu, le mouvement, le cadrage et la structure d’éclairage. Le pack fournit la couleur et le rythme. Ceci est mesuré, pas une préférence stylistique – voir taste-distillation pour les chiffres. Conséquences pratiques :

  • L’invite de génération ne contient aucun langage de couleur. Ajoutez « Couleur : aucune. Rendu neutre. L’étalonnage est appliqué après. »
  • Gardez deux indicateurs séparés : --brief (ce qui se PASSE : sujet, action, lieu) et --style-steer (à quoi cela RESSEMBLE). Les fusionner fait fuir des mots de style dans la scène (« teal » devient un objet teal) et des mots de sujet dans l’étalonnage.
  • Le modèle répond beaucoup mieux à des règles locales et vérifiables qu’à des règles globales. « Arrière-plans noirs purs et sans lumière ; sujets tendant vers le blanc » fonctionne ; « contraste extrême » non.

Générer des PRISES, pas des plans

La lecture évidente de « faire correspondre la cadence » est une génération par plan. C’est économiquement absurde. Une référence moyenne de 0,78 s/plan contre un point de terminaison avec un plancher de 4 s transforme un morceau de 10 s en 12 appels, 48 secondes générées pour 10 utilisées (efficacité de 21 %), et douze clips sans lien cousus ensemble pour ce qui devrait se lire comme continu.

Les monteurs tournent une prise plus longue et coupent à l’intérieur. Regrouper les plans en prises d’environ 5 s : 3 appels, 13 secondes générées, efficacité de 77 % et des plans consécutifs qui appartiennent réellement les uns aux autres parce qu’ils proviennent de la même génération.

Dites au modèle quelle forme vous voulez, sinon il rend une poussée verrouillée lente et six coupes à l’intérieur se lisent comme un bégaiement :

« Filmé comme UNE seule prise continue sans coupe dure à l’intérieur. Elle sera coupée en 6 morceaux d’environ 0,8 s dans le montage, donc le cadrage, le sujet et la lumière doivent changer constamment tout au long – toute fenêtre de 0,8 s doit pouvoir tenir seule comme son propre plan. »

Règles de coupe

  • Ré-encodez, ne faites jamais de stream-copy. Le stream-copy ne coupe que sur les images clés, ce qui, à 0,78 s, signifie que la durée du plan arrondit chaque limite au GOP le plus proche – détruisant la chose même que le pipeline existe pour préserver.
  • Lorsque vous complétez des images existantes, utilisez leurs propres limites de plan. Couper une vidéo de base en morceaux contigus et les lire dans l’ordre ne fait que réassembler l’original : chaque « coupe » atterrit au milieu d’un plan et est invisible. Mesuré, un assemblage de 20 plans n’a enregistré que 12 coupes détectées. Détectez les véritables limites et prenez chaque Nième pour que les sélections consécutives soient garanties discontinues. Cela a fait passer une mesure de coupe de 1,29 s à 0,83 s contre une cible de 0,78 s.
  • Échantillonnez les longueurs de plans à partir de la distribution de la référence, pas de sa moyenne, afin que la coupe hérite de la variance du rythme au lieu d’aplatir en clips égaux.

Règles d’étalonnage

  • La mesure directe bat une LUT cuite lorsque vous avez le clip : mesurez-le, faites correspondre sa CDF L*, appliquez la chroma par zone. grade_clip_direct a atteint une MAE de 1,58 et un contraste de 34,0 contre 34,7.
  • Ancrez, ne faites pas de correspondance CDF, lorsque l’histogramme du clip est différent de celui de la référence. Forcer un clip généré à 68 % de noir sur un histogramme de référence chargé a soulevé tout l’arrière-plan du noir : la préservation de l’arrière-plan est tombée à 26,0 % (CDF) contre 69,0 % (ancrage), tandis que la MAE et le contraste étaient tous deux excellents. Par défaut, utilisez un ton ancré.
  • La taille du lot compte. Noter 48 images à la fois a tué le processus par OOM ; 6 est sûr.

Comportement récupéré de la plateforme fal

Ces observations et exemples de points de terminaison proviennent du workflow récupéré. Re-vérifiez les métadonnées actuelles du point de terminaison ; ce ne sont pas des garanties concernant chaque future version du fournisseur. Les modèles de graphiques fournis enregistrent les entrées de workflow vérifiées séparément, y compris le contrôle explicite de l’audio généré.

Ceux-ci coûtent du temps réel à découvrir. Vérifiez-les avant de concevoir un graphique.

LimiteDétail
Aucun moteur de rendu 3D du toutfal a image-to-3d, text-to-3d, 3d-to-3d et rien d’autre. Chaque point de terminaison 3d-to-3d émet un autre maillage. Il n’y a pas de catégorie 3d-to-image/3d-to-video, donc un GLB créé ne peut pas rentrer dans un graphique vidéo fal. Rendez localement, puis utilisez fal-ai/ffmpeg-api/images-to-video.
compose ne peut pas superposerfal-ai/ffmpeg-api/compose rejette une deuxième piste avec « Multiple video tracks are not supported » – et il compte une piste image comme une piste vidéo. Il séquence une seule piste vidéo. Composez localement avec ffmpeg.
les images clés de compose sont en millisecondesRien dans la réponse ne le dit. Une exécution soumise en secondes est acceptée et renvoie une vidéo 1000x trop courte.
extract-frame offre seulement premier/milieu/dernierPas d’horodatage arbitraire. Utilisez les trois comme trois images de conditionnement distinctes.
Pas de boucles, pas de concaténation de chaînes dans le DAGLe déploiement par plan doit être écrit nœud par nœud, ou conservé localement.
Kling 3.0 n’a pas de référence-vers-vidéoLa ligne v3 est uniquement texte/image/contrôle de mouvement ; la référence-vers-vidéo se trouve sur la ligne o3 : fal-ai/kling-video/o3/pro/reference-to-video.
Les préfixes ne sont pas uniformesbytedance/*, tripo3d/*, meshy/*, minimax/*, openai/* ne portent pas le préfixe fal-ai/. kling-video, veo3.1, flux-*, hunyuan-3d, ffmpeg-api le font.

Choix de points de terminaison

EmplacementMeilleurAlternative économique
référence→vidéobytedance/seedance-2.5/reference-to-video (~0,473 $/s @720p)fal-ai/kling-video/o3/pro/reference-to-video (~0,112 $/s)
image→3Dfal-ai/hunyuan-3d/v3.1/pro/image-to-3d (0,375 $, jusqu’à 8 vues)tripo3d/h3.1/image-to-3d (0,20 $)
texte→3Dfal-ai/hunyuan-3d/v3.1/pro/text-to-3dtripo3d/h3.1/text-to-3d
retopologiefal-ai/hunyuan-3d/v3.1/smart-topology (0,75 $)tripo3d/tripo/remesh (~75x moins cher)
division de piècefal-ai/hunyuan-3d/v3.1/part (FBX uniquement)tripo3d/tripo/segment
texte→imagefal-ai/nano-banana-pro (0,15 $ fixe)fal-ai/flux-2-pro (0,03 $/MP)

Seedance coûte environ 4x le prix de Kling o3 pour les mêmes 5 secondes. Il le mérite sur la fidélité multi-référence (jusqu’à 50 références mixtes image/vidéo/audio) et ne le mérite pas lors du conditionnement sur une seule image fixe.

Les identifiants de modèles et les prix dérivent. Vérifiez sur fal.ai/models avant de promettre l’un d’eux.

La branche 3D

python mint3d.py --genre <name> --from-stills 4 --retopo --render
python mint3d.py --genre <name> --prompt "a cracked chrome visor" --render
  • Générez d’abord une plaque propre ; ne la déduisez pas des images de référence. L’exigence d’entrée déclarée du point de terminaison est un arrière-plan simple, un objet unique, l’objet occupant >50 % du cadre. Les bobines de référence sont l’opposé de cela – collages, plans larges, plusieurs sujets, graphiques incrustés – et produisent un bruit sculpté. Texte → plaque à objet unique → maillage coûte ~0,15 $ de plus et fait la différence entre un maillage utilisable et un maillage jeté.
  • La multi-vue est nommée par champ d’angle, pas une liste. input_image_url (avant, obligatoire), puis back_image_url, left_image_url, right_image_url, left_front_image_url, right_front_image_url, top_image_url, bottom_image_url. Il n’y a pas de input_image_urls ni de drapeau multi_view – les inventer dégrade chaque création en mono-vue tout en semblant fonctionner. Une étiquette d’angle erronée est pire que d’omettre la vue, car le modèle lui fait confiance.
  • Adressez le GLB par clé, pas par position. La réponse contient un PNG thumbnail et un bloc model_urls à côté de model_glb ; prendre la première URL fonctionne seulement jusqu’à ce que les clés se réorganisent, et un PNG d’aperçu se télécharge correctement – rien n’échoue jusqu’à ce que Blender refuse de l’ouvrir.
  • Demandez des cartes PBR. Sans elles, le maillage s’éclaire comme du carton peint.
  • Retopologisez si quelqu’un doit l’éditer ou l’armer. Les maillages générés sont denses et chaotiques.
  • Rendez localement pour boucler la boucle. Une fois qu’un plateau tournant est des images, c’est une séquence, et chaque étape aval gère déjà les séquences – étalonnez-la, coupez-la, utilisez-la comme élément ou téléversez-la comme référence de conditionnement. Utilisez Blender lorsqu’un binaire est dans le PATH ; conservez un rasteriseur logiciel léger en dépendances comme valeur par défaut, car un contexte GL sans tête est la chose unique la plus courante qui manque dans un conteneur et un rendu qui ne fonctionne que sur un poste de travail ne fait pas partie d’un pipeline.

Vérifiez, puis croyez

Chaque autre étape prétend un résultat. Vérifiez-le, et vérifiez la forme de la distribution, pas seulement les moments :

  • background – part du cadre en dessous de L*10 par rapport à la valeur du pack. Comparez à la référence, pas au clip source : une source générée à 68 % de noir est plus noire que n’importe quelle référence dans une bande de 24–55 %, donc « préserver les noirs de la source » demande la mauvaise chose et excuse tout autant un étalonnage levé.
  • chroma_mae – erreur a*/b* par zone, en utilisant la médiane (correspondant à la façon dont les cibles du pack ont été mesurées ; une moyenne compare ici une statistique sensible à l’asymétrie à une statistique robuste et signale une incompatibilité de définition comme une erreur).
  • contrast / black_point / white_point
  • banding – bacs d’histogramme L* vides entre les bacs occupés. Compter le total de bacs vides ne fonctionne pas : un clip légitimement sombre a des bacs de hautes lumières vides.
  • cadence – durée moyenne de plan détectée par rapport à celle de la référence.

Attention au piège des unités : OpenCV change la convention Lab avec le dtype. Sur float32, L* est 0–100 et a*/b* sont signés ; sur uint8, L* est 0–255 et a*/b* sont biaisés +128. Les mélanger signale des erreurs de chroma dans les centaines.

Chaîne complète

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

mint → distill → (mint3d) → apply → forge → verify. Les étapes 1 à 3 sont mises en cache, donc itérer sur les briefs ne remesure jamais rien. --dry-run simule chaque appel réseau : le plan, les invites, la disposition des pistes et le manifeste sont tous toujours exécutés.

Anti-patrons

À ne pas fairePourquoi
Une génération par planEfficacité de 21 %, 12 clips sans lien
Mettre la couleur dans l’inviteMesuré comme ne fonctionnant pas ; s’écarte de la base neutre que veut la LUT
Stream-copy des coupesLes limites uniquement sur les images clés détruisent le rythme sous-secondes
Couper une vidéo de base de manière contiguëRéassemble l’original ; chaque coupe invisible
Faire confiance à compose pour superposerIl ne le peut pas ; il rejette la deuxième piste
Envoyer des secondes à composeSilencieusement 1000x trop court
Livrer sur la seule MAEAjoutez la vérification de la part d’arrière-plan

Les images empruntées portent l’interface utilisateur de l’application de capture

Le pire défaut unique trouvé dans une coupe livrée : la vidéo finie transportait le bouton j’aime, le compteur de vues et la bulle de commentaires de quelqu’un d’autre, parce que la base

…

[tronqué pour la traduction]

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