explainroo
explainroo는 AI 에이전트가 음성으로 설명 영상을 만들 수 있는 무료 오픈소스 도구이며, 로컬에서 API 키 없이 실행됩니다
PROJECT NEBULA 소속 VTuber들의 YouTube 영상·쇼츠·라이브와 Twitch 방송·클립을 캘린더 형태로 보여주는 웹앱
VTuber事務所「PROJECT NEBULA(ぷろねぶ)」所属タレントのYouTubeチャンネルで公開されている動画・ショート・ライブ配信およびTwitchで公開されている配信・クリップをカレンダーで表示するWebアプリ
미디어TypeScript · HTMLGitHub @mnkm온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗YouTube チャンネルの動画・ショート・ライブ配信と、Twitch の配信・クリップをカレンダーで表示する Web アプリです。
公開 URL: https://mnkm.page/prnb-stream-calendar/
ファンメイドの非公式ツールです。 PROJECT NEBULA および所属タレントの公式のものではなく、運営・タレントとは関係のない個人が作成・運用しています。
React SPA ──fetch──▶ Hono (/api/*) ──▶ D1
▲ upsert
Cron (毎分) ───── sync ───────┘──▶ YouTube Data API v3 / RSS
└▶ Twitch API (Helix)
Cron で YouTube と Twitch のデータを定期的に取得して D1 に保存し、画面は D1 から読みます。画面を開くたびに外部の API を呼ばないので、表示が速く、YouTube API の 1 日の使用量(クォータ)も抑えられます。
機能・API・データモデル・同期の仕組みの詳しい説明は docs/details.md にあります。
表示の状態は URL のパラメータ(view・date・q)に入るので、URL を共有すると同じ表示を開けます。
Cloudflare Workers の 1 つの Worker で、画面(静的アセット)と API(Hono)を配信します。データは D1 に保存します。
| パス | 内容 |
|---|---|
src/client/ | 画面(React、Vite、Tailwind CSS) |
src/worker/ | API と Cron の処理 |
src/shared/ | 画面と Worker で共有する型と処理 |
migrations/ | D1 のマイグレーション |
http://localhost、クライアントのタイプは「機密保持」)、Client ID と Client Secret を控えます。登録には Twitch アカウントの 2 段階認証が必要です。npm install
cp .dev.vars.example .dev.vars # YOUTUBE_API_KEY と ADMIN_TOKEN(と TWITCH_CLIENT_ID / TWITCH_CLIENT_SECRET)を記入
npm run db:migrate:local
npm run dev # http://localhost:5173
初回のデータは次のコマンドで取り込みます。過去分が多い場合は数回実行します。
curl -X POST -H "Authorization: Bearer <ADMIN_TOKEN>" http://localhost:5173/api/admin/sync
Cron の処理は http://localhost:5173/cdn-cgi/handler/scheduled を開くと手動で実行できます。.dev.vars に Twitch のキーが無いときは、Twitch を同期しません。
npx wrangler login
npx wrangler d1 create prnb-youtube-calendar # 出力された database_id を wrangler.jsonc に記入
npm run db:migrate:remote
npx wrangler secret put YOUTUBE_API_KEY
npx wrangler secret put ADMIN_TOKEN
npx wrangler secret put GITHUB_TOKEN # セットリストの点検の Issue 用
npx wrangler secret put TWITCH_CLIENT_ID # Twitch の配信も表示する場合
npx wrangler secret put TWITCH_CLIENT_SECRET
npm run deploy
Worker と D1 の名前は旧名の prnb-youtube-calendar のままです。
GITHUB_TOKEN は fine-grained personal access token で作り、対象はこのリポジトリだけ、権限は Issues の Read and write だけにします。期限が切れると Issue が作られなくなり、Workers のログに setlist audit failed が出ます。期限の前に作り直し、secret put で設定し直してください。
自動デプロイは、Cloudflare のダッシュボードの Workers & Pages → prnb-youtube-calendar → Settings → Builds で、このリポジトリを接続して設定します(Build command: npm run build、Deploy command: npx wrangler deploy)。main への push で本番にデプロイされ、ほかのブランチの push ではプレビュー版がアップロードされます。
develop ブランチで開発して push します。npm run db:migrate:remote)。D1 のマイグレーションは自動では反映されません。
0017_recheck_split_setlists.sql のように、新しいコードの動作を前提にしたもの)は、新しいコードのデプロイのあとに反映します。develop を main に取り込んで push すると、本番にデプロイされます。自動デプロイでは、Cron の設定は本番に反映されません。wrangler.jsonc の triggers.crons を変えて main に取り込んだあと、次のコマンドを実行します。
npm run build # Cron の設定を含むデプロイ用の設定ファイルを作り直す
npx wrangler triggers deploy # Cron の設定だけを本番に反映する
実行間隔が切り替わるまで、20 分ほどかかることがあります。反映された設定はダッシュボードの Settings → Trigger events で確認できます。
本番の D1 の同期の日時を確認します。日時は UTC です。
npx wrangler d1 execute prnb-youtube-calendar --remote \
--command "SELECT label, synced_at, twitch_synced_at FROM channels ORDER BY sort_order"
[code: 7403] のエラーは一時的なものです。少し待ってからやり直してください。
channels に ID を 1 行追加すると、次の Cron から過去分の取り込みが始まります。タイトルとアイコンは自動で取得します。
npx wrangler d1 execute prnb-youtube-calendar --remote \
--command "INSERT INTO channels (id, color, sort_order) VALUES ('UCxxxxxxxxxxxxxxxxxxxxxx', '#f472b6', 1)"
| 列 | 内容 |
|---|---|
color | チャンネルの色。CSS の色を書く。var(--ink) はライトテーマで黒、ダークテーマで白になる |
sort_order | 画面での並び順 |
label | 表示・非表示のボタンに出す短い名前(例: 公式、桃瀬にな) |
songlist_talent | 楽曲リストのサイトの talent パラメータの値(例: nina)。入れると「楽曲リストを開く」ボタンが出る |
twitch_login | Twitch のログイン名(twitch.tv/◯◯ の部分)。入れると次の Cron から Twitch の配信も取り込む |
チャンネルを 1 つ増やすと、YouTube API の使用量が 1 日に約 350〜650 ユニット増えます。1 日の上限は 10,000 ユニットなので、増やす前に見積もってください(内訳は docs/details.md の「クォータの目安」)。
package.json の overrides で、undici を ^7.30.1 に固定しています。開発用の miniflare が脆弱性のある undici 7.29.1 を指定しているためです。undici は開発サーバーだけで使い、本番の Worker には入りません。npm ls undici --all で miniflare が 7.30.1 以上を指定するようになったら、この overrides を消してください。
UUSH / UULF / UUMO / UUMF)を使っています。この仕様が変わると、判定が正しくなくなります。ガ など)を含む語は、検索では一致しても強調表示されないことがあります。THIRD_PARTY_NOTICES.md にあります。