Communitygithub.com

Hammadbaig-hub/daily-shorts-media

1日1本の無料アニメーションテキストYouTube Shortを自動生成・公開します。新しいトピックを選び、ウェブ上の事実を検証し、コードで動画をレンダリング(AIクレジット不要)。GitHubでホストし、Metricool経由でYouTubeにスケジュール投稿。英語とウルドゥー語の日を交互に設定します。

daily-shorts-media とは?

このスキルは、コストゼロでYouTube Shortsチャンネルを完全自動運営するためのツールです。ユーザーが「今日のショート動画を作って」「アップロードして」「チャンネルを管理して」などと依頼した際に、毎日1本の「知ってた?」形式の豆知識またはモチベーション動画を自動生成し、YouTubeに公開します。 主な特徴: - 動画はPillowとffmpegで描画され、音楽も合成されるため、コンテンツID著作権クレームが発生しません。 - ナレーションにはオフラインで動作する無料のニューラルTTSモデル「Kokoro」を使用。英語は「am_michael」、ウルドゥー語はヒンディー語音声「hm_omega」をウルドゥー文字テキストで駆動します。 - 事実はすべてWeb検索で検証し、信頼できる情報源のみを使用。誤った情報やよくある都市伝説は排除します。 - 動画ファイルはGitHubの公開リポジトリにプッシュし、MetricoolのAPI経由でYouTubeにスケジュール投稿。 - 言語は英語とウルドゥー語を1日おきに交互に設定。 対応プラットフォーム: Claude Code (または同様のエージェント環境)。ワークフローは全てコマンドラインで実行され、必要なPythonライブラリ(kokoro-onnx、pillow、ffmpegなど)は自動インストールされます。 このスキルは、予算がなくても高品質で信頼性のあるShortsチャンネルを運営したいユーザーに最適です。ユーザーは「aaj ki video bana do」のような簡単な指示を出すだけで、全ての工程(トピック選定、事実検証、動画レンダリング、GitHubアップロード、Metricoolスケジュール設定)が自動実行されます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Hammadbaig-hub/daily-shorts-media/tree/HEAD/tools

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

YouTube Daily Shorts

1日1本、完全自動、コストゼロ。このチャンネルは「知ってた?」形式の豆知識と短いモチベーション動画を投稿します。英語の日とウルドゥー語の日が交互に来ます。

固定設定(ユーザーが変更した場合はここを変更)

設定値
GitHubメディアリポジトリHammadbaig-hub/daily-shorts-media(公開、ブランチ main)— tools/ にレンダリングツールも格納
Metricoolブランド(blogId)7592220、タイムゾーン Asia/Karachi
チャンネル「Bright Life」、ハンドル @Bright-Life-m4(script.jsonに記載。CTAでは「Bright Life」と記載)
公開時間パキスタン時間19:00(既に過ぎている場合は次の空きスロット。現時点から少なくとも15分後)
公開設定公開(ユーザーが完全自動アップロードを選択)

この構成の理由

  • 無料: ユーザーに予算がないため、動画はPillow + ffmpegで描画(リポジトリ内 tools/scripts/make_short.py)、音楽も同じスクリプトで合成。これによりContent ID著作権クレームも発生しません。
  • ナレーション: ナレーションにはKokoroを使用。これはオフラインでCPU上で動作する小さな無料ニューラルTTSモデルです(tools/scripts/voice.py)。その約350MBのモデルファイルは、GitHubリリースから一度 ~/tts にダウンロードされます。英語は am_michael、ウルドゥー語はウルドゥー文字テキストからヒンディー語音声 hm_omega が話します(いくつかの音素を再マッピング)。各スライドの長さはナレーションに合わせ、音楽はその下にダックされます。クラウドTTS(Microsoft/Google)はワークスペースからブロックされているため、オフラインで行います。
  • GitHubホスティング: Metricoolは公開ビデオURLを必要とします。クラウドワークスペースはGitHubにプッシュでき、rawファイルURLは公開されるため、これが橋渡しとなります。
  • 事実確認: 豆知識チャンネルは正確性で成否が決まります。YouTubeは大量生産された低価値または誤解を招くコンテンツを抑制し、間違った「豆知識」は低評価と修正コメントを招きます。すべての事実は使用前に検証されます。これが実際に価値を付加する仕事の部分です。

日次ワークフロー

1. リポジトリを取得してその日を計画

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

リポジトリがセッションにない場合は、最初に add_repo でアタッチ(オーナー Hammadbaig-hub、リポジトリ daily-shorts-media、アクセス push)してクローンします。

plan_today.py は、その日の lang、theme、既にその日に動画が投稿されたかどうか、そしてこれまでに使用されたすべてのトピックを返します。posted_today が true の場合は停止してそれを報告します。決して1日に2回投稿しないでください。

2. トピックを選ぶ

チャンネルに変化を持たせるため、カテゴリをローテーションします:宇宙、動物、人体、歴史、地理、科学、テクノロジー、食べ物、海洋、発明、言語。そして約5日に1回はモチベーション作品(実際の研究や十分に文書化された実話に基づく教訓や習慣)。already_done に含まれておらず、それと重複しないものを選びます。

以下は避けてください:医療や食事のアドバイス、政治、宗派や宗教の議論、実際の私人に関するもの、そしてよく繰り返される誤った「豆知識」(例:金魚の3秒記憶、万里の長城が宇宙から見えるなど)。

3. スクリプトを書き、検証する

フック(12語以内、好奇心を刺激)、3~5個の豆知識(それぞれ1文、25語以内)、CTAを書きます。

すべての豆知識について、WebSearchを実行し、信頼できる情報源(NASA、ナショナルジオグラフィック、ブリタニカ、大学、査読付き研究、主要な百科事典)から確認します。確認できない、または情報源が一致しない豆知識は破棄し、別のものを使います。ソースURLは保持します。動画の説明に含めます。

ウルドゥー語の日:自然でシンプルなウルドゥー語をウルドゥー文字(ローマ字ウルドゥーではなく)で書きます。パキスタン人の視聴者が話すような言葉で、単なる逐語訳ではありません。数字はウルドゥー語の単語(بیس فیصد、ہزاروں)で書き、音声が正しく発音できるようにします。

CTAの例 — 英語:「Follow Bright Life for a new fact every day」、ウルドゥー語:「روزانہ نئے حقائق کے لیے برائٹ لائف کو فالو کریں」。

script.json として保存:

{"lang": "en", "hook": "...", "facts": ["...", "..."], "cta": "...",
 "handle": "@Bright-Life-m4", "theme": 2}

4. レンダリング

python daily-shorts-media/tools/scripts/make_short.py script.json daily-shorts-media/videos/<date>-<slug>.mp4 > render.log 2>&1

レンダリングにはCPUで約5分かかるため、Bash run_in_background で実行し、完了通知を待ちます。pgrep -f make_short のループで待たないでください。自身のコマンドラインと一致してしまい、永遠に終わりません。長さはナレーションに従います — 通常、3〜5個の豆知識で25〜45秒。55秒以内に収めてShortにします。豆知識が長い場合は、5個ではなく3個にします。

テキストは話されるため、聞くために書きます:厄介な記号は綴ります(英語では「%」ではなく「percent」、ウルドゥー語では「فیصد」)、括弧や略語は避け、文を短くして音声が急がないようにします。その後、1フレームを取得してReadでテキストのオーバーフローやウルドゥー語の崩れを確認します:

ffmpeg -loglevel error -y -ss 5.5 -i <video> -frames:v 1 check.png

テキストが端からはみ出したり、見た目がおかしい場合は、その行を短くして再レンダリングします。

5. GitHubにプッシュ

今日のエントリを history.json に追加: {"date": "...", "lang": "...", "theme": n, "topic": "...", "title": "...", "file": "videos/...mp4"}

videos/ 内の最新の .mp4 ファイルのみ20個保持(古いものは削除 — 既にYouTubeにあるため)。リポジトリを小さく保ちます。その後:

cd daily-shorts-media && git add -A && git commit -qm "Short <date>: <topic>" && git push -q

公開URL:https://raw.githubusercontent.com/Hammadbaig-hub/daily-shorts-media/main/videos/<file>.mp4

スケジュール設定の前に200が返ることを確認(curl -sI <url> | head -1)。ワークスペースがそのホストに到達できない場合は、プッシュが成功したと信じて続行します。

6. Metricool経由でYouTubeにスケジュール

createScheduledPost を呼び出し、blogId 7592220、トップレベルの date(YYYY-MM-DDT19:00:00+05:00 — これがないと呼び出しが失敗します)、および以下の info JSON を指定します(Metricoolはビデオを自身のストレージにコピーするため、GitHubファイルは後で削除可能):

{
  "providers": [{"network": "youtube"}],
  "text": "<description>",
  "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": "<title>",
    "type": "short",
    "privacy": "public",
    "tags": ["facts", "did you know", "..."],
    "category": "EDUCATION",
    "madeForKids": false,
    "isAiGeneratedContent": false
  }
}

isAiGeneratedContent は false です。なぜなら動画は単純なアニメーションテキストであり、リアルな合成映像ではないからです。YouTubeの開示は現実的な改変メディアを対象としています。将来のバージョンでAI生成のリアルなビジュアルや音声が追加された場合は、true に設定します。

タイトル: 70文字未満、好奇心をそそるフック + #shorts。その日の言語で書きます。例:Your Brain Can't Feel Pain?! 🧠 #shorts

説明: 2~3行でフックを展開し、次に Sources: と検証したURL、最後に3~5個のハッシュタグ(#facts #didyouknow #shorts とトピックタグ。ウルドゥー語の日は #urdu #urdufacts を追加)。

7. 報告

ユーザーにローマ字ウルドゥー語で数行で伝えます:トピック、言語、タイトル、スケジュール時刻、Metricoolの plannerUrl。スケジュールタスクとして実行中で誰も見ていない場合は、その概要をSendUserMessageで送信します。

週次チェック(日曜日、または「channel kaisa chal raha hai」と聞かれたとき)

YouTubeネットワークの過去7日間のデータ(視聴回数、再生時間、獲得登録者数、トップ動画)を取得するには、getAnalyticsDataByMetrics を使用します。どのカテゴリと言語がより多くの視聴回数を得たかをまとめ、その情報を次の週のトピック選択に活用します。ユーザーが別途指示しない限り、言語の交互設定を維持します。

何かが失敗した場合

  • Metricoolが投稿を拒否: 正確なエラーを報告。同じ入力で再試行しない。よくある原因:トップレベルの date がない、動画URLがまだ到達可能でない(1分待ってから1回再試行)、またはMetricoolのYouTube接続が期限切れ(ユーザーがMetricoolで再接続する必要がある)。
  • Gitプッシュ失敗: リポジトリがプッシュアクセスでアタッチされていない — add_repo を access: push で呼び出す。それでもClaudeにGitHubアクセスがないと言われる場合、Claude GitHubアプリが daily-shorts-media を選択されたリポジトリに含める必要がある(github.com/settings/installations → Claude → Configure)。ユーザー自身がこの手順を確認します。GitHubが2FAを要求するためです。
  • フォントがない: リポジトリの tools/assets/fonts/ にあります。スクリプトはそこから読み取ります。
  • 音声モデルのダウンロード失敗: script.json で `

関連スキル