mirakurun 4.0.0-beta.9 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CHANGELOG.md +170 -1
  2. package/README.ja.md +125 -0
  3. package/README.md +37 -55
  4. package/api.d.ts +62 -20
  5. package/api.yml +97 -25
  6. package/doc/Configuration.ja.md +149 -0
  7. package/doc/Configuration.md +117 -98
  8. package/doc/Platforms.ja.md +233 -0
  9. package/doc/Platforms.md +161 -126
  10. package/docker/container-init.sh +5 -3
  11. package/docker/docker-compose.yml +42 -22
  12. package/lib/Mirakurun/Channel.d.ts +1 -1
  13. package/lib/Mirakurun/Channel.js +98 -63
  14. package/lib/Mirakurun/Channel.js.map +1 -1
  15. package/lib/Mirakurun/ChannelItem.d.ts +1 -6
  16. package/lib/Mirakurun/ChannelItem.js +2 -116
  17. package/lib/Mirakurun/ChannelItem.js.map +1 -1
  18. package/lib/Mirakurun/Event.d.ts +6 -13
  19. package/lib/Mirakurun/Event.js.map +1 -1
  20. package/lib/Mirakurun/Job.d.ts +69 -0
  21. package/lib/Mirakurun/Job.js +482 -0
  22. package/lib/Mirakurun/Job.js.map +1 -0
  23. package/lib/Mirakurun/Program.d.ts +1 -2
  24. package/lib/Mirakurun/Program.js +38 -28
  25. package/lib/Mirakurun/Program.js.map +1 -1
  26. package/lib/Mirakurun/Server.d.ts +5 -0
  27. package/lib/Mirakurun/Server.js +91 -52
  28. package/lib/Mirakurun/Server.js.map +1 -1
  29. package/lib/Mirakurun/Service.d.ts +7 -2
  30. package/lib/Mirakurun/Service.js +143 -7
  31. package/lib/Mirakurun/Service.js.map +1 -1
  32. package/lib/Mirakurun/Tuner.d.ts +4 -0
  33. package/lib/Mirakurun/Tuner.js +124 -103
  34. package/lib/Mirakurun/Tuner.js.map +1 -1
  35. package/lib/Mirakurun/TunerDevice.js +10 -18
  36. package/lib/Mirakurun/TunerDevice.js.map +1 -1
  37. package/lib/Mirakurun/_.d.ts +2 -0
  38. package/lib/Mirakurun/_.js.map +1 -1
  39. package/lib/Mirakurun/api/events/stream.js.map +1 -1
  40. package/lib/Mirakurun/api/job-schedules/{key}/run.d.ts +8 -0
  41. package/lib/Mirakurun/api/job-schedules/{key}/run.js +93 -0
  42. package/lib/Mirakurun/api/job-schedules/{key}/run.js.map +1 -0
  43. package/lib/Mirakurun/api/job-schedules.d.ts +2 -0
  44. package/lib/Mirakurun/api/job-schedules.js +68 -0
  45. package/lib/Mirakurun/api/job-schedules.js.map +1 -0
  46. package/lib/Mirakurun/api/jobs/{id}/abort.d.ts +8 -0
  47. package/lib/Mirakurun/api/jobs/{id}/abort.js +85 -0
  48. package/lib/Mirakurun/api/jobs/{id}/abort.js.map +1 -0
  49. package/lib/Mirakurun/api/jobs/{id}/rerun.d.ts +8 -0
  50. package/lib/Mirakurun/api/jobs/{id}/rerun.js +85 -0
  51. package/lib/Mirakurun/api/jobs/{id}/rerun.js.map +1 -0
  52. package/lib/Mirakurun/api/jobs.d.ts +2 -0
  53. package/lib/Mirakurun/api/jobs.js +68 -0
  54. package/lib/Mirakurun/api/jobs.js.map +1 -0
  55. package/lib/Mirakurun/api/tuners/{index}.js +2 -2
  56. package/lib/Mirakurun/api/tuners/{index}.js.map +1 -1
  57. package/lib/Mirakurun/common.d.ts +5 -0
  58. package/lib/Mirakurun/common.js +40 -0
  59. package/lib/Mirakurun/common.js.map +1 -1
  60. package/lib/Mirakurun/config.js +25 -6
  61. package/lib/Mirakurun/config.js.map +1 -1
  62. package/lib/Mirakurun/db.d.ts +2 -2
  63. package/lib/Mirakurun/db.js +24 -24
  64. package/lib/Mirakurun/db.js.map +1 -1
  65. package/lib/Mirakurun/rpc.js +28 -4
  66. package/lib/Mirakurun/rpc.js.map +1 -1
  67. package/lib/client.d.ts +4 -1
  68. package/lib/client.js +8 -1
  69. package/lib/client.js.map +1 -1
  70. package/lib/server.js +4 -0
  71. package/lib/server.js.map +1 -1
  72. package/lib/tsconfig.tsbuildinfo +1 -1
  73. package/lib/ui/assets/24f2ece9e56f8427a67e.ttf +0 -0
  74. package/lib/ui/assets/3dd8a3908ca677a5883a.woff2 +0 -0
  75. package/lib/ui/assets/56858bb41ed5877793c7.woff +0 -0
  76. package/lib/ui/assets/79f5ffa16f64257c1ba4.eot +0 -0
  77. package/lib/ui/assets/ac3753b19425271d124b.eot +0 -0
  78. package/lib/ui/assets/ac7c217773ea8b74720c.woff2 +0 -0
  79. package/lib/ui/assets/d4183e6c2c3a01b76c49.woff +0 -0
  80. package/lib/ui/assets/f0cbba8bb2af0749e4be.ttf +0 -0
  81. package/lib/ui/index.bundle.js +5995 -2006
  82. package/lib/ui/index.bundle.js.map +1 -1
  83. package/lib/ui/index.html +2 -5
  84. package/lib/ui/redoc-ui.html +2 -2
  85. package/lib/ui/vendors.bundle.js +97219 -71527
  86. package/lib/ui/vendors.bundle.js.map +1 -1
  87. package/package.json +24 -14
  88. package/lib/Mirakurun/queue.d.ts +0 -3
  89. package/lib/Mirakurun/queue.js +0 -5
  90. package/lib/Mirakurun/queue.js.map +0 -1
  91. package/lib/ui/index.dev.html +0 -18
package/CHANGELOG.md CHANGED
@@ -2,10 +2,179 @@
2
2
 
3
3
  see [Commit Logs](https://github.com/Chinachu/Mirakurun/commits/master) to check all.
4
4
 
5
- ## 4.0.0-beta.9 (2025-03-16)
5
+ ## 4.1.1 (2026-06-15)
6
+
7
+ 動作環境やユースケースを鑑みて、このバージョンから、このプロジェクトは基本的に日本語を使用します。ドキュメントや UI 等も順次日本語となります。何卒ご了承下さい 🙏
8
+
9
+ ### Known Issues
10
+
11
+ - **UI**
12
+ - Home: 旧 UI からの仮移植です。表示崩れや余白不足、局ロゴの見切れがあります。
13
+
14
+ ### Docker
15
+
16
+ - 🆙 ベースイメージを `node:22.14.0-bookworm` → `node:24.16.0-bookworm` に更新
17
+
18
+ ### Server
19
+
20
+ - 🆙 Node.js エンジン要件: `^18 || ^20 || ^22` → `^22 || ^24`
21
+ - 👾 Config: allowPNA の型チェックを修正 (*bug*)
22
+
23
+ ### UI
24
+
25
+ - ✨ Fluent UI から Blueprint へ UI ベースコンポーネントを変更し、UI を刷新
26
+ - 🆕 ライトテーマ / ダークテーマ の切り替え
27
+ - 🆕 EPG, 番組検索, 番組詳細表示
28
+
29
+ ## About 4.0.0
6
30
 
7
31
  **Important Notice**: Mirakurun 4.0.0 includes significant performance improvements, enhanced EPG processing, asynchronous file I/O operations, and new features. As announced in 3.9.0, the experimental Win32 support has been completely removed.
8
32
 
33
+ ## 4.0.0-beta.17 (2025-04-11)
34
+
35
+ ### Server Changes
36
+
37
+ - **Service**:
38
+ - Fixed a bug in the loading services.
39
+
40
+ ## 4.0.0-beta.17 (2025-04-10)
41
+
42
+ ### Server Changes
43
+
44
+ - **Server**:
45
+ - Allow access to the Web UI through the allowOrigins setting.
46
+ - **Channel**:
47
+ - Fixed a bug in the readyFn of EPG gatherer job.
48
+ - **Tuner**:
49
+ - Improved readyForJob logic for better tuner selection.
50
+ - Added logging for tuner selection process.
51
+ - **TunerDevice**:
52
+ - Added channel type to command template replacement.
53
+
54
+ ## 4.0.0-beta.16 (2025-04-01)
55
+
56
+ ### Server Changes
57
+
58
+ - **Job**:
59
+ - Jobs can now be rerun.
60
+ - Maximum number of runs can now be set.
61
+ - **Config**:
62
+ - Added: `jobMaxRunning`, `jobMaxStandby` server configs.
63
+ - **API**:
64
+ - Added: `rerunJob` operations.
65
+ - **UI**:
66
+ - **JobsView**: Added support to rerun Job.
67
+ - **ServerConfigurator**: Added job settings.
68
+
69
+ ## 4.0.0-beta.15 (2025-03-30)
70
+
71
+ Bugfix of `@4.0.0-beta.14`.
72
+
73
+ ## 4.0.0-beta.14 (2025-03-30)
74
+
75
+ ### Key Changes
76
+
77
+ - **Job/Queue**: Improved background job mechanism for like EPG updates.
78
+ - **Users can now request EPG updates at any time.**
79
+ - Job execution schedules can now be set in a **cron-like format**.
80
+ - <u>Jobs are now executed in parallel</u> according to the number of CPU cores and resource availability.
81
+ - At the moment, the number of parallel executions is `Math.max(1, Math.floor(os.cpus().length / 2))`, but it will be made configurable in the ~~future~~. → `@4.0.0-beta.16`
82
+
83
+ ### Server Changes
84
+
85
+ - **Config**:
86
+ - Added: `programGCJobSchedule`, `epgGatheringJobSchedule` server configs.
87
+ - Removed: `programGCInterval`, `epgGatheringInterval` server configs. (*breaking change*)
88
+ - Settings are not migrated. If you have customized, you must re-configure them in cron-like format, which can be changed from the Web UI.
89
+ - see: [Configuration](doc/Configuration.md) ([日本語](doc/Configuration.ja.md))
90
+ - **API**:
91
+ - Added: `runJobSchedule`, `abortJob` operations.
92
+ - **UI**:
93
+ - **JobsView**: added.
94
+ - **ServerConfigurator**: updated.
95
+
96
+ ## 4.0.0-beta.13 (2025-03-29)
97
+
98
+ ### Docker Changes
99
+
100
+ - Added `DISABLE_PCSCD` environment variable to disable pcscd service.
101
+ - Added `DISABLE_B25_TEST` environment variable to disable B25 test decoder installation.
102
+ - Updated `docker-compose.yml` - For testing purposes, all devices can be accessed without setting "devices" by default.
103
+ - **The previous default setting required a restart of the container when the card reader's USB was unplugged and plugged in, but the new default setting restores it automatically.** please check the [docker-compose.yml](docker/docker-compose.yml).
104
+ - **以前のデフォルト設定では、カードリーダーの USB を抜き差しすると、コンテナの再起動が必要でしたが、今回のデフォルト設定では、自動的に復旧するようになりました。** 設定例は [docker-compose.yml](docker/docker-compose.yml) をご確認ください。
105
+
106
+ ## 4.0.0-beta.12 (2025-03-21)
107
+
108
+ ### Server Changes
109
+
110
+ - **Server**:
111
+ - Wait the LISTEN until finishes loading the program and service db at startup.
112
+ - **UI**:
113
+ - **TunersManager**: packet counter is now hidden when stream info is empty
114
+
115
+ ## 4.0.0-beta.11 (2025-03-20)
116
+
117
+ ### Key Changes
118
+
119
+ - **Channel Configuration**: Added new `commandVars` property to replace and extend the previous tuner command options
120
+ - Supports any custom command variables (not limited to predefined keys)
121
+ - Added support for arguments containing whitespace using quotes
122
+ - Previous options (`satellite`, `space`, `freq`, `polarity`) are now soft-deprecated but still work - Automatically migrates existing configurations to the new format
123
+
124
+ ```yaml
125
+ # Tuner Device Item Configuration
126
+ - name: Example-Tuner
127
+ types:
128
+ - GR
129
+ ...
130
+ command: cmd <channel> --arg1 --arg2 <exampleArg1> <exampleArg2> "<exampleArg3>" -
131
+
132
+ # Channel Item Configuration
133
+ - name: Example-Ch
134
+ type: GR
135
+ channel: '123'
136
+ ...
137
+ commandVars: # new
138
+ exampleArg1: -arg0 -arg1=example
139
+ exampleArg2: -arg2 "whitespace is now supported using quote"
140
+ exampleArg3: white space
141
+ ...
142
+ ```
143
+ - This implementation is inspired by the [extra-args already implemented in mirakc](https://github.com/mirakc/mirakc/blob/1fbbd9875bcb2de9143e2dc73be8ac6d54ed0965/docs/config.md#channels), but in a different way. This is so that appropriate arguments can be defined even in an environment where different tuner commands are mixed.
144
+
145
+ ### Server Changes
146
+
147
+ - **API**:
148
+ - Deprecated several channel configuration properties in favor of the new `commandVars` property
149
+ - **Channel**:
150
+ - Improved handling of tuner command parameters with expanded configuration options
151
+ - Migrated from hardcoded parameters to flexible variable substitution
152
+ - **TunerDevice**:
153
+ - Enhanced command string handling with support for quoted arguments containing whitespace
154
+ - Improved command template variable substitution
155
+ - **UI**:
156
+ - **ChannelsConfigurator**: Significantly improved the channel configuration interface
157
+ - Added visual editor for command arguments with dynamic add/remove capability
158
+ - Removed column headers for cleaner interface
159
+ - Automatically migrates deprecated configuration properties to the new format
160
+
161
+ ## 4.0.0-beta.10 (2025-03-17)
162
+
163
+ ### Server Changes
164
+
165
+ - **Server**:
166
+ - Added test mode support for unit/integration testing
167
+ - Added deinit method (not used yet)
168
+ - Improved server init with proper async handling
169
+ - **API**:
170
+ - **getTuner**: Fixed 500 error on not found (*bug*)
171
+
172
+ ### Client Changes
173
+
174
+ - **getDocs**: Added to get API spec docs
175
+
176
+ ## 4.0.0-beta.9 (2025-03-16)
177
+
9
178
  ### Server Changes
10
179
 
11
180
  - **UI**:
package/README.ja.md ADDED
@@ -0,0 +1,125 @@
1
+ [![Mirakurun](https://gist.githubusercontent.com/kanreisa/0ab27d7771e97edce5a24cc81b9b8ce6/raw/8e08d3d91390794b139ed593e3a834a8b41f651c/logo-mirakurun_2025-03-29.svg)](https://github.com/Chinachu/Mirakurun)
2
+
3
+ # Mirakurun
4
+
5
+ "Air" (開発中アプリのコードネーム) のために設計された日本のデジタルテレビチューナー API サーバーです。
6
+
7
+ [![npm version][npm-img]][npm-url]
8
+ [![npm downloads][downloads-image]][downloads-url]
9
+ [![Linux Build][azure-pipelines-img]][azure-pipelines-url]
10
+ [![tip for next commit](https://tip4commit.com/projects/43158.svg)](https://tip4commit.com/github/Chinachu/Mirakurun)
11
+ [![Backers on Open Collective](https://opencollective.com/Mirakurun/backers/badge.svg)](#backers)
12
+ [![Sponsors on Open Collective](https://opencollective.com/Mirakurun/sponsors/badge.svg)](#sponsors)
13
+
14
+ [**CHANGELOG**](CHANGELOG.md) | [**環境構築**](doc/Platforms.ja.md) | [**設定**](doc/Configuration.ja.md)
15
+
16
+ [**English**](README.md) | [**日本語**](README.ja.md)
17
+
18
+ ## Docker
19
+
20
+ [![dockeri.co](https://dockeri.co/image/chinachu/mirakurun)][docker-url]
21
+
22
+ 参照: 利用可能な[タグ一覧](https://hub.docker.com/r/chinachu/mirakurun/tags) (Docker Hub)
23
+
24
+ ## 特徴
25
+
26
+ - HTTP RESTful API (Swagger / Open API 2.0)
27
+ - 高度なチューナープロセス管理
28
+ - 単一チューニングでの複数ストリーム配信
29
+ - ストリーム優先度
30
+ - MPEG-2 TS パーサー、フィルター
31
+ - リアルタイム EPG パーサー
32
+ - 様々なチューナーデバイスと混合環境に対応 (chardev, DVB / ISDB-T, ISDB-S, DVB-S2)
33
+ - 自動チャンネルスキャン
34
+ - Web UI
35
+ - IPTV サーバー (M3U8 プレイリスト, XMLTV)
36
+
37
+ #### 図: MPEG-2 TS ストリーム API の多様性
38
+
39
+ ![](https://gist.githubusercontent.com/kanreisa/0ab27d7771e97edce5a24cc81b9b8ce6/raw/7409e229648e00b55404f9e8342dccb58bbb4ac4/mirakurun-fig-api-variety2.svg)
40
+
41
+ #### 図: ストリームフロー
42
+
43
+ ![](https://gist.githubusercontent.com/kanreisa/0ab27d7771e97edce5a24cc81b9b8ce6/raw/7409e229648e00b55404f9e8342dccb58bbb4ac4/mirakurun-fig-flow-stream2.svg)
44
+
45
+ ## 環境構築
46
+
47
+ 👉 [**環境構築**](doc/Platforms.ja.md)
48
+
49
+ ## 設定
50
+
51
+ 👉 [**設定**](doc/Configuration.ja.md)
52
+
53
+ ## Web UI
54
+
55
+ ```sh
56
+ # 管理 UI
57
+ http://_your_mirakurun_ip_:40772/
58
+
59
+ # Swagger UI
60
+ http://_your_mirakurun_ip_:40772/api/debug
61
+ ```
62
+
63
+ ## クライアント実装
64
+
65
+ - [Rivarun](https://github.com/Chinachu/Rivarun)
66
+ - [BonDriver_Mirakurun](https://github.com/Chinachu/BonDriver_Mirakurun)
67
+ - Mirakurun クライアント ([組み込み](https://github.com/Chinachu/Mirakurun/blob/master/src/client.ts))
68
+ - "Air" (開発コードネーム)
69
+ - [Chinachu γ](https://github.com/Chinachu/Chinachu/wiki/Gamma-Installation-V2)
70
+ - [EPGStation](https://github.com/l3tnun/EPGStation)
71
+
72
+ ## 貢献
73
+
74
+ - [CONTRIBUTING.md](CONTRIBUTING.md)
75
+
76
+ ## 寄付
77
+
78
+ - [Tip4Commit](https://tip4commit.com/github/Chinachu/Mirakurun) (BTC) - すべてのコミッターへ分配されます
79
+ - [Open Collective](https://opencollective.com/Mirakurun) (USD) - プール (使途未定)
80
+
81
+ ## Discord コミュニティ
82
+
83
+ - 招待リンク: https://discord.gg/X7KU5W9
84
+
85
+ ## Contributors
86
+
87
+ このプロジェクトは貢献してくださるすべての方々のおかげで成り立っています。
88
+ <a href="https://github.com/Chinachu/Mirakurun/graphs/contributors"><img src="https://opencollective.com/Mirakurun/contributors.svg?width=890&button=false" /></a>
89
+
90
+ ## Backers
91
+
92
+ すべての Backer の皆様、ありがとうございます! 🙏 [[Backer になる](https://opencollective.com/Mirakurun#backer)]
93
+
94
+ <a href="https://opencollective.com/Mirakurun#backers" target="_blank"><img src="https://opencollective.com/Mirakurun/backers.svg?width=890"></a>
95
+
96
+ ## Sponsors
97
+
98
+ スポンサーになってこのプロジェクトをサポートしてください。あなたのロゴがウェブサイトへのリンクとともにここに表示されます。 [[スポンサーになる](https://opencollective.com/Mirakurun#sponsor)]
99
+
100
+ <a href="https://opencollective.com/Mirakurun/sponsor/0/website" target="_blank"><img src="https://opencollective.com/Mirakurun/sponsor/0/avatar.svg"></a>
101
+ <a href="https://opencollective.com/Mirakurun/sponsor/1/website" target="_blank"><img src="https://opencollective.com/Mirakurun/sponsor/1/avatar.svg"></a>
102
+ <a href="https://opencollective.com/Mirakurun/sponsor/2/website" target="_blank"><img src="https://opencollective.com/Mirakurun/sponsor/2/avatar.svg"></a>
103
+ <a href="https://opencollective.com/Mirakurun/sponsor/3/website" target="_blank"><img src="https://opencollective.com/Mirakurun/sponsor/3/avatar.svg"></a>
104
+ <a href="https://opencollective.com/Mirakurun/sponsor/4/website" target="_blank"><img src="https://opencollective.com/Mirakurun/sponsor/4/avatar.svg"></a>
105
+ <a href="https://opencollective.com/Mirakurun/sponsor/5/website" target="_blank"><img src="https://opencollective.com/Mirakurun/sponsor/5/avatar.svg"></a>
106
+ <a href="https://opencollective.com/Mirakurun/sponsor/6/website" target="_blank"><img src="https://opencollective.com/Mirakurun/sponsor/6/avatar.svg"></a>
107
+ <a href="https://opencollective.com/Mirakurun/sponsor/7/website" target="_blank"><img src="https://opencollective.com/Mirakurun/sponsor/7/avatar.svg"></a>
108
+ <a href="https://opencollective.com/Mirakurun/sponsor/8/website" target="_blank"><img src="https://opencollective.com/Mirakurun/sponsor/8/avatar.svg"></a>
109
+ <a href="https://opencollective.com/Mirakurun/sponsor/9/website" target="_blank"><img src="https://opencollective.com/Mirakurun/sponsor/9/avatar.svg"></a>
110
+
111
+ ## 著作権 / ライセンス
112
+
113
+ &copy; 2016- [kanreisa](https://github.com/kanreisa).
114
+
115
+ - コード: [Apache License, Version 2.0](LICENSE)
116
+ - ドキュメント: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)
117
+ - ロゴ: [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)
118
+
119
+ [npm-img]: https://img.shields.io/npm/v/mirakurun.svg
120
+ [npm-url]: https://npmjs.org/package/mirakurun
121
+ [downloads-image]: https://img.shields.io/npm/dm/mirakurun.svg?style=flat
122
+ [downloads-url]: https://npmjs.org/package/mirakurun
123
+ [azure-pipelines-img]: https://dev.azure.com/chinachu/Mirakurun/_apis/build/status/Chinachu.Mirakurun?branchName=master
124
+ [azure-pipelines-url]: https://dev.azure.com/chinachu/Mirakurun/_build/latest?definitionId=1&branchName=master
125
+ [docker-url]: https://hub.docker.com/r/chinachu/mirakurun
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
- [![Mirakurun](https://gist.githubusercontent.com/kanreisa/0ab27d7771e97edce5a24cc81b9b8ce6/raw/e50683f1c4e7d1a13e9ef468f8cc945b0dbc853c/logo-mirakurun.svg)](https://github.com/Chinachu/Mirakurun)
1
+ [![Mirakurun](https://gist.githubusercontent.com/kanreisa/0ab27d7771e97edce5a24cc81b9b8ce6/raw/8e08d3d91390794b139ed593e3a834a8b41f651c/logo-mirakurun_2025-03-29.svg)](https://github.com/Chinachu/Mirakurun)
2
2
 
3
3
  # Mirakurun
4
4
 
5
- DVR Tuner Server for Japanese TV which designed for the "Air" (in development codename).
5
+ A Japanese digital TV tuner API server specifically designed for "Air" (code name of the app in development).
6
6
 
7
7
  [![npm version][npm-img]][npm-url]
8
8
  [![npm downloads][downloads-image]][downloads-url]
@@ -11,59 +11,44 @@ DVR Tuner Server for Japanese TV which designed for the "Air" (in development co
11
11
  [![Backers on Open Collective](https://opencollective.com/Mirakurun/backers/badge.svg)](#backers)
12
12
  [![Sponsors on Open Collective](https://opencollective.com/Mirakurun/sponsors/badge.svg)](#sponsors)
13
13
 
14
- ## Docker
15
-
16
- [![dockeri.co](https://dockeri.co/image/chinachu/mirakurun)][docker-url]
14
+ [**CHANGELOG**](CHANGELOG.md) | [**Setup Guide**](doc/Platforms.md) | [**Configuration**](doc/Configuration.md)
17
15
 
18
- see: available [Tags](https://hub.docker.com/r/chinachu/mirakurun/tags) (Docker Hub)
16
+ [**English**](README.md) | [**日本語**](README.ja.md)
19
17
 
20
- ### Quick Install
18
+ ## Docker
21
19
 
22
- ```sh
23
- mkdir ~/mirakurun/
24
- cd ~/mirakurun/
25
- wget https://raw.githubusercontent.com/Chinachu/Mirakurun/refs/heads/release/4.0.0/docker/docker-compose.yml
26
- docker compose pull
27
- docker compose run --rm -e SETUP=true mirakurun
28
- docker compose up -d
29
- ```
20
+ [![dockeri.co](https://dockeri.co/image/chinachu/mirakurun)][docker-url]
30
21
 
31
- see: [doc/Platforms.md](doc/Platforms.md)
22
+ Reference: List of available [tags](https://hub.docker.com/r/chinachu/mirakurun/tags) (Docker Hub)
32
23
 
33
24
  ## Features
34
25
 
35
- * RESTful API (Open API) - has designed like HTTP version of Spinel
36
- * Unix Sockets / TCP
37
- * Advanced Tuner Process Management
38
- * Priority Management
39
- * Tuner Device Pooling
40
- * Integrated MPEG-2 TS Parser, Filter
41
- * Realtime EPG Parser
42
- * Supports most Tuner Devices (chardev, DVB / ISDB-T, ISDB-S, DVB-S2)
43
- * Channel Scan
44
- * IPv6 Support
45
- * [Multiplexing Mirakuruns](doc/Mirakuruns.md)
46
- * Web UI
47
- * IPTV Server (M3U8 Playlist, XMLTV)
26
+ - HTTP RESTful API (Swagger / Open API 2.0)
27
+ - Advanced tuner process management
28
+ - Multiple stream broadcasting from a single tuning
29
+ - Stream priority
30
+ - MPEG-2 TS parser, filter
31
+ - Real-time EPG parser
32
+ - Support for various tuner devices and hybrid environments (chardev, DVB / ISDB-T, ISDB-S, DVB-S2)
33
+ - Automatic channel scanning
34
+ - Web UI
35
+ - IPTV server (M3U8 playlist, XMLTV)
48
36
 
49
37
  #### Figure: Variety of the MPEG-2 TS Stream API
50
38
 
51
- ![](https://gist.githubusercontent.com/kanreisa/0ab27d7771e97edce5a24cc81b9b8ce6/raw/e50683f1c4e7d1a13e9ef468f8cc945b0dbc853c/mirakurun-fig-api-variety.svg)
39
+ ![](https://gist.githubusercontent.com/kanreisa/0ab27d7771e97edce5a24cc81b9b8ce6/raw/7409e229648e00b55404f9e8342dccb58bbb4ac4/mirakurun-fig-api-variety2.svg)
52
40
 
53
41
  #### Figure: Stream Flow
54
42
 
55
- ![](https://gist.githubusercontent.com/kanreisa/0ab27d7771e97edce5a24cc81b9b8ce6/raw/e50683f1c4e7d1a13e9ef468f8cc945b0dbc853c/mirakurun-fig-flow-stream.svg)
56
-
57
- ## Requirements / Supported Platforms
43
+ ![](https://gist.githubusercontent.com/kanreisa/0ab27d7771e97edce5a24cc81b9b8ce6/raw/7409e229648e00b55404f9e8342dccb58bbb4ac4/mirakurun-fig-flow-stream2.svg)
58
44
 
59
- * [Node.js](http://nodejs.org/) 18, 20, 22
60
- * Linux w/ [Docker](https://hub.docker.com/r/chinachu/mirakurun)
45
+ ## Setup Guide
61
46
 
62
- see: [doc/Platforms.md](doc/Platforms.md)
47
+ 👉 [**Setup Guide**](doc/Platforms.md)
63
48
 
64
- ## **Install / Update / Uninstall / CLI**
49
+ ## Configuration
65
50
 
66
- see: [doc/Platforms.md](doc/Platforms.md)
51
+ 👉 [**Configuration**](doc/Configuration.md)
67
52
 
68
53
  ## Web UI
69
54
 
@@ -75,28 +60,27 @@ http://_your_mirakurun_ip_:40772/
75
60
  http://_your_mirakurun_ip_:40772/api/debug
76
61
  ```
77
62
 
78
-
79
63
  ## Client Implementations
80
64
 
81
- * [Rivarun](https://github.com/Chinachu/Rivarun)
82
- * [BonDriver_Mirakurun](https://github.com/Chinachu/BonDriver_Mirakurun)
83
- * Mirakurun Client ([Built-in](https://github.com/Chinachu/Mirakurun/blob/master/src/client.ts))
84
- * "Air" (in development codename)
85
- * [Chinachu γ](https://github.com/Chinachu/Chinachu/wiki/Gamma-Installation-V2)
86
- * [EPGStation](https://github.com/l3tnun/EPGStation)
65
+ - [Rivarun](https://github.com/Chinachu/Rivarun)
66
+ - [BonDriver_Mirakurun](https://github.com/Chinachu/BonDriver_Mirakurun)
67
+ - Mirakurun Client ([Built-in](https://github.com/Chinachu/Mirakurun/blob/master/src/client.ts))
68
+ - "Air" (in development codename)
69
+ - [Chinachu γ](https://github.com/Chinachu/Chinachu/wiki/Gamma-Installation-V2)
70
+ - [EPGStation](https://github.com/l3tnun/EPGStation)
87
71
 
88
72
  ## Contributing
89
73
 
90
- [CONTRIBUTING.md](CONTRIBUTING.md)
74
+ - [CONTRIBUTING.md](CONTRIBUTING.md)
91
75
 
92
- ## Supporting
76
+ ## Donations
93
77
 
94
- * [Tip4Commit](https://tip4commit.com/github/Chinachu/Mirakurun) (BTC) - to Every Committers
95
- * [Open Collective](https://opencollective.com/Mirakurun) (USD) - Pool (TBD)
78
+ - [Tip4Commit](https://tip4commit.com/github/Chinachu/Mirakurun) (BTC) - Distributed to all committers
79
+ - [Open Collective](https://opencollective.com/Mirakurun) (USD) - Pool (purpose undecided)
96
80
 
97
81
  ## Discord Community
98
82
 
99
- * Invitation: https://discord.gg/X7KU5W9
83
+ - Invitation: https://discord.gg/X7KU5W9
100
84
 
101
85
  ## Contributors
102
86
 
@@ -128,11 +112,9 @@ Support this project by becoming a sponsor. Your logo will show up here with a l
128
112
 
129
113
  &copy; 2016- [kanreisa](https://github.com/kanreisa).
130
114
 
131
- * Code: [Apache License, Version 2.0](LICENSE)
132
- * Docs: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)
133
- * Logo: [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)
134
-
135
- **Commercial License / Support** is provided by [Pixely LLC](https://pixely.jp/).
115
+ - Code: [Apache License, Version 2.0](LICENSE)
116
+ - Docs: [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)
117
+ - Logo: [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)
136
118
 
137
119
  [npm-img]: https://img.shields.io/npm/v/mirakurun.svg
138
120
  [npm-url]: https://npmjs.org/package/mirakurun
package/api.d.ts CHANGED
@@ -42,10 +42,6 @@ export interface Channel {
42
42
  type: ChannelType;
43
43
  channel: string;
44
44
  name?: string;
45
- satellite?: string;
46
- space?: number;
47
- freq?: number;
48
- polarity?: "H" | "V";
49
45
  services?: Service[];
50
46
  }
51
47
 
@@ -77,12 +73,7 @@ export interface Program {
77
73
  name?: string;
78
74
  description?: string;
79
75
  genres?: ProgramGenre[];
80
- video?: {
81
- type: ProgramVideoType;
82
- resolution: ProgramVideoResolution;
83
- streamContent: number;
84
- componentType: number;
85
- }
76
+ video?: ProgramVideo;
86
77
  audios?: ProgramAudio[];
87
78
 
88
79
  series?: ProgramSeries;
@@ -101,6 +92,13 @@ export interface ProgramGenre {
101
92
  un2: number;
102
93
  }
103
94
 
95
+ export interface ProgramVideo {
96
+ type: ProgramVideoType;
97
+ resolution: ProgramVideoResolution;
98
+ streamContent: number;
99
+ componentType: number;
100
+ }
101
+
104
102
  export type ProgramVideoType = "mpeg2" | "h.264" | "h.265";
105
103
 
106
104
  export type ProgramVideoResolution = (
@@ -220,14 +218,46 @@ export interface TunerProcess {
220
218
  pid: number;
221
219
  }
222
220
 
223
- export interface Event {
221
+ export interface JobScheduleItem {
222
+ key: string;
223
+ schedule: string;
224
+ job: Pick<JobItem, "key" | "name">;
225
+ }
226
+
227
+ export interface JobItem {
228
+ key: string;
229
+ name: string;
230
+ id: string;
231
+ status: "queued" | "standby" | "running" | "finished";
232
+ retryCount: number;
233
+
234
+ isRerunnable?: boolean;
235
+ retryOnAbort?: boolean;
236
+ retryOnFail?: boolean;
237
+ retryMax?: number;
238
+ retryDelay?: number;
239
+
240
+ isAborting: boolean;
241
+ hasAborted?: boolean;
242
+ hasSkipped?: boolean;
243
+ hasFailed?: boolean;
244
+ error?: string;
245
+
246
+ createdAt: number;
247
+ updatedAt: number;
248
+ startedAt?: number;
249
+ finishedAt?: number;
250
+ duration?: number;
251
+ }
252
+
253
+ export interface Event<T = any> {
224
254
  resource: EventResource;
225
255
  type: EventType;
226
- data: any;
256
+ data: T;
227
257
  time: UnixtimeMS;
228
258
  }
229
259
 
230
- export type EventResource = "program" | "service" | "tuner";
260
+ export type EventResource = "program" | "service" | "tuner" | "job" | "job_schedule";
231
261
 
232
262
  export type EventType = "create" | "update" | "remove";
233
263
 
@@ -238,10 +268,12 @@ export interface ConfigServer {
238
268
  disableIPv6?: boolean;
239
269
  logLevel?: LogLevel;
240
270
  maxLogHistory?: number;
271
+ jobMaxRunning?: number;
272
+ jobMaxStandby?: number;
241
273
  maxBufferBytesBeforeReady?: number;
242
274
  eventEndTimeout?: number;
243
- programGCInterval?: number;
244
- epgGatheringInterval?: number;
275
+ programGCJobSchedule?: string;
276
+ epgGatheringJobSchedule?: string;
245
277
  epgRetrievalTime?: number;
246
278
  logoDataInterval?: number;
247
279
  disableEITParsing?: boolean;
@@ -292,15 +324,25 @@ export interface ConfigChannelsItem {
292
324
  type: ChannelType;
293
325
  /** passed to tuning command */
294
326
  channel: string;
295
- satellite?: string;
296
327
  serviceId?: number;
297
- space?: number;
298
- freq?: number;
299
- polarity?: "H" | "V";
328
+ /** TSMF (MPEG-TS Multi Frame) relative TS number config for CATV */
300
329
  tsmfRelTs?: number;
330
+ /**
331
+ * passed to tuning command variables.
332
+ * @example { "freq": 123456, "polarity": "H", "space": 6, "extra-args": "..." }
333
+ */
334
+ commandVars?: Record<string, string | number>;
301
335
  isDisabled?: boolean;
302
- /** @deprecated */
336
+ /** @deprecated typo of "satellite". */
303
337
  readonly satelite?: string;
338
+ /** @deprecated from 4.0.0, use `commandVars` instead. */
339
+ readonly satellite?: string;
340
+ /** @deprecated from 4.0.0, use `commandVars` instead. */
341
+ readonly space?: number;
342
+ /** @deprecated from 4.0.0, use `commandVars` instead. */
343
+ readonly freq?: number;
344
+ /** @deprecated from 4.0.0, use `commandVars` instead. */
345
+ readonly polarity?: "H" | "V";
304
346
  }
305
347
 
306
348
  export interface ChannelScanStatus {