チューナーを挿して起動すれば、そのまま使える自宅用のテレビ録画サーバです。 設定ファイルは書かず、チューナーは種別 (地上波 / 衛星) まで自動で見分け、あとは画面でスキャンを押すだけ。 Mirakurun や EDCB、メディアサーバは要りません。番組表から予約し、CM は自動で飛ばし、 ライブも録画もブラウザで字幕・データ放送つきで観られます。テレビは専用のアプリ denpa-tv で。
![]() 予約と録画 — サムネ付き。押せばその場で観る |
![]() ライブ — 字幕もデータ放送も。止めれば追っかけ |
![]() 観る — 放送どおりの字幕、CMは自動で飛ばす |
ほかの画面 (番組表・ルール・チューナー・設定) は docs/screens.md。
denpa は、自分の B-CAS カードで、自分の世帯の中で、私的に録画して観るためのものです。
- 録画やライブを、世帯の外の人に観せない
- カードの鍵を、世帯の外の機器に配らない
- カードを書き換えない
考え方は Discussion #760 にまとめています (法律相談ではなく、議論のための整理です)。
- 予約 — 番組表から押すか、「ルール」のキーワードで自動で。同じ回は最初の放送だけ録る
- 録画 — CM を見つけてチャプターにし、AV1 / H.264 の mkv にエンコードする。字幕は放送の ARIB 字幕のまま入れる。Intel の GPU があれば使う
- ライブ — 放送から 1 秒ほどで。止めれば追っかけ、二カ国語・解説放送も選べる (docs/stream.md)
- データ放送 — テレビと同じ BML がブラウザで動く (d ボタン)。ライブでも録画でも
- 観る — 行を押せばその場で再生。CM は1コマも見せずに飛ばし、続きから・倍速 (×1〜×2)・切り抜き (字幕ごと PNG)
- 字幕と放送の字 — 字幕は放送どおりの位置に描き、番組名・局名も含めて Denpa Font で外字まで崩さない
- 端末に保存して観る — 電波の無いところでも (docs/offline.md)
- EPGStation から引き継ぐ — ルール・予約・録画 (docs/migrate.md)
部品はチューナーで選局して素の TS を流す チューナーエージェント と、それ以外の全部 (番組表・予約・録画・ エンコード・配信) をやる denpa の2つだけです (docs/architecture.md)。
-
チューナー — 挿してあれば自動で見つけ、種別 (地上波 / 衛星) も見分けます
チューナー 使う仕組み ホストに入れるもの PT2 / PT3、PX-BCUD、PX-S1UD など Linux DVB ドライバ PX-Q3U4 / PX-W3U4 / PX-MLT 系など (px4-userland の対応機種。Windows も) px4-userland (同梱) なし (Windows はドライバを WinUSB に) PX-S1UD (smsusb を blacklist したとき。Windows も) siano-userland (同梱) なし (Windows はドライバを WinUSB に) PX-W3U3 asicen-userland (試験的。上流のリリース待ちで、まだ入らない) なし -
B-CASカード と PC/SC のカードリーダー (px4-userland の機材は内蔵リーダーでもよい)
-
OS — Linux (amd64 / arm64)、Mac (Apple Silicon)、Windows (x64)
-
Docker (Linux・Mac。Compose 込み) か、Windows は WSL (
wsl --updateで入るwslc。Docker Desktop は要らない)。 Kubernetes なら Helm -
あれば Intel の GPU (
/dev/driを渡す。docs/install.md)。無ければソフトウェアでエンコードします
1行で、denpa 本体とチューナーのエージェントの両方が立ち上がり、ブラウザが開きます。 clone は要りません。
# Linux / Mac
curl -fsSL https://raw.githubusercontent.com/danything/denpa/main/install.sh | bash# Windows (PowerShell)
irm https://raw.githubusercontent.com/danything/denpa/main/install.ps1 | iexエージェントの置き場は OS で違います (どれも上の1行がやる)。
- Linux — エージェントも本体も Docker Compose のコンテナ (
~/denpa/compose.yml) - Mac — エージェントは Mac の上で直接 (LaunchAgent)、本体は Docker。USB をコンテナに渡せないため
- Windows — エージェントは Windows の上で直接 (タスク スケジューラ)、本体は
wslcのコンテナ。 チューナーは px4-userland と siano-userland の機材で、ドライバを WinUSB にしておく
Linux で Compose を手で置くなら、これだけです (エージェントは tuner-agent として一緒に立つ)。
mkdir denpa && cd denpa
curl -Lo compose.yml https://raw.githubusercontent.com/danything/denpa/main/compose.prod.yml
docker compose up -dもう一度流すと最新のリリースに上がります。変えたい設定は ~/denpa/compose.override.yml
(Windows は ~/denpa/denpa.env) に書きます。
-
http://denpa.localhost (Linux・Mac で genkan を入れられたとき) か http://localhost:3000。LAN のほかの機器 (テレビ・スマホ) からは
http://<IP>:3000 -
誰を通すか — 設定するまで全部断ります。compose の
TRUSTED_NETWORKSの初期値は家の中 (私設網) で、 ここからはログインなしで通ります。画面をログインで守るなら OIDC の3つを渡します (リダイレクト URI はhttps://<denpa>/login/callback)# ~/denpa/compose.override.yml services: denpa: environment: TRUSTED_NETWORKS: 192.168.1.0/24 OIDC_ISSUER: https://login.microsoftonline.com/<tenant>/v2.0 OIDC_CLIENT_ID: <アプリケーションID> OIDC_CLIENT_SECRET: <クライアントシークレット>
Windows は同じ名前を
KEY=値で~/denpa/denpa.envに書きます。TRUSTED_NETWORKS=0.0.0.0/0はインターネットに向けて開くのと同じです。 家の外に出すなら OIDC を使います -
「チューナー」の画面で、見つかったチューナーを確かめてスキャンを押します。衛星は最初から局が入っていて、 地上波は十数分。終わると番組表を集めるので (数分)、あとは番組表から予約するだけです
-
カードリーダーが NG のまま録ると、中身はスクランブルされたままです (同じ画面に出ます)
1コンテナ (denpa-aio)・Helm・リバースプロキシの後ろに置くとき・困ったときは docs/install.md、
ログインの細かいことは docs/auth.md。
- ブラウザ — ホーム画面にも置ける (docs/player.md)
- テレビ (Android TV / Fire TV) — denpa-tv。テレビに出る QR をスマホで読めば繋がる
- 外から使う API — 局・録画の一覧、ライブ、音声だけ (Home Assistant やスクリプト向け。docs/api.md)
- docs/install.md — 立てる (入れ方の選択肢・1コンテナ・Helm・前段の後ろに置く)
- docs/screens.md — 画面 (実機のスクリーンショット)
- docs/architecture.md — なぜこの作りなのか (決めたこと・踏んだ落とし穴)
- docs/app.md — どこに何があるか (ファイル・環境変数・画面・状態遷移)
- docs/data.md — エージェントに都度聞くもの / denpa が持つもの
- docs/agent.md — チューナーを動かすところ (エージェント・取り合い・B-CAS・Mac / Windows)
- docs/encode.md — CM とエンコード (字幕・AV1・CM検出)
- docs/logo.md — 局ロゴ (番組表の PNG と CM検出用に覚えたロゴ)
- docs/library.md — 録画の置き場と配り方 (テレビのアプリ・削除・通知)
- docs/stream.md — ライブ視聴
- docs/player.md — ホーム画面に置く、LAN でも https で開く
- docs/offline.md — 端末に保存して電波の無いところで観る
- docs/auth.md — 誰を通すか (OIDC・信頼したネットワーク・ペアリング・画面で動いてよいもの (CSP))
- docs/api.md — 外から使う API
- docs/migrate.md — EPGStation からの引き継ぎ
- docs/development.md — 手を入れるとき (開発環境・テスト)
- docs/licenses.md — 借りているもの
動いた/動かなかったを Issue で教えてもらえると助かります。
手を入れてくれた人 (ありがとうございます):
- @Khronos31 — px4-userland / siano-userland で選局できなかったのを、PX-Q3U4 の実機で見つけて直してくれました (#188)。ほかにも不具合を報告してくれました (#195 #376 #377)
- @unlimish — ライブ・追っかけ・観る画面に小窓 (PiP) を足してくれました (#431)。非力な機材で複数のライブを観るときの詰まりを実測つきで報告してくれ、ライブを GPU でエンコードできるようになりました (#417)
- @fetburner — ルール画面の下見でチューナーの取り合いを数えるところを、時刻順に1回なぞるやり方にして、全件で 20 倍ほど速くしてくれました (#662)
- @sirius128 — 古い Intel の内蔵 GPU (Haswell など) でも GPU でエンコードできるように、イメージに i965 のドライバを足してくれました。Pentium G3250 と PT3 の実機で確かめてくれています (#775)
土台にしている仕事:
- px4-userland / siano-userland (@Khronos31) — ホストにドライバを入れずにチューナーを使えるのはこれのおかげです。PX-MLT5PE / DTV02A-5TS-P の対応は @siketyan
- web-bml (otya128) — データ放送は長くこれで描いていました。自前のエンジン (
src/lib/bml/) は、その振る舞いを手本にしています
AGPL-3.0-or-later (LICENSE)。ネットワーク越しに使わせる形で配るなら、その中身も同じ条件で 渡せるようにしてほしい、という理由で選んでいます。借りているもの (ffmpeg・Denpa Font ほか) は 元のライセンスのままで、一覧は docs/licenses.md。



