KOMPOSE.
Toutes les ressources

Transformez votre photo de profil GitHub en portrait ASCII qui s'auto-tape

Le problème résolu

Votre README de profil GitHub est l'une des pages les plus vues que vous possédez, et c'est généralement un mur de badges statiques que personne ne lit. Cette ressource donne un script Python gratuit qui transforme n'importe quelle photo en portrait ASCII monochrome qui s'écrit tout seul à l'ouverture de votre profil, s'anime en boucle, et fonctionne en mode clair et sombre sur GitHub. Aucun JavaScript, aucun service tiers, aucun token API. Juste un script, une photo, et un fichier SVG que GitHub sait déjà animer.

Le prompt à copier

1. Créez votre repo de profil GitHub (doit correspondre exactement à votre username) : gh repo create  --public --clone && cd 

2. Installez les dépendances : pip install pillow numpy opencv-python-headless rembg onnxruntime

3. Enregistrez le script sous ascii.py (script complet envoyé sur demande, commentez le mot-clé).

4. Choisissez une photo : éclairée sur le côté à 45°, fond uni, menton jusqu'aux cheveux qui remplit le cadre, léger angle.

5. Lancez-le : python ascii.py votre-photo.jpg ascii.svg

6. Ajoutez-le à votre README : 

7. Ajustez GAMMA (1.0-1.4) et CLAHE_CLIP (2.2-3.0) dans le script si le premier rendu est délavé ou bruité, puis relancez.

Pourquoi ça marche spécifiquement sur GitHub

GitHub supprime les balises <script> des README et neutralise presque tout le CSS inline. Mais il affiche entièrement les fichiers SVG intégrés via une balise <img> classique, et il exécute leurs animations SMIL natives. C’est la faille exploitée ici : tout le mouvement doit vivre dans le fichier SVG lui-même, le README ne fait que pointer dessus.

Configuration

gh repo create <votre-username> --public --clone
cd <votre-username>

pip install pillow numpy opencv-python-headless rembg onnxruntime

Le premier lancement télécharge un modèle de suppression d’arrière-plan d’environ 176 Mo, une seule fois.

Le pipeline en quatre étapes

Chaque étape existe parce que la sauter dégrade visiblement le résultat.

1. Découper l’arrière-plan

rembg isole le sujet. Tout ce qui est hors du sujet est forcé en blanc pur, qui correspond à l’extrémité vide de la rampe de caractères. Sans cette étape, l’arrière-plan se remplit de caractères denses et noie le portrait.

2. CLAHE pour le contraste local

Égalisation d’histogramme adaptative à contraste limité. L’autocontraste classique agit globalement et laisse un visage uniformément éclairé en un seul ton moyen plat. CLAHE booste le contraste par tuile, donnant de vrais reflets et ombres au visage. Une limite de contraste entre 2,2 et 3,0 est la plage utile, au-delà ça amplifie la texture de peau en bruit.

3. Convertir la luminosité en caractères

RAMP = " .`:-=+*cs#%@"   # clair/épars -> sombre/dense

L’espace en tête vide l’arrière-plan. Restez en monochrome : une seule couleur de remplissage, la coloration arc-en-ciel par caractère est ce qui donne cet effet « parasite télé » aux portraits ASCII ratés. Ajustez le gamma (1.0 à 1.4 selon la photo).

4. Animer la frappe

Chaque ligne est enveloppée dans un clip-path dont la largeur s’anime de 0 à sa valeur complète. Un petit bloc suit le bord comme un curseur. Les lignes sont décalées de haut en bas, et une animation « driver » auto-chaînée peut relancer toute la séquence en boucle indéfiniment.

Modes clair et sombre

.a { fill: #6e7681; }
@media (prefers-color-scheme: dark) { .a { fill: #c9d1d9; } }

Exigences sur la photo

  • Lumière latérale, fenêtre à 45 degrés environ, tout le reste éteint.
  • Remplissez le cadre, menton jusqu’au-dessus des cheveux.
  • Fond uni, pas de noir sur fond sombre.
  • Léger angle, pas de face totalement droite.

Récupérer le script

Commentez le mot-clé sous le post et je vous envoie le script complet, prêt à lancer.

Passer à l'action

On automatise ça pour vous ?

Ces prompts font gagner des heures. On peut aller plus loin et intégrer l'IA directement dans vos process.

Réserver un appelÀ propos de nous