Communitygithub.com

ascii-video

Conversion de vidéo/audio en vidéo ASCII colorée (MP4/GIF).

Qu'est-ce que ascii-video ?

Ce skill met en place une pipeline de production complète pour générer des vidéos ASCII artistiques à partir de vidéo, d'audio, d'images ou de génération procédurale. Il prend en charge six modes (vidéo vers ASCII, audio-réactif, génératif, hybride, paroles/texte, narration TTS) et fournit une architecture en six étapes (INPUT, ANALYZE, SCENE_FN, TONEMAP, SHADE, ENCODE). L'accent est mis sur l'excellence créative : avant tout code, le concept visuel doit être articulé, chaque scène doit varier (palette, couleur, effet, shader) et au moins un moment visuel inattendu doit être ajouté. Le stack technique repose sur Python, NumPy, SciPy, Pillow et ffmpeg, sans GPU requis, avec un rendu parallélisé via concurrent.futures. Le skill est conçu pour être utilisé dans des assistants de codage comme Claude Code ou Cursor, et son SKILL.md détaille les aspects créatifs, techniques et les nombreuses références disponibles (effets, palettes, shaders, composition).

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/David2024patton/custom-skills-public/tree/main/skills/creative/ascii-video

Demander à votre IA préférée

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

Documentation

Pipeline de Production Vidéo ASCII

Quand l'utiliser

Utiliser lorsque les utilisateurs demandent : vidéo ASCII, vidéo en art textuel, vidéo style terminal, animation d'art typographique, visualisation rétro en texte, visualiseur audio en ASCII, conversion de vidéo en art ASCII, effets matrix, ou toute sortie ASCII animée.

Contenu

Pipeline de production pour vidéo ASCII artistique — n'importe quel format. Convertit vidéo/audio/images/entrée générative en sortie vidéo ASCII colorée (MP4, GIF, séquence d'images). Couvre : conversion vidéo vers ASCII, visualiseurs musicaux audio-réactifs, animations génératives en ASCII, hybride vidéo+audio réactif, superpositions de texte/paroles, rendu terminal en temps réel.

Standard créatif

C'est de l'art visuel. Les caractères ASCII sont le médium ; le cinéma est la norme.

Avant d'écrire une seule ligne de code, articulez le concept créatif. Quelle est l'ambiance ? Quelle histoire visuelle cela raconte-t-il ? Qu'est-ce qui rend CE projet différent de toutes les autres vidéos ASCII ? Le prompt de l'utilisateur est un point de départ — interprétez-le avec ambition créative, pas de transcription littérale.

L'excellence dès le premier rendu est non négociable. La sortie doit être visuellement frappante sans nécessiter de cycles de révision. Si quelque chose semble générique, plat, ou "art ASCII généré par IA", c'est faux — repensez le concept créatif avant de livrer.

Allez au-delà du vocabulaire de référence. Les catalogues d'effets, les préréglages de shader et les bibliothèques de palettes dans les références sont un vocabulaire de départ. Pour chaque projet, combinez, modifiez et inventez de nouveaux motifs. Le catalogue est une palette de peintures — vous écrivez le tableau.

Soyez proactivement créatif. Étendez le vocabulaire du skill quand le projet l'exige. Si les références n'ont pas ce que la vision demande, construisez-le. Incluez au moins un moment visuel que l'utilisateur n'a pas demandé mais qu'il appréciera — une transition, un effet, un choix de couleur qui élève l'ensemble.

Esthétique cohérente plutôt que correction technique. Toutes les scènes d'une vidéo doivent se sentir connectées par un langage visuel unificateur — température de couleur partagée, palettes de caractères apparentées, vocabulaire de mouvement cohérent. Une vidéo techniquement correcte où chaque scène utilise un effet aléatoire différent est un échec esthétique.

Dense, en couches, réfléchi. Chaque image doit récompenser le visionnage. Jamais de fonds noirs plats. Toujours une composition multi-grille. Toujours une variation par scène. Toujours une couleur intentionnelle.

Modes

ModeEntréeSortieRéférence
Vidéo vers ASCIIFichier vidéoRecréation ASCII de la sourcereferences/inputs.md § Échantillonnage vidéo
Audio-réactifFichier audioVisuels génératifs pilotés par les caractéristiques audioreferences/inputs.md § Analyse audio
GénératifAucune (ou paramètres de graine)Animation ASCII procéduralereferences/effects.md
HybrideVidéo + audioVidéo ASCII avec superpositions audio-réactivesLes deux refs d'entrée
Paroles/texteAudio + texte/SRTTexte synchronisé avec effets visuelsreferences/inputs.md § Texte/paroles
Narration TTSCitations texte + API TTSVidéo de témoignage/citation narrée avec texte tapéreferences/inputs.md § Intégration TTS

Stack

Script Python autonome unique par projet. Aucun GPU requis.

CoucheOutilObjectif
CœurPython 3.10+, NumPyMath, opérations sur tableaux, effets vectorisés
SignalSciPyFFT, détection de pics (modes audio)
ImageriePillow (PIL)Rastérisation de polices, décodage d'images, I/O d'image
I/O vidéoffmpeg (CLI)Décodage entrée, encodage sortie, multiplexage audio
Parallélismeconcurrent.futuresN workers pour le rendu par lots/clips
TTSAPI ElevenLabs (optionnel)Génération de clips de narration
OptionnelOpenCVÉchantillonnage d'images vidéo, détection de contours

Architecture du pipeline

Chaque mode suit le même pipeline en 6 étapes :

INPUT → ANALYZE → SCENE_FN → TONEMAP → SHADE → ENCODE
  1. INPUT — Charger/décoder le matériau source (images vidéo, échantillons audio, images, ou rien)
  2. ANALYZE — Extraire les caractéristiques par image (bandes audio, luminance/contours vidéo, vecteurs de mouvement)
  3. SCENE_FN — La fonction de scène rend un canevas de pixels (uint8 H,W,3). Compose multiples grilles via _render_vf() + modes de fusion de pixels. Voir references/composition.md
  4. TONEMAP — Normalisation adaptative de la luminosité basée sur les percentiles. Voir references/composition.md § Mappe de tons adaptative
  5. SHADE — Post-traitement via ShaderChain + FeedbackBuffer. Voir references/shaders.md
  6. ENCODE — Envoyer les images brutes RVB à ffmpeg pour encodage H.264/GIF

Direction créative

Dimensions esthétiques

DimensionOptionsRéférence
Palette de caractèresRampe de densité, éléments de blocs, symboles, écritures (katakana, grec, runes, braille), spécifique au projetarchitecture.md § Palettes
Stratégie de couleurHSV, OKLAB/OKLCH, palettes RVB discrètes, harmonie générée automatiquement, monochrome, températurearchitecture.md § Système de couleur
Texture de fondChamps sinusoïdaux, bruit fBM, déformation de domaine, voronoi, réaction-diffusion, automates cellulaires, vidéoeffects.md
Effets principauxAnneaux, spirales, tunnel, vortex, vagues, interférence, aurore, feu, SDFs, attracteurs étrangeseffects.md
ParticulesÉtincelles, neige, pluie, bulles, runes, orbites, boids en essaim, suiveurs de champ de flux, traînéeseffects.md § Particules
Ambiance du shaderCRT rétro, moderne épuré, art glitch, cinématographique, rêveur, industriel, psychédéliqueshaders.md
Densité de grillexs(8px) à xxl(40px), mixte par couchearchitecture.md § Système de grille
Espace de coordonnéesCartésien, polaire, tuilé, tourné, œil de poisson, Möbius, déformation de domaineeffects.md § Transformations
RétroactionTunnel de zoom, traînées arc-en-ciel, écho fantomatique, mandala tournant, évolution de couleurcomposition.md § Rétroaction
MasquageCercle, anneau, dégradé, pochoir de texte, iris/volet/fondu animécomposition.md § Masquage
TransitionsFondu enchaîné, volet, fondu, coupure glitch, iris, révélation basée sur masqueshaders.md § Transitions

Variation par section

N'utilisez jamais la même configuration pour toute la vidéo. Pour chaque section/scène :

  • Effet de fond différent (ou composez-en 2-3)
  • Palette de caractères différente (adaptée à l'ambiance)
  • Stratégie de couleur différente (ou au minimum une teinte différente)
  • Variez l'intensité du shader (plus de floraison pendant les pics, plus de grain pendant le calme)
  • Types de particules différents si des particules sont actives

Invention spécifique au projet

Pour chaque projet, inventez au moins un des éléments suivants :

  • Une palette de caractères personnalisée correspondant au thème
  • Un effet de fond personnalisé (combinez/modifiez des blocs existants)
  • Une palette de couleurs personnalisée (ensemble RVB discret adapté à la marque/l'ambiance)
  • Un ensemble de caractères de particules personnalisé
  • Une transition de scène ou un moment visuel inédit

Ne vous contentez pas de choisir dans le catalogue. Le catalogue est le vocabulaire — vous écrivez le poème.

Flux de travail

Étape 1 : Vision créative

Avant tout code, articulez le concept créatif :

  • Ambiance/atmosphère : Que doit ressentir le spectateur ? Énergique, méditatif, chaotique, élégant, menaçant ?
  • Histoire visuelle : Que se passe-t-il au fil de la durée ? Construction de tension ? Transformation ? Dissolution ?
  • Monde coloré : Chaud/froid ? Monochrome ? Néons ? Tons terre ? Quelle est la teinte dominante ?
  • Texture des caractères : Données denses ? Étoiles éparses ? Points organiques ? Blocs géométriques ?
  • Qu'est-ce qui rend CE projet différent : Quelle est la chose unique qui rend ce projet spécial ?
  • Arc émotionnel : Comment les scènes progressent-elles ? Ouverture énergique, construction vers l'apogée, résolution ?

Mappez le prompt de l'utilisateur sur des choix esthétiques. Un "visualiseur chill lo-fi" exige tout autre chose qu'un "flux de données glitch cyberpunk."

Étape 2 : Conception technique

  • Mode — lequel des 6 modes ci-dessus
  • Résolution — paysage 1920x1080 (par défaut), portrait 1080x1920, carré 1080x1080 @ 24 ips
  • Détection matérielle — détection automatique des cœurs/RAM, définition du profil de qualité. Voir references/optimization.md
  • Sections — mappage des horodatages aux fonctions de scène, chacune avec sa propre configuration d'effet/palette/couleur/shader
  • Format de sortie — MP4 (par défaut), GIF (640x360 @ 15 ips), séquence PNG

Étape 3 : Construction du script

Fichier Python unique. Composants (avec références) :

  1. Détection matérielle + profil de qualité — references/optimization.md
  2. Chargeur d'entrée — dépendant du mode ; references/inputs.md
  3. Analyseur de caractéristiques — FFT audio, luminance vidéo, ou synthétique
  4. Grille + moteur de rendu — grilles multi-densité avec cache bitmap ; references/architecture.md
  5. Palettes de caractères — multiples par projet ; references/architecture.md § Palettes
  6. Système de couleur — HSV + RVB discret + génération d'harmonie ; references/architecture.md § Couleur
  7. Fonctions de scène — chacune retourne canvas (uint8 H,W,3) ; references/scenes.md
  8. Mappe de tons — normalisation adaptative de la luminosité ; references/composition.md
  9. Pipeline de shader — ShaderChain + FeedbackBuffer ; references/shaders.md
  10. Tableau de scènes + répartiteur — temps → fonction de scène + configuration ; references/scenes.md
  11. Encodeur parallèle — rendu de clips avec N workers via pipes ffmpeg
  12. Main — orchestration du pipeline complet

Étape 4 : Vérification de la qualité

  • Tester d'abord les images : rendu d'images uniques à des horodatages clés avant le rendu complet
  • Vérification de la luminosité : canvas.mean() > 8 pour tout le contenu ASCII. Si sombre, réduire le gamma
  • Cohérence visuelle : toutes les scènes semblent-elles appartenir à la même vidéo ?
  • Vérification de la vision créative : la sortie correspond-elle au concept de l'étape 1 ? Si elle a l'air générique, recommencez

Notes d'implémentation critiques

Luminosité — Utilisez tonemap(), pas les multiplicateurs linéaires

C'est le problème visuel n°1. L'ASCII sur fond noir est intrinsèquement sombre. N'utilisez jamais de multiplicateurs canvas * N — ils écrêtent les hautes lumières. Utilisez une mappe de tons adaptative :

def tonemap(canvas, gamma=0.75):
    f = canvas.astype(np.float32)
    lo, hi = np.percentile(f[::4, ::4], [1, 99.5])
    if hi - lo < 10: hi = lo + 10
    f = np.clip((f - lo) / (hi - lo), 0, 1) ** gamma
    return (f * 255).astype(np.uint8)

Pipeline : scene_fn() → tonemap() → FeedbackBuffer → ShaderChain → ffmpeg

Gamma par scène : défaut 0.75, solariser 0.55, posteriser 0.50, scènes lumineuses 0.85. Utilisez le mode de fusion screen (pas overlay) pour les couches sombres.

Hauteur de cellule de police

macOS Pillow : textbbox() retourne une hauteur incorrecte. Utilisez font.getmetrics() : cell_height = ascent + descent. Voir references/troubleshooting.md.

Interblocage du pipe ffmpeg

N'utilisez jamais stderr=subprocess.PIPE avec ffmpeg longue durée — le tampon se remplit à 64 Ko et provoque un interblocage. Redirigez vers un fichier. Voir references/troubleshooting.md.

Compatibilité des polices

Tous les caractères Unicode ne s'affichent pas dans toutes les polices. Validez les palettes à l'initialisation — rendez chaque caractère, vérifiez la sortie vide. Voir references/troubleshooting.md.

Architecture par clip

Pour les vidéos segmentées (citations, scènes, chapitres), rendez chaque élément comme un fichier clip séparé pour le rendu parallèle et le re-rendu sélectif. Voir references/scenes.md.

Objectifs de performance

ComposantBudget
Extraction de caractéristiques1-5 ms
Fonction d'effet2-15 ms
Rendu de caractères80-150 ms (goulot d'étranglement)
Pipeline de shader5-25 ms
Total~100-200 ms/image

Références

FichierContenu
references/architecture.mdSystème de grille, préréglages de résolution, sélection de police, palettes de caractères (20+), système de couleur (HSV + OKLAB + RVB discret + génération d'harmonie), helper _render_vf(), classe GridLayer
references/composition.mdModes de fusion de pixels (20 modes), blend_canvas(), composition multi-grille, tonemap() adaptative, FeedbackBuffer, PixelBlendStack, système de masquage/pochoir
references/effects.mdBlocs de construction d'effets : générateurs de champs de valeur, champs de teinte, bruit/fBM/déformation de domaine, voronoi, réaction-diffusion, automates cellulaires, SDFs, attracteurs étranges, systèmes de particules, transformations de coordonnées, cohérence temporelle
references/shaders.mdShaderChain, répartition _apply_shader_step(), catalogue de 38 shaders, mise à l'échelle audio-réactive, transitions, préréglages de teinte, encodage de format de sortie, rendu terminal
references/scenes.mdProtocole de scène, classe Renderer, tableau SCENES, render_clip(), découpage synchronisé au rythme, rendu parallèle, motifs de conception (hiérarchie de couches, arcs directionnels, métaphores visuelles, techniques de composition), exemples complets de scènes à tous les niveaux de complexité, liste de contrôle de conception de scène
references/inputs.mdAnalyse audio (FFT, bandes, battements), échantillonnage vidéo, conversion d'image, texte/paroles, intégration TTS (ElevenLabs, attribution de voix, mixage audio)
references/optimization.mdDétection matérielle, profils de qualité, motifs vectorisés, rendu parallèle, gestion de la mémoire, budgets de performance
references/troubleshooting.mdPièges de diffusion NumPy, erreurs de mode de fusion, multiprocessing/pickle, diagnostics de luminosité, problèmes ffmpeg, problèmes de polices, erreurs courantes

Divergence créative (à utiliser uniquement lorsque l'utilisateur demande une sortie expérimentale/créative/unique)

Si l'utilisateur demande une sortie créative, expérimentale, surprenante ou non conventionnelle, sélectionnez la stratégie qui convient le mieux et raisonnez à travers ses étapes AVANT de générer du code.

  • Connexions forcées — lorsque l'utilisateur souhaite une inspiration inter-domaines ("rendre ça organique", "esthétique industrielle")
  • Mélange conceptuel — lorsque l'utilisateur nomme deux choses à combiner ("océan rencontre musique", "espace + calligraphie")
  • Stratégies obliques — lorsque l'utilisateur est très ouvert ("surprenez-moi", "quelque chose que je n'ai jamais vu")

Connexions forcées

  1. Choisissez un domaine sans rapport avec l'objectif visuel (systèmes météorologiques, microbiologie, architecture, dynamique des fluides, tissage textile)
  2. Listez ses éléments visuels/structuraux principaux (érosion → révélation progressive ; mitose → duplication par division ; tissage → motifs entrelacés)
  3. Mappez ces éléments sur des caractères ASCII et des motifs d'animation
  4. Synthétisez — à quoi ressemblent "l'érosion" ou "la cristallisation" dans une grille de caractères ?

Mélange conceptuel

  1. Nommez deux domaines visuels distincts à fusionner (par exemple, "danse+dataviz", "jardinage+cyberpunk", "calligraphie+spectrogramme")
  2. Pour chaque domaine, listez ses formes, motifs et mouvements caractéristiques
  3. Trouvez un point d'intersection ou de correspondance où les qualités d'un domaine peuvent être cartographiées sur l'autre
  4. Construisez un effet de scène ou une palette visuelle qui incarne le mélange — pas juste l'un après l'autre, mais vraiment fusionné

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés