YouTube Daily Shorts
Ein Short pro Tag, vollautomatisch, kostenlos. Der Kanal postet „Wusstest du schon?“-Fakten und kurze Motivationstexte, einen Tag auf Englisch, den nächsten auf Urdu.
Feste Einstellungen (hier ändern, wenn der Benutzer sie ändert)
| Einstellung | Wert |
|---|---|
| GitHub-Medien-Repo | Hammadbaig-hub/daily-shorts-media (öffentlich, Branch main) – enthält auch die Rendering-Werkzeuge in tools/ |
| Metricool-Marke (blogId) | 7592220, Zeitzone Asia/Karachi |
| Kanal | „Bright Life“, Handle @Bright-Life-m4 (Handle in script.json eintragen; CTA erwähnt „Bright Life“) |
| Veröffentlichungszeit | 19:00 Pakistan-Zeit (oder der nächste freie Slot, falls diese Zeit bereits verstrichen ist; mindestens 15 Minuten ab jetzt) |
| Sichtbarkeit | öffentlich (Benutzer hat vollautomatischen Upload gewählt) |
Warum es so aufgebaut ist
- Kostenlos: Der Benutzer hat kein Budget, daher wird das Video mit Pillow + ffmpeg gezeichnet (
tools/scripts/make_short.pyim Repo) und die Musik im selben Skript synthetisiert, was auch bedeutet, dass es keine Content-ID-Urheberrechtsansprüche gibt. - Sprachausgabe: Der Kommentar kommt von Kokoro, einem kleinen, kostenlosen neuronalen TTS-Modell, das offline auf der CPU läuft (
tools/scripts/voice.py). Die Modell-Dateien (~350 MB) werden einmalig von GitHub Releases nach~/ttsheruntergeladen. Englisch verwendetam_michael; Urdu wird von der Hindi-Stimmehm_omegamit Urdu-Text gesprochen, wobei einige Phoneme umgemappt werden. Jede Folie dauert so lange wie ihre Sprachausgabe, und die Musik wird darunter geduckt. Cloud-TTS (Microsoft/Google) ist im Workspace blockiert, daher die lokale Lösung. - GitHub-Hosting: Metricool benötigt eine öffentliche Video-URL. Der Cloud-Workspace kann auf GitHub pushen, und die Raw-Datei-URL ist öffentlich, das ist die Brücke.
- Faktencheck: Ein Faktenkanal steht und fällt mit seiner Glaubwürdigkeit. YouTube unterdrückt massenhaft produzierte, minderwertige oder irreführende Inhalte, und falsche „Fakten“ laden zu Dislikes und Korrekturkommentaren ein. Jeder Fakt wird vor der Verwendung überprüft – das ist der Teil der Arbeit, der echten Mehrwert schafft.
Täglicher Arbeitsablauf
1. Repo holen und Tag planen
cd ~ && (git -C daily-shorts-media pull -q || git clone https://github.com/Hammadbaig-hub/daily-shorts-media.git)
pip install -q --break-system-packages kokoro-onnx soundfile pillow numpy
python daily-shorts-media/tools/scripts/plan_today.py daily-shorts-media/history.json
Wenn das Repo nicht in der Sitzung ist, zuerst mit add_repo anbinden (Besitzer Hammadbaig-hub, Repo daily-shorts-media, Zugriff push) und klonen.
plan_today.py gibt die heutige lang, das theme, zurück, ob heute bereits ein Video gepostet wurde, und alle bisher verwendeten Themen. Wenn posted_today wahr ist, anhalten und melden – niemals zweimal an einem Tag posten.
2. Thema auswählen
Durch die Kategorien rotieren, damit der Kanal abwechslungsreich bleibt: Weltraum, Tiere, menschlicher Körper, Geschichte, Geographie, Wissenschaft, Technologie, Essen, Ozean, Erfindungen, Sprache, und ungefähr jeder fünfte Tag ein Motivationsteil (eine durch eine echte Studie oder eine gut dokumentierte wahre Geschichte gestützte Lektion oder Gewohnheit). Etwas auswählen, das nicht in already_done ist und kein beinahes Duplikat davon ist.
Vermeiden: medizinische oder Ernährungsratschläge, Politik, konfessionelle oder religiöse Debatten, alles über echte Privatpersonen und „Fakten“, die oft wiederholte Mythen sind (z. B. Goldfische mit 3-Sekunden-Gedächtnis, die Große Mauer, die vom Weltraum aus sichtbar ist).
3. Skript schreiben und verifizieren
Einen Hook schreiben (unter 12 Wörter, neugierig machend), 3–5 Fakten (jeweils ein Satz, unter 25 Wörter) und einen CTA.
Für jeden Fakt eine Websuche durchführen und aus einer zuverlässigen Quelle bestätigen (NASA, National Geographic, Britannica, eine Universität, eine begutachtete Studie, eine große Enzyklopädie). Wenn ein Fakt nicht bestätigt werden kann oder Quellen widersprüchlich sind, ihn verwerfen und einen anderen verwenden. Die Quell-URLs aufbewahren – sie kommen in die Beschreibung.
Urdu-Tage: Natürliches, einfaches Urdu in Urdu-Schrift schreiben (nicht in Roman-Urdu), so wie ein pakistanischer Zuschauer spricht – keine wortwörtliche Übersetzung. Zahlen als Urdu-Wörter schreiben (بیس فیصد, ہزاروں), damit die Stimme sie korrekt ausspricht.
CTA-Beispiele – EN: „Follow Bright Life for a new fact every day“. UR: „روزانہ نئے حقائق کے لیے برائٹ لائف کو فالو کریں“.
Als script.json speichern:
{"lang": "en", "hook": "...", "facts": ["...", "..."], "cta": "...",
"handle": "@Bright-Life-m4", "theme": 2}
4. Rendern
python daily-shorts-media/tools/scripts/make_short.py script.json daily-shorts-media/videos/<Datum>-<Slug>.mp4 > render.log 2>&1
Das Rendern dauert auf der CPU etwa 5 Minuten, also mit Bash run_in_background ausführen und auf die Fertigstellungsmeldung warten. Nicht mit einer pgrep -f make_short-Schleife warten – sie matcht die eigene Befehlszeile und endet nie. Die Länge folgt der Sprachausgabe – normalerweise 25–45 s für 3–5 Fakten. Unter 55 s bleiben, damit es ein Short bleibt: Wenn die Fakten lang sind, 3 statt 5 verwenden.
Da der Text gesprochen wird, für das Hören schreiben: Umständliche Symbole ausschreiben („Prozent“, nicht „%“ auf Englisch; „فیصد“ auf Urdu), Klammern und Abkürzungen vermeiden und Sätze kurz halten, damit die Stimme nicht hetzt. Dann einen Frame ziehen und mit Lesen prüfen, um Textüberlauf oder kaputtes Urdu zu erkennen:
ffmpeg -loglevel error -y -ss 5.5 -i <Video> -frames:v 1 check.png
Wenn Text über den Rand läuft oder falsch aussieht, diese Zeile kürzen und neu rendern.
5. Auf GitHub pushen
Den heutigen Eintrag an history.json anhängen:
{"date": "...", "lang": "...", "theme": n, "topic": "...", "title": "...", "file": "videos/...mp4"}
Nur die 20 neuesten .mp4-Dateien in videos/ behalten (ältere löschen – sie sind bereits auf YouTube), damit das Repo klein bleibt. Dann:
cd daily-shorts-media && git add -A && git commit -qm "Short <Datum>: <Thema>" && git push -q
Öffentliche URL: https://raw.githubusercontent.com/Hammadbaig-hub/daily-shorts-media/main/videos/<Datei>.mp4
Vor der Zeitplanung prüfen, ob sie 200 zurückgibt (curl -sI <URL> | head -1); wenn der Workspace diesen Host nicht erreichen kann, dem erfolgreichen Push vertrauen und fortfahren.
6. Auf YouTube über Metricool planen
createScheduledPost mit blogId 7592220, einem top-level date aufrufen (YYYY-MM-DDT19:00:00+05:00 – der Aufruf schlägt ohne fehl), und diesem info-JSON (Metricool kopiert das Video in seinen eigenen Speicher, daher kann die GitHub-Datei später entfernt werden):
{
"providers": [{"network": "youtube"}],
"text": "<Beschreibung>",
"media": ["<Raw-GitHub-URL>"],
"publicationDate": {"dateTime": "YYYY-MM-DDT19:00:00", "timezone": "Asia/Karachi"},
"autoPublish": true,
"draft": false,
"descendants": [], "firstCommentText": "", "hasNotReadNotes": false,
"mediaAltText": [], "shortener": false, "smartLinkData": {"ids": []},
"youtubeData": {
"title": "<Titel>",
"type": "short",
"privacy": "public",
"tags": ["facts", "did you know", "..."],
"category": "EDUCATION",
"madeForKids": false,
"isAiGeneratedContent": false
}
}
isAiGeneratedContent ist false, weil das Video einfacher animierter Text ist, kein realistisches synthetisches Material; YouTubes Offenlegungspflicht gilt für realistische veränderte Medien. Wenn eine spätere Version KI-generierte realistische Bilder oder Stimmen hinzufügt, auf true setzen.
Titel: unter 70 Zeichen, Neugier-Hook + #shorts. In der Sprache des Tages schreiben. Beispiel: Your Brain Can't Feel Pain?! 🧠 #shorts
Beschreibung: 2–3 Zeilen, die den Hook erweitern, dann Sources: mit den überprüften URLs, dann 3–5 Hashtags (#facts #didyouknow #shorts plus Themen-Tags; Urdu-Tage fügen #urdu #urdufacts hinzu).
7. Bericht
Dem Benutzer in Roman-Urdu, in wenigen Zeilen mitteilen: Thema, Sprache, Titel, geplante Zeit und die Metricool plannerUrl. Wenn als geplanter Task ohne Zuschauer laufend, diese Zusammenfassung mit SendUserMessage senden.
Wöchentlicher Check (sonntags oder wenn gefragt wird „channel kaisa chal raha hai“)
getAnalyticsDataByMetrics für das YouTube-Netzwerk der letzten 7 Tage verwenden (Aufrufe, Watchtime, gewonnene Abonnenten, Top-Videos). Zusammenfassen, was funktioniert hat – welche Kategorien und welche Sprache mehr Aufrufe erhalten haben – und das nutzen, um die Themenauswahl der nächsten Woche in Richtung des Erfolgreichen zu lenken. Die abwechselnde Sprache beibehalten, es sei denn, der Benutzer sagt etwas anderes.
Wenn etwas fehlschlägt
- Metricool lehnt den Beitrag ab: Den genauen Fehler melden; nicht dieselbe Eingabe wiederholen. Häufige Ursachen: fehlendes top-level
date, Video-URL noch nicht erreichbar (eine Minute warten, einmal wiederholen), oder die YouTube-Verbindung in Metricool ist abgelaufen (Benutzer muss sie in Metricool neu verbinden). - Git-Push schlägt fehl: Das Repo ist nicht mit Push-Zugriff angebunden –
add_repomitaccess: pushaufrufen. Wenn es immer noch sagt, dass Claude keinen GitHub-Zugriff hat, muss die Claude GitHub Appdaily-shorts-mediain ihren ausgewählten Repositorys haben (github.com/settings/installations → Claude → Configure); der Benutzer bestätigt diesen Schritt selbst, weil GitHub nach 2FA fragt. - Schriftarten fehlen: Sie liegen in
tools/assets/fonts/im Repo; das Skript liest sie von dort. - Sprachmodell-Download schlägt fehl: Mit
"voice": falsein script.json rendern, damit das Tagesvideo trotzdem rausgeht (nur Musik), und im Bericht erwähnen.