YouTube Daily Shorts
Um Short por dia, totalmente automático, custo zero. O canal publica fatos do tipo "Você sabia?" e pequenas mensagens motivacionais, um dia em inglês e o seguinte em urdu.
Configurações fixas (altere aqui se o usuário as modificar)
| Configuração | Valor |
|---|---|
| Repositório de mídia no GitHub | Hammadbaig-hub/daily-shorts-media (público, branch main) — também contém as ferramentas de renderização em tools/ |
| Marca Metricool (blogId) | 7592220, fuso horário Asia/Karachi |
| Canal | "Bright Life", identificador @Bright-Life-m4 (coloque o identificador em script.json; a CTA menciona "Bright Life") |
| Horário de publicação | 19:00 horário do Paquistão (ou o próximo slot livre se esse horário já tiver passado; pelo menos 15 minutos a partir de agora) |
| Privacidade | pública (o usuário escolheu upload automático total) |
Por que foi construído desta forma
- Gratuito: o usuário não tem orçamento, então o vídeo é desenhado com Pillow + ffmpeg (
tools/scripts/make_short.pyno repositório) e a música é sintetizada no mesmo script, o que também significa que não há reivindicações de direitos autorais do Content ID. - Narração: a narração vem do Kokoro, um pequeno modelo TTS neural gratuito que roda offline na CPU (
tools/scripts/voice.py). Seus arquivos de modelo de ~350 MB são baixados uma vez dos lançamentos do GitHub para~/tts. O inglês usaam_michael; o urdu é falado pela voz hindihm_omegaa partir de texto em script urdu, com alguns fonemas remapeados. Cada slide dura o tempo de sua narração, e a música é abaixada por baixo. O TTS em nuvem (Microsoft/Google) está bloqueado do workspace, por isso é offline. - Hospedagem no GitHub: o Metricool precisa de uma URL pública de vídeo. O workspace na nuvem pode fazer push para o GitHub, e a URL do arquivo bruto é pública, então essa é a ponte.
- Verificação de fatos: um canal de fatos vive ou morre pela precisão. O YouTube também suprime conteúdo produzido em massa, de baixo valor ou enganoso, e um "fato" errado atrai dislikes e comentários de correção. Cada fato é verificado antes de ser usado — esta é a parte do trabalho que agrega valor real.
Fluxo de trabalho diário
1. Obter o repositório e planejar o dia
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
Se o repositório não estiver na sessão, anexe-o primeiro com add_repo (proprietário Hammadbaig-hub, repositório daily-shorts-media, acesso push) e clone-o.
plan_today.py retorna o lang de hoje, theme, se um vídeo já foi postado hoje e todos os tópicos usados até agora. Se posted_today for verdadeiro, pare e relate isso — nunca poste duas vezes no mesmo dia.
2. Escolher um tópico
Alterne entre categorias para manter o canal variado: espaço, animais, corpo humano, história, geografia, ciência, tecnologia, comida, oceano, invenções, linguagem e, aproximadamente, um dia em cada cinco, uma peça motivacional (uma lição ou hábito apoiado por um estudo real, ou uma história real bem documentada). Escolha algo que não esteja em already_done e que não seja quase uma duplicata dele.
Fique longe de: conselhos médicos ou dietéticos, política, debates sectários ou religiosos, qualquer coisa sobre pessoas reais privadas e "fatos" que são mitos comumente repetidos (por exemplo, memória de 3 segundos do peixinho dourado, a Grande Muralha ser visível do espaço).
3. Escrever o roteiro e verificá-lo
Escreva um gancho (menos de 12 palavras, baseado em curiosidade), 3 a 5 fatos (cada um uma frase, com menos de 25 palavras) e uma CTA.
Para cada fato, execute uma WebSearch e confirme-o a partir de uma fonte confiável (NASA, National Geographic, Britannica, uma universidade, um estudo revisado por pares, uma enciclopédia importante). Se um fato não puder ser confirmado, ou as fontes discordarem, descarte-o e use outro. Mantenha as URLs das fontes — elas vão na descrição.
Dias em urdu: escreva urdu natural e simples em script urdu (não urdu romanizado), da forma que um espectador paquistanês fala — não uma tradução palavra por palavra. Escreva números como palavras em urdu (بیس فیصد, ہزاروں) para que a voz os pronuncie corretamente.
Exemplos de CTA — EN: "Follow Bright Life for a new fact every day". UR: "روزانہ نئے حقائق کے لیے برائٹ لائف کو فالو کریں".
Salve como script.json:
{"lang": "en", "hook": "...", "facts": ["...", "..."], "cta": "...",
"handle": "@Bright-Life-m4", "theme": 2}
4. Renderizar
python daily-shorts-media/tools/scripts/make_short.py script.json daily-shorts-media/videos/<data>-<slug>.mp4 > render.log 2>&1
A renderização leva cerca de 5 minutos na CPU, então execute-a com run_in_background do Bash e aguarde o aviso de conclusão. Não espere com um loop pgrep -f make_short — ele corresponde à própria linha de comando e nunca termina. A duração segue a narração — geralmente 25 a 45 segundos para 3 a 5 fatos. Mantenha abaixo de 55 segundos para que continue sendo um Short: se os fatos forem longos, use 3 em vez de 5.
Como o texto é falado, escreva-o para ser ouvido: escreva símbolos estranhos por extenso ("percent", não "%" em inglês; "فیصد" em urdu), evite colchetes e abreviações, e mantenha as frases curtas para que a voz não se apresse. Em seguida, capture um quadro e observe-o com Read para detectar estouro de texto ou urdu quebrado:
ffmpeg -loglevel error -y -ss 5.5 -i <video> -frames:v 1 check.png
Se o texto sair da borda ou parecer errado, encurte essa linha e renderize novamente.
5. Enviar para o GitHub
Adicione a entrada de hoje ao history.json:
{"date": "...", "lang": "...", "theme": n, "topic": "...", "title": "...", "file": "videos/...mp4"}
Mantenha apenas os 20 arquivos .mp4 mais recentes em videos/ (exclua os mais antigos — eles já estão no YouTube) para que o repositório permaneça pequeno. Então:
cd daily-shorts-media && git add -A && git commit -qm "Short <data>: <tópico>" && git push -q
URL pública: https://raw.githubusercontent.com/Hammadbaig-hub/daily-shorts-media/main/videos/<arquivo>.mp4
Verifique se retorna 200 antes de agendar (curl -sI <url> | head -1); se o workspace não conseguir acessar esse host, confie no push bem-sucedido e continue.
6. Agendar no YouTube através do Metricool
Chame createScheduledPost com blogId 7592220, um date de nível superior (YYYY-MM-DDT19:00:00+05:00 — a chamada falha sem ele), e este JSON info (o Metricool copia o vídeo para seu próprio armazenamento, então o arquivo do GitHub pode ser podado posteriormente):
{
"providers": [{"network": "youtube"}],
"text": "<descrição>",
"media": ["<URL bruta do GitHub>"],
"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": "<título>",
"type": "short",
"privacy": "public",
"tags": ["facts", "did you know", "..."],
"category": "EDUCATION",
"madeForKids": false,
"isAiGeneratedContent": false
}
}
isAiGeneratedContent é falso porque o vídeo é texto animado simples, não imagens sintéticas realistas; a divulgação do YouTube é destinada a mídia alterada realista. Se uma versão posterior adicionar imagens realistas geradas por IA ou vozes, defina-o como verdadeiro.
Título: menos de 70 caracteres, gancho de curiosidade + #shorts. Escreva-o no idioma do dia. Exemplo: Your Brain Can't Feel Pain?! 🧠 #shorts
Descrição: 2 a 3 linhas expandindo o gancho, depois Sources: com as URLs que você verificou, depois 3 a 5 hashtags (#facts #didyouknow #shorts mais tags do tópico; dias em urdu adicionam #urdu #urdufacts).
7. Relatar
Informe ao usuário em urdu romanizado, em algumas linhas: tópico, idioma, título, horário agendado e o plannerUrl do Metricool. Se estiver executando como uma tarefa agendada sem ninguém assistindo, envie esse resumo com SendUserMessage.
Verificação semanal (domingos, ou quando perguntado "channel kaisa chal raha hai")
Use getAnalyticsDataByMetrics para a rede do YouTube nos últimos 7 dias (visualizações, tempo de exibição, inscritos ganhos, principais vídeos). Resuma o que funcionou — quais categorias e qual idioma obtiveram mais visualizações — e use isso para direcionar as escolhas de tópicos da próxima semana para o que tem melhor desempenho. Mantenha a alternância de idiomas, a menos que o usuário diga o contrário.
Quando algo falha
- Metricool rejeita a postagem: relate o erro exato; não tente novamente a mesma entrada. Causas comuns: falta de
datede nível superior, URL do vídeo ainda não acessível (espere um minuto, tente novamente uma vez), ou a conexão do YouTube no Metricool expirou (o usuário deve reconectá-la no Metricool). - Git push falha: o repositório não está anexado com acesso de push — chame
add_repocomaccess: push. Se ainda disser que Claude não tem acesso ao GitHub, o aplicativo GitHub do Claude deve terdaily-shorts-mediaem seus repositórios selecionados (github.com/settings/installations → Claude → Configurar); o usuário confirma essa etapa por conta própria porque o GitHub solicita 2FA. - Fontes ausentes: elas estão em
tools/assets/fonts/no repositório; o script as lê de lá. - Falha no download do modelo de voz: renderize com
"voice": falseem script.json para que o vídeo do dia ainda seja publicado (apenas música) e mencione isso no relatório.