Communitygithub.com

WakaChobii/tiktok-text

Brenne Bildschirmtext dauerhaft in ein Video ein, sodass es exakt wie TikToks eigene Textfunktion aussieht (TikTok Sans „Classic“-Schriftart, einfarbig weiß, weiß mit schwarzer Kontur, hellgelb, goldgelb, lila; Apple iPhone Emoji) – entweder durch originalgetreues Kopieren der Untertitel eines Referenz-TikToks (Wortlaut, Zeilenumbrüche, Größe, Position, Timing) oder durch Erstellen neuer Untertitel.

Was ist tiktok-text?

Diese Skill ermöglicht es, TikTok-typischen Text (Schriftart, Stile, Emojis) frame-genau in Videos einzubrennen – entweder durch Nachahmen eines Referenz-TikToks (mit exaktem Timing, Größe, Position und Wortlaut) oder durch Erstellen neuer Untertitel. Sie unterstützt Claude Code, Cursor, Codex und andere Agenten auf Windows, macOS und Linux. Dazu wird ein Python-Skript verwendet, das die Maße von echten TikTok-Texten exakt nachbildet (TikTok Sans Schrift, Apple Emojis). Der Workflow umfasst Setup, Start (Referenzextraktion), Textbefüllung und Finish (Anpassung und Einbrennen). Optional können auch komplett neue Untertitel ohne Referenz erstellt werden. Die Skill vermeidet von TikTok sanktionierte übertriebene Behauptungen und verwendet korrekte iPhone-Texteingabe (z. B. geschweifte Anführungszeichen, echte Auslassungspunkte).

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

TikTok-ähnlichen Text zu einem Video hinzufügen

Die Dateien dieser Skill befinden sich in ${CLAUDE_PLUGIN_ROOT}/skills/add-text/:

  • scripts/add_text.py: verwende dies. Es erledigt die gesamte Arbeit mit zwei Befehlen.
  • scripts/caption_match.py (Erkennung / Anpassung / Prüfung) und scripts/tiktok_text.py (zeichnet + brennt ein): die Engine.
  • scripts/setup_check.py: Ersteinrichtung und Überprüfung.
  • fonts/: TikTok Sans (Open Source, OFL Lizenz).

Die Stile wurden an echten In-App-TikToks gemessen. Gib Text auf keine andere Weise wieder (ffmpeg drawtext, eine einfache Schriftart usw.). Es wird nicht übereinstimmen.

Schritt 0: Einrichtung (jedes Mal; dauert nach einmaligem Durchlauf ca. 2 Sekunden)

Führe Folgendes mit dem verfügbaren python / python3 aus:

python "${CLAUDE_PLUGIN_ROOT}/skills/add-text/scripts/setup_check.py" "${CLAUDE_PLUGIN_DATA}"
  • Beim ersten Durchlauf wird ein privates Python-Umfeld im Plugin-Datenordner erstellt und die Pakete installiert (ca. 1–2 Minuten). Informiere den Benutzer darüber, was passiert.

  • Die letzte Zeile ist READY PY=<Pfad>. Verwende diesen <Pfad> als Python für jeden nachfolgenden Befehl (im Folgenden als PY geschrieben).

  • NOT READY: ... gibt an, was fehlt und die genaue Lösung:

    • ffmpeg: Frage den Benutzer, führe dann den angegebenen Installationsbefehl aus (winget unter Windows, brew unter Mac, apt unter Linux). Unter Windows ist möglicherweise ein neues Terminal erforderlich, bevor ffmpeg gefunden wird. Falls ja, teile dem Benutzer mit, dass er Claude Code neu starten soll.
    • Kein Python 3.9+: Der Benutzer muss es installieren (python.org) und Claude Code neu starten.

    Dann führe die Einrichtung erneut aus.

  • Kein python Befehl? Probiere python3, oder unter Windows py.

In den folgenden Befehlen gilt S = ${CLAUDE_PLUGIN_ROOT}/skills/add-text/scripts. Setze jeden Pfad in Anführungszeichen. Verwende in PowerShell vor jedem Befehl & (z. B. & "PY" "S/add_text.py" ...).

Regeln

  • Die Ausgabe behält die Größe und Bildrate des Eingabevideos bei (TikTok: 1080×1920). Speichere die Textversion neben dem Original als <Name> (MIT TEXT).mp4 und überschreibe niemals das Original.
  • Inhalt: TikTok bestraft irreführende Behauptungen. Vermeide absolute Ergebnisversprechen („geheilt“, „in 3 Tagen behoben“, „garantiert“). Wenn der Aufhänger einer Referenz eine Behauptung aufstellt, passe den Wortlaut an (gleicher Rhythmus und gleiche Zeilenanzahl) und teile dem Benutzer mit, was du geändert hast und warum. Frage bei Unsicherheit nach.
  • Der eingegebene Text muss dem entsprechen, was ein iPhone produzieren würde:
    • … nicht ...
    • Geschweifte Anführungszeichen ’ „ “, wenn die Referenz sie verwendet
    • Emoji als echte Emoji-Zeichen
  • Führende und nachfolgende Leerzeichen sind wichtig: TikTok zentriert jede Zeile inklusive ihrer Leerzeichen. fit fügt sie für dich hinzu.

A. Text eines Referenz-TikToks kopieren

Verwende einen Arbeitsordner neben dem Video des Benutzers, z. B. text work/.

  1. Start: "PY" "S/add_text.py" start "REF.mp4" "WORKDIR"
    • Gibt jede Bildunterschrift aus: Start/Ende (frame-genau, Referenz-Zeitleiste), Stil, Füllfarbe und Box.
    • Schreibt WORKDIR/captions.json mit "text": "??" und einen herangezoomten Ausschnitt WORKDIR/caption_<n>.png von jeder.
    • Überspringt TikToks eigenen „TikTok @user“-Wasserzeichen.
    • Muss die Referenz zuerst heruntergeladen werden? yt-dlp funktioniert, wenn es installiert ist. Sonst bitte den Benutzer um die Datei.
  2. Text ausfüllen. Lies jedes Ausschnittsbild und ersetze jedes "??".
    • Lasse die anderen Felder unverändert. Die _-Felder (_ref_t, _bbox_1080, ...) werden von finish verwendet.
    • Zeilenumbrüche sind \n, und Emoji sind Zeichen. Kümmere dich nicht um führende oder nachfolgende Leerzeichen.
    • Wenn zwei Zeilen etwa doppelt so weit voneinander entfernt sind wie normal, handelt es sich um eine Leerzeile: "A\n\nB".
    • Zwei separate Textboxen in einer Bildunterschrift (sehr unterschiedliche Größen, eine große Lücke oder nicht auf derselben x-Achse zentriert): Teile sie in zwei Einträge mit demselben Start/Ende, _ref_t und Stil auf. Gib jeder ihre eigene _bbox_1080: die Vereinigung ihrer Zeilen aus _lines_1080 (erkennen gibt die Box und Höhe jeder Zeile aus), damit fit den richtigen Text betrachtet. Beispiel: Zeilen 1:[346,1126,735,1167] und 2+3 → [346,1126,735,1167] und [204,1272,887,1389].
    • Kam style als custom / custom_outline zurück? Das ist eine andere Schriftart, eine Hintergrundbox oder eine andere Farbe, die dieses Tool nicht hat. Informiere den Benutzer und wähle den ähnlichsten Stil. Rate nicht stillschweigend.
    • Zeitliche Anpassung hier, wenn die Schnitte des Benutzers von der Referenz abweichen: Bearbeite start/end (Sekunden, Ende exklusiv). Fit und Check betrachten die Referenz weiterhin zu ihrer eigenen Zeit (_ref_t).
  3. Abschluss: "PY" "S/add_text.py" finish "REF.mp4" "VIDEO.mp4" "WORKDIR"
    • Passt Größe, Position und Leerzeichen im Json an und schreibt WORKDIR/fit_<n>.png (Referenz oben, unsere unten).
    • Beendet jede Bildunterschrift, die über das Video hinausläuft, an der Videolänge.
    • Brennt VIDEO (MIT TEXT).mp4 neben dem Video ein (bzw. (ohne Text) → (MIT TEXT)). Ein 4. Argument wählt einen anderen Ausgabedateinamen.
    • Überprüft das Ergebnis und schreibt WORKDIR/check.jpg (Referenz links, unsere rechts).
    • Gibt eine ZUSAMMENFASSUNG: BESTANDEN oder ÜBERPRÜFUNG mit den Gründen aus.
  4. Sieh dir check.jpg an und zeige es dem Benutzer, bevor du sagst, dass es fertig ist.
    • Geringe Überschneidung mit „Kanten stimmen mit der Referenz innerhalb von N px überein“: Größe und Position sind korrekt. Komprimierter Gold- oder Gelbtext erreicht oft 0,45–0,7, selbst wenn er korrekt ist. Bestätige einfach den Wortlaut durch einen Blick.
    • Geringe Überschneidung mit „Kanten um N px abweichend“: Meist ein Tippfehler, ein fehlender Zeilenumbruch, der falsche Stil oder eine falsche _bbox_1080 nach einer Aufteilung. Korrigiere das Json und führe den Abschluss erneut aus.
    • Um die manuell angepasste Größe/y/x beizubehalten, füge --no-fit hinzu.

B. Neue Bildunterschriften (keine Referenz)

Schreibe ein captions.json:

[{"text": "Zeile eins\nZeile zwei", "start": 0, "end": 3.5, "style": "outline", "size": 70, "y": 0.5}]

Führe dann "PY" "S/add_text.py" new "VIDEO.mp4" "WORKDIR/captions.json" aus. Es brennt den Text ein und schreibt preview.jpg (ein Frame pro Bildunterschrift) neben das Json. Zeige es dem Benutzer.

  • style: classic (einfarbig weiß), outline (weiß + schwarze Kontur), yellow (hellgelb), yellow_gold (goldgelb), lilac (lila).
  • size: etwa 50 (klein) bis 85 (groß). Typische Aufhänger sind 54–77.
  • y: 0,4–0,5 = Bildschirmmitte, 0,65 = unteres Drittel. Halte Abstand zu den unteren 20 % (TikToks Untertitel/UI) und dem rechten Rand (Schaltflächen).
  • Optional: x (horizontale Mitte, Standard 0,5), weight, color („#RRGGBB“ für eine benutzerdefinierte Füllung).
  • Brich Zeilen dort um, wo eine Person auf einem Telefon tippen würde. Zeilen haben bei Größe 70 etwa 20–28 Zeichen.

Schneller Blick ohne Videorendering: "PY" "S/tiktok_text.py" --png "Text\nmehr" out.png (classic Stil).

Fallstricke

  • Typische Zeiten: Start etwa 25 s, Abschluss 1–3 Minuten je nach Anzahl der Bildunterschriften (Bildunterschriften mit Kontur passen am langsamsten), --no-fit etwa 40 s.
  • Emoji: Jedes neue wird einmal heruntergeladen (Apple-Set, Emoji-Daten-CDN auf jsDelivr), daher ist beim ersten Mal eine Internetverbindung erforderlich. Wenn ein Download fehlschlägt, löst das Skript einen Fehler aus. Informiere den Benutzer, anstatt das Emoji wegzulassen.
  • Kein Schatten, absichtlich: Echter TikTok-Text hat keinen. Die „sauberere“ Optik neben der komprimierten Referenz ist normal und verschwindet, sobald TikTok den Upload neu kodiert.
  • Bei nur 2 Zeilen kann der Leerzeichen-Korrektor von fit nicht erkennen, welche Zeile nicht zentriert ist. Wenn fit_<n>.png eine um etwa 5 px verschobene Zeile zeigt und die Überschneidung unter etwa 0,6 bleibt, versuche, selbst ein führendes oder nachfolgendes Leerzeichen in jede Zeile einzufügen, und führe den Vorgang erneut aus.
  • Windows: Wenn Emoji in anderen Python-Snippets seltsam gedruckt werden, setze PYTHONIOENCODING=utf-8. Diese Skripte handhaben das.

Verwandte Skills