thumbnail-maker
scripts/thumbnail.py (avec scripts/fonts.py à côté). Nécessite Python 3.9+ et pip install pillow.
# tech / tutoriel : une capture d’écran réelle, la ligne importante entourée, une flèche depuis le titre
python thumbnail.py --title "Claude a presque *tout* supprimé" --style dark --shot terminal.png --circle 0.19,0.17,0.18 --arrow --out t.jpg
# personne parlante : une découpe devant le titre
python thumbnail.py --title "J’ai testé *tous* les outils IA" --style dark --photo me-cutout.png --out t.jpg
# fond photo, format Shorts
python thumbnail.py --title "Une journée de *dev*" --bg desk.jpg --style dark --size 1080x1920 --out short.jpg
| Option | Effet |
|---|---|
--title | 3-5 mots donnent le meilleur rendu. *mot* marque le mot-clé (un cadre ou une couleur). Mis en majuscules sauf si --keep-case. |
--style | dark (presque noir + jaune), light (blanc cassé + rouge), ou les plus vifs pop, red, green, tech. |
--look | clean (par défaut) : couleur unie avec un léger vignettage, ou --bg photo floutée et assombrie pour le contraste. burst : l’ancien look dégradé + soleil. |
--shot img | Une capture d’écran réelle comme visuel principal. Les gros plans larges (une ou deux lignes d’un terminal ou d’une UI) passent en pleine largeur sous le titre ; les plus hauts se placent à côté. Agrandis pour remplir l’espace. |
--circle x,y,r | Ovale rouge dessiné à la main sur la capture. x,y = centre et r = demi-largeur de l’élément, en fractions de la capture. |
--arrow | Flèche dessinée à la main du titre vers le cercle (contourne le titre quand il n’y a pas de place au-dessus). --mark-color change la couleur rouge. |
--photo img | Photo d’une personne. Un PNG avec transparence (découpe) est contourné et dessiné devant le bord du titre pour donner de la profondeur ; une photo normale devient une carte bordée (--photo-shape circle, --tilt). |
--subtitle, --emoji, --accent, --highlight color, --size, --align, --font | Comme avant : une petite deuxième ligne, un sticker emoji, la couleur du mot-clé, mot-clé coloré sans cadre, taille de sortie, alignement, police du titre. |
Règles de conception (d’après ce que font les meilleures miniatures en 2026)
- Une seule idée, 3-5 mots. Le titre complète l’image ; ne le décrivez pas.
- Montrez le vrai truc. Une capture d’écran recadrée de l’erreur, du résultat ou de l’UI réels est plus efficace qu’un visuel générique. Recadrez serré sur la ligne importante et entourez-la.
- Visages : une découpe avec une expression claire, grande (40-60 % de la hauteur). Ne mettez pas de texte sur les yeux.
- Deux couleurs. Fond uni plus une couleur d’accent. Pas de soleils, de murs d’émojis ou de texte dégradé : ils donnent l’impression d’un modèle ou d’une création IA.
- Gardez le coin inférieur droit libre : YouTube y affiche la durée de la vidéo.
Vérifications (affichées, et sur <nom>.preview.png)
- Hauteur des lettres du titre à 168 px de large (recherche YouTube) inférieure à 8 px → avertissement.
- Contraste effectif du titre (remplissage vs fond, et son contour) inférieur à 3:1 → avertissement.
- Test de plissement des yeux : la zone du titre floutée à 48 px de large doit encore se détacher de son environnement.
- Coin de l’horodatage : le titre atteignant les 20 % × 16 % en bas à droite → avertissement.
- Cadre du mot-clé se fondant dans le fond, contraste mot-clé vs cadre/contour, plus de 6 mots. Code de sortie 1 en cas d’avertissement. REGARDEZ la feuille d’aperçu avant d’utiliser l’image.
Limites
- Pas de suppression de fond : passez un PNG déjà détouré (remove.bg, Photoshop, macOS « Copier le sujet »).
- Les cercles et flèches sont placés à partir de vos nombres
--circle: vérifiez l’aperçu et ajustez x/y/r si l’ovale manque sa cible. - Polices : Impact pour les titres (Windows/macOS ; sur Linux installez
ttf-mscorefontsou définissezFONT_TITLE=/chemin/Anton-Regular.ttf). Surchargez avecFONT_TITLE,FONT_BOLD,FONT_EMOJI. - Emoji : uniquement sur un seul point de code (Pillow sans libraqm ne peut pas gérer les séquences ZWJ).
- Pas de détection de visage : recadrez les photos pour que le visage ne soit pas près d’un bord.