Communitygithub.com

WakaChobii/tiktok-text

Gravez du texte incrusté sur une vidéo pour qu'il ressemble exactement à l'outil de texte intégré de TikTok (police classique TikTok Sans, blanc uni, blanc avec contour noir, jaune pâle, jaune doré, lilas, emoji Apple iPhone) – soit en copiant les légendes d'une vidéo TikTok de référence avec une précision image par image (mots, sauts de ligne, taille, position, timing), soit en rédigeant de nouvelles légendes. À utiliser lorsque l'utilisateur demande d'ajouter du texte, des légendes, une superposition ou un accroche à une vidéo, de copier/reproduire le texte d'une vidéo de référence, ou dit « avec du texte ».

Qu'est-ce que tiktok-text ?

Cette compétence vous permet d'ajouter du texte incrusté à une vidéo en reproduisant fidèlement le style de l'outil de texte de TikTok, tel que mesuré directement à partir de vidéos TikTok réelles. Elle prend en charge les plateformes Claude Code, Cursor et Codex. Le workflow typique comprend : une configuration initiale via un script Python qui crée un environnement isolé, puis soit une copie des légendes d'une vidéo de référence (détection automatique des zones de texte, inspection manuelle des légendes, ajustement et vérification), soit la création de nouvelles légendes à partir d'un fichier JSON. Les styles disponibles sont : classique (blanc uni), contour (blanc avec contour noir), jaune pâle, jaune doré et lilas. Les emojis sont rendus comme de véritages emojis Apple iPhone. La compétence gère également les retimings, les sauts de ligne et les espaces de début/fin de ligne pour correspondre exactement au centrage de TikTok. Le résultat est sauvegardé à côté de la vidéo originale sans l'écraser.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/WakaChobii/tiktok-text/tree/HEAD/plugins/tiktok-text/skills/add-text

Demander à votre IA préférée

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

Documentation

Ajouter du texte de style TikTok à une vidéo

Les fichiers de cette compétence se trouvent dans ${CLAUDE_PLUGIN_ROOT}/skills/add-text/ :

  • scripts/add_text.py : à utiliser. Il exécute tout le travail en deux commandes.
  • scripts/caption_match.py (détection / ajustement / vérification) et scripts/tiktok_text.py (dessin + gravure) : le moteur.
  • scripts/setup_check.py : configuration et vérification initiales.
  • fonts/ : TikTok Sans (open source, licence OFL).

Les styles ont été mesurés à partir de vidéos TikTok réelles dans l'application. Ne rendez pas le texte d'une autre manière (drawtext ffmpeg, police simple, etc.). Ce ne serait pas conforme.

Étape 0 : configuration (à chaque fois ; prend environ 2 secondes une fois terminée)

Exécutez, avec python / python3 présent sur le PATH :

python "${CLAUDE_PLUGIN_ROOT}/skills/add-text/scripts/setup_check.py" "${CLAUDE_PLUGIN_DATA}"
  • La première exécution crée un environnement Python privé dans le dossier de données du plugin et installe les packages (environ 1 à 2 minutes). Dites à l'utilisateur ce qui se passe.

  • La dernière ligne est READY PY=<chemin>. Utilisez ce <chemin> comme python pour chaque commande ci-dessous (écrit PY).

  • NOT READY: ... indique ce qui manque et la correction exacte :

    • ffmpeg : demandez à l'utilisateur, puis exécutez la commande d'installation donnée (winget sur Windows, brew sur Mac, apt sur Linux). Sur Windows, un nouveau terminal peut être nécessaire avant que ffmpeg ne soit trouvé. Si c'est le cas, dites à l'utilisateur de redémarrer Claude Code.
    • Pas de Python 3.9+ : l'utilisateur doit l'installer (python.org) et redémarrer Claude Code.

    Ensuite, relancez la configuration.

  • Pas de commande python ? Essayez python3, ou py sur Windows.

Dans les commandes ci-dessous, S = ${CLAUDE_PLUGIN_ROOT}/skills/add-text/scripts. Mettez chaque chemin entre guillemets. Dans PowerShell, commencez chaque commande par & (ex : & "PY" "S/add_text.py" ...).

Règles

  • Le résultat conserve la taille et la fréquence d'images de la vidéo d'entrée (TikTok : 1080x1920). Enregistrez la version avec texte à côté de l'originale sous <nom> (AVEC TEXTE).mp4, et ne remplacez jamais l'originale.
  • Contenu : TikTok pénalise les affirmations trompeuses. Évitez les affirmations absolues de résultat (« guéri », « réparé en 3 jours », « garanti »). Lorsque l'accroche d'une référence fait une affirmation, adaptez le libellé (même rythme et même nombre de lignes), et dites à l'utilisateur ce que vous avez changé et pourquoi. Demandez en cas de doute.
  • Le texte saisi doit être ce qu'un iPhone produirait :
    • … pas ...
    • guillemets courbes ' « » si la référence les utilise
    • emoji comme les véritiques caractères emoji
  • Les espaces de début et de fin comptent : TikTok centre chaque ligne y compris ses espaces. fit les ajoute pour vous.

A. Copier le texte d'une vidéo TikTok de référence

Utilisez un dossier de travail à côté de la vidéo de l'utilisateur, par ex. texte travail/.

  1. Démarrer : "PY" "S/add_text.py" start "REF.mp4" "DOSSIER_TRAVAIL"
    • Affiche chaque légende : début/fin (précision image par image, timeline de la référence), style, couleur de remplissage et boîte.
    • Écrit DOSSIER_TRAVAIL/captions.json avec "text": "??", et un recadrage zoomé DOSSIER_TRAVAIL/caption_<n>.png de chacune.
    • Il ignore le filigrane « TikTok @utilisateur » de TikTok.
    • Besoin de télécharger la référence d'abord ? yt-dlp fonctionne s'il est installé. Sinon, demandez le fichier à l'utilisateur.
  2. Remplir le texte. Lisez chaque image recadrée et remplacez chaque "??".
    • Laissez les autres champs. Les champs _ (_ref_t, _bbox_1080, ...) sont utilisés par finish.
    • Les sauts de ligne sont \n, et les emoji sont des caractères. Ne vous souciez pas des espaces de début ou de fin.
    • Si deux lignes sont espacées d'environ deux fois l'espacement normal, il s'agit d'une ligne vide : "A\n\nB".
    • Deux zones de texte séparées dans une même légende (tailles très différentes, grand écart, ou non centrées sur le même x) : divisez-les en deux entrées avec le même start/end, _ref_t et style. Donnez à chacune son propre _bbox_1080 : l'union de ses lignes à partir de _lines_1080 (la détection affiche la boîte et la hauteur de chaque ligne), ainsi fit examine le bon texte. Exemple : lignes 1:[346,1126,735,1167] et 2+3 → [346,1126,735,1167] et [204,1272,887,1389].
    • style est revenu custom / custom_outline ? Il s'agit d'une autre police, d'une boîte de fond ou d'une autre couleur, que cet outil ne possède pas. Dites-le à l'utilisateur et choisissez le style le plus proche. Ne devinez pas en silence.
    • Retimez ici si les coupes de l'utilisateur diffèrent de la référence : modifiez start/end (secondes, fin exclusive). Fit et check regardent toujours la référence à son propre moment (_ref_t).
  3. Terminer : "PY" "S/add_text.py" finish "REF.mp4" "VIDEO.mp4" "DOSSIER_TRAVAIL"
    • Ajuste la taille, la position et les espaces dans le json, et écrit DOSSIER_TRAVAIL/fit_<n>.png (référence en haut, la nôtre en bas).
    • Termine toute légende qui dépasse la vidéo à la longueur de celle-ci.
    • Grave VIDEO (AVEC TEXTE).mp4 à côté de la vidéo (ou (sans texte) → (AVEC TEXTE)). Un 4e argument choisit un autre nom de sortie.
    • Vérifie le résultat et écrit DOSSIER_TRAVAIL/check.jpg (référence gauche, nôtre droite).
    • Affiche un RÉSUMÉ : PASS ou REVOIR avec les raisons.
  4. Regardez check.jpg et montrez-le à l'utilisateur avant de dire que c'est terminé.
    • Faible chevauchement avec « les bords correspondent à la référence à moins de N px » : la taille et la position sont correctes. Le texte jaune ou doré compressé obtient souvent un score de 0,45 à 0,7 même lorsqu'il est correct. Confirmez simplement le libellé à l'œil.
    • Faible chevauchement avec « bords décalés de N px » : généralement une faute de frappe, un saut de ligne manqué, le mauvais style ou un _bbox_1080 incorrect après une division. Corrigez le json et relancez finish.
    • Pour conserver une taille/y/x ajustés manuellement, ajoutez --no-fit.

B. Nouvelles légendes (sans référence)

Écrivez un captions.json :

[{"text": "ligne une\nligne deux", "start": 0, "end": 3.5, "style": "outline", "size": 70, "y": 0.5}]

Exécutez ensuite "PY" "S/add_text.py" new "VIDEO.mp4" "DOSSIER_TRAVAIL/captions.json". Il grave le texte et écrit preview.jpg (une image par légende) à côté du json. Montrez-le à l'utilisateur.

  • style : classic (blanc uni), outline (blanc + contour noir), yellow (jaune pâle), yellow_gold (jaune doré), lilac (lilas).
  • size : environ 50 (petit) à 85 (grand). Les accroches typiques sont de 54 à 77.
  • y : 0,4-0,5 = milieu de l'écran, 0,65 = tiers inférieur. Restez à l'écart des 20 % inférieurs (légende/UI de TikTok) et du bord droit (boutons).
  • Optionnel : x (centre horizontal, par défaut 0,5), weight (poids), color ("#RRGGBB" pour un remplissage personnalisé).
  • Coupez les lignes là où une personne qui tape sur un téléphone le ferait. Les lignes font environ 20 à 28 caractères à la taille 70.

Aperçu rapide sans rendu vidéo : "PY" "S/tiktok_text.py" --png "texte\nplus" out.png (style classique).

Pièges

  • Timings typiques : démarrage environ 25 s, fin 1 à 3 min selon le nombre de légendes (les légendes avec contour sont les plus lentes à ajuster), --no-fit environ 40 s.
  • Emoji : chaque nouvel emoji est téléchargé une fois (ensemble Apple, CDN emoji-data sur jsDelivr), donc une connexion Internet est nécessaire la première fois. Si un téléchargement échoue, le script lève une exception. Dites-le à l'utilisateur plutôt que de supprimer l'emoji.
  • Pas d'ombre, intentionnellement : le vrai texte TikTok n'en a pas. L'aspect « plus propre » à côté de la référence compressée est normal et disparaît une fois que TikTok ré-encode la vidéo téléchargée.
  • Avec seulement 2 lignes, le correcteur d'espacement de fit ne peut pas déterminer quelle ligne est centrée. Si fit_<n>.png montre une ligne décalée d'environ 5 px et que le chevauchement reste inférieur à environ 0,6, essayez d'ajouter vous-même un espace de début ou de fin sur chaque ligne et relancez.
  • Windows : si les emoji s'affichent étrangement dans d'autres extraits Python, définissez PYTHONIOENCODING=utf-8. Ces scripts le gèrent.

Skills associés