chat-replay-recap
v0.1.0
Published
配信アーカイブのチャットリプレイ(*.live_chat.json / chat-downloader の JSON)から、Super Chat・Super Stickers・メンバー加入・メンバーギフトを後から数える CLI(非公式・オフライン・依存ゼロ)
Maintainers
Readme
chat-replay-recap — 配信のあとから、スパチャとメンバーギフトを数える
配信アーカイブのチャットリプレイを保存したファイルから、スパチャ・スパステ・新規メンバー・継続・メンバーギフトを、配信のあとで数えるコマンドラインツールです。 誰から・いくら・何分の所で、が 1 画面で出ます。配信中に記録する道具を開き忘れていても、アーカイブがあれば数えられます。 無料・MIT ライセンス・非公式。Node.js が動く環境で使えます(動作確認は Windows 11・Node 24)。
- 読むのは手元のファイルだけです。このツールは YouTube にアクセスしません(ファイルの作り方は下の「1.」)
- 別売りでドラッグ&ドロップ版(¥980。お礼リスト・複数の配信をまとめて集計・CSV での保存)があります → 販売ページ。このコマンドライン版は無料です
- 不具合の報告・質問: [email protected]
必要なもの
- Node.js 20 以上(https://nodejs.org/ から入れます。「LTS」を選べば足ります。古い版では理由を表示して止まります)
- yt-dlp(無料の道具。チャットリプレイをファイルに保存するのに使います。下の「1.」)
使い方(上から順に)
1. チャットリプレイをファイルに保存する(yt-dlp)
- yt-dlp のダウンロードページから
yt-dlp.exe(Windows。macOS はyt-dlp_macos、Linux はyt-dlp)をダウンロードし、好きなフォルダに置く - そのフォルダでコマンドプロンプトか PowerShell を開く(Windows はフォルダのアドレスバーに
cmdと打って Enter。Windows Terminal の既定は PowerShell) - 配信アーカイブの URL を入れて実行する
.\yt-dlp --skip-download --write-subs --sub-langs live_chat -o "%(id)s.%(ext)s" "https://www.youtube.com/watch?v=AbCdEfGhIjK"先頭の .\ はコマンドプロンプトでも PowerShell でも要ります(PowerShell は .\ 無しだと「認識されません」で止まります)。macOS・Linux は ./yt-dlp_macos ./yt-dlp。
AbCdEfGhIjK.live_chat.json のように 動画 ID の名前のファイル ができます(動画そのものは取りません。長さによって 1〜10 MB)。
配信中に保存したファイルや、chat-downloader で保存した JSON も読めます(下「入力の形式」)。
**ファイルができないときは、黒い画面の最後の行を見てください。**その配信でチャットのリプレイが無効(配信者が非表示にしている)か、 アーカイブの処理がまだ終わっていないか、URL がライブ配信のアーカイブでない(通常の動画・メンバー限定)、のどれかがほとんどです。
注記: yt-dlp は別の作者の道具で、このツールには含まれません。保存は、自分の配信(または公開されている配信)について、 YouTube の利用規約の範囲で行ってください。このツール自体は YouTube にアクセスせず、手元のファイルだけを読みます。
2. 集計と支援の表を見る
npx chat-replay-recap AbCdEfGhIjK.live_chat.jsonAbCdEfGhIjK.live_chat.json [AbCdEfGhIjK] 配信日 2026-09-01 yt-dlp (JSON Lines) コメント(数えるだけ) 11 件
スパチャ 6 件・スパステ 2 件・新規メンバー 2 件・継続 1 件・メンバーギフト 2 件(6 件分)・ギフト受取 3 件
通貨別合計: ¥1,790(4 件)・₩1,000(1 件)・PHP 100.00(1 件)・NT$100(1 件)・$5.00(1 件)
支援者 10 名。上位: ねこまる ¥1,500(2 件)/Momo🍑 ¥200(1 件)/配信好き ¥90 / ギフト 1 件分(2 件)/김하늘 ₩1,000(1 件)/Bea PHP 100.00(2 件)
時刻 種別 名前 金額 内容 リンク
0:05:00 スパチャ ねこまる ¥1,000 初見です!応援してます https://www.youtube.com/watch?v=AbCdEfGhIjK&t=300s
0:07:00 スパステ Momo🍑 ¥200 ステッカー: Yay! https://www.youtube.com/watch?v=AbCdEfGhIjK&t=420s
0:10:00 新規メンバー しろくま New member https://www.youtube.com/watch?v=AbCdEfGhIjK&t=600s
0:15:00 スパチャ Taro_Yamada $5.00 gg https://www.youtube.com/watch?v=AbCdEfGhIjK&t=900s
0:20:00 メンバーギフト Gifter-san 5 件分 https://www.youtube.com/watch?v=AbCdEfGhIjK&t=1200s
0:20:01 ギフト受取 配信好き 贈り主: Gifter-san https://www.youtube.com/watch?v=AbCdEfGhIjK&t=1201s
(中略)
1:15:00 メンバーギフト 配信好き 1 件分 https://www.youtube.com/watch?v=AbCdEfGhIjK&t=4500s(上は同梱のテストデータ。視聴者名は架空です)
- 1 行目はファイル名・動画 ID・配信日(チャットの時刻から出したお使いの端末の日付)・形式・通常コメントの数(コメントは数えるだけで、表には出しません)
- 2〜4 行目が要約: 種別ごとの件数、通貨ごとの合計、支援者の人数と上位 5 名
- 表は支援 1 件 1 行。「リンク」はアーカイブの該当秒(ファイル名が
動画ID.live_chat.jsonなら自動。違う名前なら--video-idで渡す) - 末尾に「注意:」が出ることがあります(認識しなかった種類・読めなかった行・金額や名前の無い支援)。黙って 0 にはしません
初回だけ npx がパッケージを取得します(数秒)。毎回使うなら npm install -g chat-replay-recap で chat-replay-recap … と打てます。
3. 金額順にして、概算を足す
npx chat-replay-recap AbCdEfGhIjK.live_chat.json --sort amount --rates JPY:1,USD:150概算(JPY): ¥2,540(換算できない通貨: KRW, PHP, TWD)レートは自分で入れます(先頭が基準通貨。--rates JPY:1,USD:150,KRW:0.11 のように足せます)。取りに行きません。入れた通貨だけが「概算」の列と合計に入り、入れていない通貨は名前が出ます。
4. 種別を絞る
npx chat-replay-recap AbCdEfGhIjK.live_chat.json --include gifts,memberssuperchat stickers members(新規)milestones(継続)gifts(贈った人)gift_recv(受け取った人)text(コメント)をカンマで並べます。
5. 名前を伏せて共有する
npx chat-replay-recap AbCdEfGhIjK.live_chat.json --anonymize名前が 匿名-1a2b3c4d のような短い符号に、本文が「(伏せました)」になります。同じ人は同じ符号です(画面を見せて相談するとき用)。
6. 英語で出す
npx chat-replay-recap AbCdEfGhIjK.live_chat.json --lang enオプション一覧
| オプション | 効果 |
|---|---|
| --include <種別,…> | 表に出す種別。既定は全部(コメントを除く) |
| --all | 通常のコメントも表に出す(既定は数えるだけ) |
| --sort time\|amount | 並び。既定 time(貰った順)。amount は金額順(--rates があれば概算の降順) |
| --rates JPY:1,USD:150 | 概算の列と合計を足す。先頭が基準通貨。レートは自分で入れる |
| --video-id <id> | 時刻をアーカイブの該当秒へのリンクにする(ファイル名から読めないとき) |
| --anonymize | 名前・チャンネル ID・本文を伏せる |
| --lang ja\|en | 見出しの言語(既定 ja) |
| -h, --help / -v, --version | 使い方・版 |
この無料版に無いもの: --thanks(お礼リスト)・--csv/--json(保存)・ファイルを 2 つ以上渡す(複数配信の結合)。
渡すと「ドラッグ&ドロップ版(有償)の機能です」と 1 行で止まります(末尾「有償版」)。
保存できる形は有償版でも CSV・JSON と、お礼リストのテキスト/CSV です(Markdown での保存はありません)。
入力の形式
拡張子ではなく中身で判定します。
| 形式 | 何で作るか |
|---|---|
| yt-dlp の *.live_chat.json(1 行 1 JSON) | 上の「1.」。配信中に保存したもの(isLive)も読めます(時刻の意味が違うので注意が出ます) |
| 全体が JSON の配列 | 同上(配列にまとめたもの) |
| chat-downloader の JSON/JSON Lines | chat_downloader <URL> --output x.json |
先頭の BOM・CRLF・1 行だけ壊れている、は問題ありません(壊れた行は数えて「注意」に出します)。
止まる条件(壊れた入力)
次の場合は理由を 1〜2 行で表示して終了コード 1 で止まります。スタックトレースは出しません。入力ファイルには何も書きません。
- ファイルが無い・フォルダを指定した・空のファイル・512 MB を超えるファイル
- JSON として読めない(全行)・JSON だがチャットリプレイではない(
*.info.jsonや API の応答は、その旨を案内します) - 知らないオプション・値の無いオプション・
--lang/--sort/--include/--rates/--video-idの値の形が違う - 有償版だけの機能(
--thanks・--csv・--json・ファイル 2 つ以上) - Node.js が 20 未満
「金額の無いスパチャ」「名前の無い支援」「認識しなかった種類」は止まらず、数えて「注意」に出します。
詳しい仕様・注意
- 数えるのはチャットリプレイに残っている支援だけです。配信中に削除されたもの、リプレイに含まれなかったものは数えられません。YouTube Studio の金額と一致するとは限りません
- 種別の見分け方: スパチャ(
liveChatPaidMessageRenderer)・スパステ(liveChatPaidStickerRenderer)・新規メンバー/継続(liveChatMembershipItemRenderer。「メンバー歴 N か月」の見出しがあれば継続)・ メンバーギフト(…GiftPurchaseAnnouncementRenderer。贈った人と件数)・ギフト受取(…GiftRedemptionAnnouncementRenderer。受け取った人。件数に入れるが支援者には数えない)。 それ以外の種類は「対象外」として数だけ持ち、知らない種類は名前ごとに数えて「注意」に出します(YouTube 側の形式が変わったとき、黙って 0 にならないため) - 金額は表示された通貨のまま数えます(
¥1,000・$5.00・NT$100・₩1,000・PHP 100.00…)。記号 17 種と ISO の 3 文字コードで通貨を決め、知らない記号は落とさず「不明な記号」として通貨欄にそのまま出します - 支援者の同一性はチャンネル ID(無ければ表示名)。同じ名前の別の人は「名前 (2)」。同じ id の支援が 2 回入っていても 1 回だけ数えます
- 実データでの記録: 公開配信 3 本(スパチャ 16・スパステ 1・メンバー加入 10・メンバーギフト 28 件=359 件分・ギフト受取 307)で、
種別ごとの件数を生ファイルの独立した数え方と照合して全件一致——
docs/field-log.md(このパッケージに同梱。視聴者名・動画 ID・メンバーシップのレベル名は書いていません)。 記録の 3 本は英語表示で保存されたものですが、同じ 3 本を日本語表示で保存し直したファイルでも件数・合計が同じになることを確認しています(2026-09-22)。 配信中に保存したファイル(isLive)と chat-downloader の JSON は、テストデータでのみ確認しています - 金額の記号は表示どおりですが、全角の「¥」「₩」(日本語表示で保存したファイル)は半角の「¥」「₩」に揃えます
- macOS/Linux での実行は未確認です(動作確認は Windows 11・Node 24.19。標準機能しか使っていないので動く見込みですが、実測していません)
- 数十 MB のファイルも読めます(10 万行・30 MB のテストで 1 秒以下)。読み込みはメモリ上で一括なので、512 MB を上限にしています
有償版
同じ集計をドラッグ&ドロップで行い、お礼リストまで作る版(ブラウザで開くファイル 1 つ・インストール不要・約 100 KB)を ¥980 で用意しています。
- お礼リストを 3 つの形でコピー: お礼を言う用(「ねこまるさん、Momo🍑さん、…ありがとうございました!」。文と敬称は変えられます)/名前だけ(1 行 1 名)/CSV(名前・件数・通貨別合計・ギフト件数)
- 複数の配信をまとめて集計(同じ支援は二重に数えません。配信ごとの内訳はタブで)
- 支援の一覧を CSV・JSON で保存(Excel・Google スプレッドシートでそのまま開けます)
- 種別・最低金額での絞り込み、金額順、概算、アーカイブへのリンク、yt-dlp のコマンド生成(URL を貼るだけ)
動作確認は Windows の Chrome と Edge(headless の自動検証)。Firefox・Safari・macOS・iPad は未確認です。ネットワークには出ません。
入手方法: 販売ページの「¥980 で購入」から Stripe で決済すると、決済完了の画面から
chat-replay-recap-gui.html のダウンロードページに移ります。ダウンロードしたファイルをブラウザで開けば、そのまま使えます。
BOOTH でも同じものを出す予定です(準備中)。見るだけの版(1 本の配信の合計と表。この CLI と同じ範囲。お礼リスト・結合・保存は無し)は無料で、BOOTH の ¥0 に置く予定です(準備中)。
開発者向け
npm test # 自動テスト(node:test・合成データ。有償版の部分のテストはそのファイルが無ければ skip)
npm run fixtures # tests/fixtures/ を生成器から作り直す
npm run fieldlog # out/real/*.live_chat.json(自分で用意する。リポジトリに入れない)で docs/field-log.md を作るライブラリとしても使えます: import { parseText } from "chat-replay-recap/parse"(入力 → 正規化したイベントと統計)、import { buildRecap } from "chat-replay-recap"(1 配信の集計)、
chat-replay-recap/format(要約・表の描画)、chat-replay-recap/money(金額の解釈・換算)。Node の組み込みモジュールに依存しないので、ブラウザでもそのまま動きます。
npm のパッケージには CLI(bin/・lib/)・README 2 本・docs/field-log.md・LICENSE だけを置いています。有償版の部分(お礼リスト・結合・保存と GUI の源)は入れていません。
ライセンス
MIT License。
非公式ツールです。YouTube は Google LLC の商標であり、作者は Google とは無関係です。チャットリプレイの内部形式は公開されている実装
(yt-dlp の youtube_live_chat.py・chat-downloader の youtube.py)を参照しています。
