discstation 0.1.10 → 0.1.11
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.
- package/README.md +24 -14
- package/docs/PLATFORM_SUPPORT.md +20 -13
- package/package.json +1 -1
- package/scripts/setup.mjs +1 -1
- package/src/discstation_host.py +0 -4
package/README.md
CHANGED
|
@@ -17,23 +17,27 @@ playback, ripping, phone uploads, and ESP32 remote control.
|
|
|
17
17
|
| **Burn Data DVD** | Any files/folders → ISO/Joliet data disc (no quality loss) |
|
|
18
18
|
| **Burn MPG** | Re-burn a previously converted movie.mpg |
|
|
19
19
|
| **Play** | Playback via mpv (DVD-Video, Audio CD, VCD, SVCD) |
|
|
20
|
-
| **Rip** | Audio CD → FLAC
|
|
20
|
+
| **Rip** | Audio CD → FLAC (MusicBrainz); DVD-Video → VIDEO_TS mirror or HandBrake MKV (TMDb naming) |
|
|
21
21
|
|
|
22
22
|
## Project Structure
|
|
23
23
|
|
|
24
24
|
```
|
|
25
25
|
.
|
|
26
26
|
├── src/
|
|
27
|
-
│ ├── discstation.py
|
|
28
|
-
│
|
|
27
|
+
│ ├── discstation.py # Main orchestrator, serial, web server
|
|
28
|
+
│ ├── discstation_burn.py # Burn pipeline (download, convert, author, burn)
|
|
29
|
+
│ ├── discstation_host.py # Per-OS device/path/backend abstraction
|
|
30
|
+
│ ├── discstation_meta.py # TMDb video metadata
|
|
31
|
+
│ └── static/ # Built-in web UI (index.html, app.js, style.css)
|
|
32
|
+
├── mobile/ # Expo (React Native) companion app
|
|
29
33
|
├── arduino/
|
|
30
|
-
│ ├── c6/
|
|
31
|
-
│ └── v1/
|
|
32
|
-
├──
|
|
33
|
-
├──
|
|
34
|
-
├── install-macos.sh
|
|
35
|
-
├──
|
|
36
|
-
├── systemd/
|
|
34
|
+
│ ├── c6/ # ESP32-C6 firmware
|
|
35
|
+
│ └── v1/ # ESP32 DevKit firmware
|
|
36
|
+
├── scripts/setup.mjs # `discstation-setup` — cross-OS installer dispatch
|
|
37
|
+
├── docs/ # Platform support notes
|
|
38
|
+
├── install.sh / install-macos.sh / install-windows.ps1
|
|
39
|
+
├── requirements.txt / requirements-optional.txt
|
|
40
|
+
├── systemd/ # Linux auto-start unit
|
|
37
41
|
└── README.md
|
|
38
42
|
```
|
|
39
43
|
|
|
@@ -52,7 +56,7 @@ discstation-setup # dispatches to the installer for your OS
|
|
|
52
56
|
| OS | What runs | Optical support |
|
|
53
57
|
|----|-----------|-----------------|
|
|
54
58
|
| Linux | `install.sh` — apt deps, venv, systemd `--user` service, self-signed cert | full burn / rip / play |
|
|
55
|
-
| macOS | `install-macos.sh` — Homebrew deps, venv, launchd agent, cert |
|
|
59
|
+
| macOS | `install-macos.sh` — Homebrew deps, venv, launchd agent, cert | burn / rip / play (audio-CD *burning* is best-effort; set `DISC_DEVICE` if detection fails) |
|
|
56
60
|
| Windows | `install-windows.ps1` — files + venv | web / serial control only, no burn backend |
|
|
57
61
|
|
|
58
62
|
### Or run the platform script directly
|
|
@@ -75,9 +79,10 @@ PowerShell -ExecutionPolicy Bypass -File .\install-windows.ps1
|
|
|
75
79
|
|
|
76
80
|
## Platform Support
|
|
77
81
|
|
|
78
|
-
Linux
|
|
79
|
-
|
|
80
|
-
|
|
82
|
+
Linux and macOS both run the complete optical workflow (burn, rip, play) —
|
|
83
|
+
macOS via `xorriso` / `hdiutil` / `cd-paranoia` / `dvdbackup` / HandBrake, with
|
|
84
|
+
audio-CD *burning* the one best-effort area. Windows runs the shared Python/web
|
|
85
|
+
workflow only; it has no burn backend yet. See `docs/PLATFORM_SUPPORT.md`.
|
|
81
86
|
|
|
82
87
|
## Web Interface
|
|
83
88
|
|
|
@@ -102,6 +107,11 @@ Built-in web server on port 8080 (HTTPS with self-signed cert):
|
|
|
102
107
|
| `DISC_CLEANUP_DAYS` | 2 | Auto-cleanup old job directories |
|
|
103
108
|
| `DISC_OUTPUT_LIMIT_BYTES` | 4300000000 | Conservative DVD5 payload limit |
|
|
104
109
|
| `DISC_DL_OUTPUT_LIMIT_BYTES` | 8000000000 | Conservative DVD9 payload limit |
|
|
110
|
+
| `DISC_DEVICE` | auto | Optical drive node override (required on Windows) |
|
|
111
|
+
| `DISC_PORT` | auto | ESP32 serial port override |
|
|
112
|
+
| `DISCSTATION_HTTP_PORT` | 8081 | Plain-HTTP port for the mobile app (`0` disables) |
|
|
113
|
+
| `DISCSTATION_DVD_RIP_MODE` | mirror | `mkv` = HandBrake main-feature transcode instead of a full VIDEO_TS mirror |
|
|
114
|
+
| `DISC_AUDIO_DEVICE` | auto | mpv audio-output device override |
|
|
105
115
|
|
|
106
116
|
### YouTube Download Configuration
|
|
107
117
|
|
package/docs/PLATFORM_SUPPORT.md
CHANGED
|
@@ -9,16 +9,23 @@ Run `./install.sh` on Debian, Ubuntu, or Raspberry Pi OS.
|
|
|
9
9
|
|
|
10
10
|
## macOS
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
Near-complete native support via Homebrew dependencies (`install-macos.sh`
|
|
13
|
+
installs them and a persistent `launchd` agent):
|
|
14
|
+
|
|
15
|
+
- **Detect** — optical device via `ioreg` / `drutil` / `diskutil`; blank and
|
|
16
|
+
rewritable media are classified, so the OLED offers the burn menu.
|
|
17
|
+
- **Burn** — data and DVD-Video images are built with `xorriso -as mkisofs`
|
|
18
|
+
(`-dvd-video` for a set-top-compatible VIDEO_TS layout) and written with
|
|
19
|
+
`hdiutil burn` (progress streamed from its `-puppetstrings` output).
|
|
20
|
+
- **Rip** — audio CD via `cd-paranoia` → FLAC with MusicBrainz metadata and
|
|
21
|
+
cover art; DVD-Video via `dvdbackup -M` (or HandBrake main-feature with
|
|
22
|
+
`DISCSTATION_DVD_RIP_MODE=mkv`), `libdvdcss` handling CSS.
|
|
23
|
+
- **Play** — `mpv`, with `dvdnav://` menu navigation for DVD-Video and a
|
|
24
|
+
mounted-VOB fallback.
|
|
25
|
+
|
|
26
|
+
Set `DISC_DEVICE` if automatic drive detection fails. The one known limitation
|
|
27
|
+
is **audio-CD *burning*** — `cdrdao` is the only option and often cannot claim
|
|
28
|
+
the drive on recent macOS; DiscStation reports this clearly instead of hanging.
|
|
22
29
|
|
|
23
30
|
## Windows
|
|
24
31
|
|
|
@@ -32,8 +39,8 @@ instead of silently attempting Linux commands.
|
|
|
32
39
|
- DiscStation workflows and web UI
|
|
33
40
|
- ESP32 serial protocol
|
|
34
41
|
- File upload and folder preservation
|
|
35
|
-
- Video/audio metadata handling
|
|
42
|
+
- Video/audio metadata handling (MusicBrainz, TMDb)
|
|
36
43
|
- QR-code web URL display
|
|
37
44
|
|
|
38
|
-
The optical-drive backend is the platform boundary.
|
|
39
|
-
|
|
45
|
+
The optical-drive backend is the platform boundary. Linux and macOS are
|
|
46
|
+
complete (bar macOS audio-CD burning); Windows still needs its writer backend.
|
package/package.json
CHANGED
package/scripts/setup.mjs
CHANGED
|
@@ -18,7 +18,7 @@ if (args.includes('-h') || args.includes('--help')) {
|
|
|
18
18
|
|
|
19
19
|
Runs the installer for the current OS:
|
|
20
20
|
linux install.sh full: apt deps, venv, systemd --user service, self-signed cert
|
|
21
|
-
darwin install-macos.sh full: Homebrew deps, venv, launchd agent, cert (
|
|
21
|
+
darwin install-macos.sh full: Homebrew deps, venv, launchd agent, cert (audio-CD burn is best-effort)
|
|
22
22
|
windows install-windows.ps1 files + venv only; web/serial control, no burn backend
|
|
23
23
|
|
|
24
24
|
Prereqs: Node 16+, Python 3 (python3 / py on PATH), and either bash (linux/macOS)
|
package/src/discstation_host.py
CHANGED
|
@@ -289,10 +289,6 @@ def null_device():
|
|
|
289
289
|
return "NUL" if system_name() == "windows" else "/dev/null"
|
|
290
290
|
|
|
291
291
|
|
|
292
|
-
def can_use_linux_optical_backend():
|
|
293
|
-
return system_name() == "linux" and all(shutil.which(name) for name in ("growisofs", "wodim", "cdrdao"))
|
|
294
|
-
|
|
295
|
-
|
|
296
292
|
def build_data_image(source_paths, output_path, label, video=False):
|
|
297
293
|
system = system_name()
|
|
298
294
|
if system in ("darwin", "windows"):
|