Skip to content

Commit 0275797

Browse files
committed
compose: default to GHCR image; add build compose
1 parent bd198e6 commit 0275797

5 files changed

Lines changed: 132 additions & 161 deletions

File tree

‎README.md‎

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,15 @@ open http://localhost:8787
4141

4242
The web UI lets you run **PLAN** (dry run), **RUN** (transcode), or **cleanup** jobs with a single click.
4343

44-
## Prebuilt Docker image (GHCR)
44+
This pulls `ghcr.io/lmerega/mediashrinker:latest` by default.
4545

46-
If you don't want to build locally, pull the prebuilt image:
46+
To build locally (development), use:
4747

4848
```bash
4949
cd docker/compose
50-
docker compose -f docker-compose.ghcr.yml up -d
50+
docker compose -f docker-compose.build.yml up -d --build
5151
```
5252

53-
This pulls `ghcr.io/lmerega/mediashrinker:latest` by default.
54-
5553
## PLAN vs RUN (why PLAN exists)
5654

5755
MediaShrinker is designed to operate safely on large libraries and network mounts. For that reason, **PLAN** is a first-class action, not a debug-only feature.

‎docker/compose/README.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,21 @@ Recommended workflow: run PLAN first, check `/dashboard` and the run detail page
6060
## 2) Start
6161

6262
```bash
63-
docker compose up -d --build mediashrinker
63+
docker compose up -d
6464
```
6565

66-
## Prebuilt image (GHCR)
66+
By default this pulls `ghcr.io/lmerega/mediashrinker:latest`.
6767

68-
If you prefer not to build locally, use the prebuilt image:
68+
Override the image if needed:
6969

7070
```bash
71-
docker compose -f docker-compose.ghcr.yml up -d
71+
GHCR_IMAGE=ghcr.io/<owner>/mediashrinker:latest docker compose up -d
7272
```
7373

74-
By default it pulls `ghcr.io/lmerega/mediashrinker:latest`. Override with:
74+
## Local build / development
7575

7676
```bash
77-
GHCR_IMAGE=ghcr.io/<owner>/mediashrinker:latest docker compose -f docker-compose.ghcr.yml up -d
77+
docker compose -f docker-compose.build.yml up -d --build
7878
```
7979

8080
Open:
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
# Local build/development compose.
2+
#
3+
# This file keeps the old "build from source" setup.
4+
# Most users should use docker-compose.yml (GHCR prebuilt image).
5+
6+
x-common-env: &common-env
7+
MEDIA_MOVIES_DIR: /data/movies
8+
MEDIA_TV_DIR: /data/tv
9+
MEDIA_STAGING_DIR: /staging
10+
MEDIA_REPORT_DIR: /reports
11+
MEDIA_HOST: "0.0.0.0"
12+
MEDIA_PORT: "8787"
13+
MEDIA_LIBRARY: "${MEDIA_LIBRARY:-both}"
14+
MEDIA_JOBS: "${MEDIA_JOBS:-1}"
15+
MEDIA_OCR_ENGINE: "${MEDIA_OCR_ENGINE:-pgsrip}"
16+
MEDIA_OCR_LANGS: "${MEDIA_OCR_LANGS:-ita,eng}"
17+
MEDIA_EXTRACT_PGS: "${MEDIA_EXTRACT_PGS:-1}"
18+
MEDIA_ADD_EXTERNAL_TEXT_SUBS: "${MEDIA_ADD_EXTERNAL_TEXT_SUBS:-1}"
19+
MEDIA_DELETE_BAK: "${MEDIA_DELETE_BAK:-0}"
20+
MEDIA_BITRATE_THRESHOLD_MBPS: "${MEDIA_BITRATE_THRESHOLD_MBPS:-55.0}"
21+
MEDIA_BITRATE_4K_MBPS: "${MEDIA_BITRATE_4K_MBPS:-45.0}"
22+
MEDIA_NO_MULTIPASS: "${MEDIA_NO_MULTIPASS:-0}"
23+
MEDIA_ENCODING_PROFILE: "${MEDIA_ENCODING_PROFILE:-balanced}"
24+
MEDIA_NOTIFY_URL: "${MEDIA_NOTIFY_URL:-}"
25+
MEDIA_WATCH_INTERVAL: "${MEDIA_WATCH_INTERVAL:-3600}"
26+
MEDIA_PGSRIP_BIN: "${MEDIA_PGSRIP_BIN:-pgsrip}"
27+
MEDIA_TESSDATA_PREFIX: "/usr/share/tesseract-ocr/5/tessdata"
28+
29+
x-common-volumes: &common-volumes
30+
- "${MOVIES_ROOT:-../../media/movies}:/data/movies"
31+
- "${TV_ROOT:-../../media/tv}:/data/tv"
32+
- "${STAGING_ROOT:-../../staging}:/staging"
33+
- "${REPORT_ROOT:-../../reports}:/reports"
34+
35+
x-common-build: &common-build
36+
context: ../..
37+
dockerfile: Dockerfile
38+
args:
39+
PUID: "${PUID:-1000}"
40+
PGID: "${PGID:-1000}"
41+
TESSDATA_LANGS: "${TESSDATA_LANGS:-eng ita}"
42+
43+
services:
44+
mediashrinker:
45+
build: *common-build
46+
image: mediashrinker:local
47+
container_name: mediashrinker
48+
restart: unless-stopped
49+
ports:
50+
- "${MEDIA_PORT:-8787}:8787"
51+
environment:
52+
<<: *common-env
53+
MEDIA_ENCODER: "${MEDIA_ENCODER:-auto}"
54+
volumes: *common-volumes
55+
56+
mediashrinker-nvidia:
57+
profiles: ["nvidia"]
58+
build: *common-build
59+
image: mediashrinker:local
60+
container_name: mediashrinker-nvidia
61+
restart: unless-stopped
62+
ports:
63+
- "${MEDIA_PORT:-8787}:8787"
64+
environment:
65+
<<: *common-env
66+
MEDIA_ENCODER: hevc_nvenc
67+
NVIDIA_VISIBLE_DEVICES: all
68+
NVIDIA_DRIVER_CAPABILITIES: compute,video,utility
69+
deploy:
70+
resources:
71+
reservations:
72+
devices:
73+
- driver: nvidia
74+
count: all
75+
capabilities: [gpu, video]
76+
volumes: *common-volumes
77+
78+
mediashrinker-vaapi:
79+
profiles: ["vaapi"]
80+
build: *common-build
81+
image: mediashrinker:local
82+
container_name: mediashrinker-vaapi
83+
restart: unless-stopped
84+
ports:
85+
- "${MEDIA_PORT:-8787}:8787"
86+
environment:
87+
<<: *common-env
88+
MEDIA_ENCODER: hevc_vaapi
89+
devices:
90+
- /dev/dri:/dev/dri
91+
volumes: *common-volumes
92+
93+
mediashrinker-watchd:
94+
profiles: ["watchd"]
95+
build: *common-build
96+
image: mediashrinker:local
97+
container_name: mediashrinker-watchd
98+
restart: unless-stopped
99+
command: ["watchd"]
100+
environment:
101+
<<: *common-env
102+
MEDIA_ENCODER: "${MEDIA_ENCODER:-auto}"
103+
volumes: *common-volumes
104+
105+
mediashrinker-hwcheck:
106+
profiles: ["hwcheck"]
107+
build: *common-build
108+
image: mediashrinker:local
109+
container_name: mediashrinker-hwcheck
110+
command: ["hwcheck"]
111+
environment:
112+
<<: *common-env
113+
devices:
114+
- /dev/dri:/dev/dri
115+
volumes: *common-volumes
116+

‎docker/compose/docker-compose.ghcr.yml‎

Lines changed: 0 additions & 46 deletions
This file was deleted.

‎docker/compose/docker-compose.yml‎

Lines changed: 7 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
1-
# ---------------------------------------------------------------------------
2-
# MediaShrinker — Docker Compose
1+
# Default deployment: pull the prebuilt image from GHCR.
32
#
4-
# Profili disponibili:
5-
# (default) CPU encoding con libx265
6-
# nvidia GPU NVIDIA con hevc_nvenc (--profile nvidia)
7-
# vaapi GPU Intel/AMD con hevc_vaapi (--profile vaapi)
8-
# watchd Demone periodico che ripete RUN ogni MEDIA_WATCH_INTERVAL sec
3+
# For local build/development (build from source), use:
4+
# docker compose -f docker-compose.build.yml up -d --build
95
#
10-
# Copia .env.example → .env e personalizza i path prima di avviare.
11-
# ---------------------------------------------------------------------------
6+
# Setup:
7+
# cp .env.example .env
8+
# edit MOVIES_ROOT / TV_ROOT / STAGING_ROOT / REPORT_ROOT
129

1310
x-common-env: &common-env
1411
MEDIA_MOVIES_DIR: /data/movies
@@ -39,22 +36,9 @@ x-common-volumes: &common-volumes
3936
- "${STAGING_ROOT:-../../staging}:/staging"
4037
- "${REPORT_ROOT:-../../reports}:/reports"
4138

42-
x-common-build: &common-build
43-
context: ../..
44-
dockerfile: Dockerfile
45-
args:
46-
PUID: "${PUID:-1000}"
47-
PGID: "${PGID:-1000}"
48-
TESSDATA_LANGS: "${TESSDATA_LANGS:-eng ita}"
49-
5039
services:
51-
52-
# --------------------------------------------------------------------------
53-
# Web UI + job manager — CPU encoding (libx265)
54-
# --------------------------------------------------------------------------
5540
mediashrinker:
56-
build: *common-build
57-
image: mediashrinker:local
41+
image: "${GHCR_IMAGE:-ghcr.io/lmerega/mediashrinker:latest}"
5842
container_name: mediashrinker
5943
restart: unless-stopped
6044
ports:
@@ -63,85 +47,4 @@ services:
6347
<<: *common-env
6448
MEDIA_ENCODER: "${MEDIA_ENCODER:-auto}"
6549
volumes: *common-volumes
66-
healthcheck:
67-
disable: false # usa il HEALTHCHECK del Dockerfile
6850

69-
# --------------------------------------------------------------------------
70-
# NVIDIA hevc_nvenc → docker compose --profile nvidia up -d mediashrinker-nvidia
71-
# Richiede NVIDIA Container Toolkit sul host.
72-
# --------------------------------------------------------------------------
73-
mediashrinker-nvidia:
74-
profiles: ["nvidia"]
75-
build: *common-build
76-
image: mediashrinker:local
77-
container_name: mediashrinker-nvidia
78-
restart: unless-stopped
79-
ports:
80-
- "${MEDIA_PORT:-8787}:8787"
81-
environment:
82-
<<: *common-env
83-
MEDIA_ENCODER: hevc_nvenc
84-
NVIDIA_VISIBLE_DEVICES: all
85-
NVIDIA_DRIVER_CAPABILITIES: compute,video,utility
86-
deploy:
87-
resources:
88-
reservations:
89-
devices:
90-
- driver: nvidia
91-
count: all
92-
capabilities: [gpu, video]
93-
volumes: *common-volumes
94-
95-
# --------------------------------------------------------------------------
96-
# Intel / AMD VAAPI → docker compose --profile vaapi up -d mediashrinker-vaapi
97-
# Richiede /dev/dri/renderD128 sul host (driver i915 o amdgpu).
98-
# --------------------------------------------------------------------------
99-
mediashrinker-vaapi:
100-
profiles: ["vaapi"]
101-
build: *common-build
102-
image: mediashrinker:local
103-
container_name: mediashrinker-vaapi
104-
restart: unless-stopped
105-
ports:
106-
- "${MEDIA_PORT:-8787}:8787"
107-
environment:
108-
<<: *common-env
109-
MEDIA_ENCODER: hevc_vaapi
110-
devices:
111-
- /dev/dri:/dev/dri
112-
volumes: *common-volumes
113-
114-
# --------------------------------------------------------------------------
115-
# Demone periodico (no web UI) → docker compose --profile watchd up -d mediashrinker-watchd
116-
# Esegue RUN ogni MEDIA_WATCH_INTERVAL secondi.
117-
# --------------------------------------------------------------------------
118-
mediashrinker-watchd:
119-
profiles: ["watchd"]
120-
build: *common-build
121-
image: mediashrinker:local
122-
container_name: mediashrinker-watchd
123-
restart: unless-stopped
124-
command: ["watchd"]
125-
environment:
126-
<<: *common-env
127-
MEDIA_ENCODER: "${MEDIA_ENCODER:-auto}"
128-
volumes: *common-volumes
129-
healthcheck:
130-
disable: true # nessuna web UI in modalità watchd
131-
132-
# --------------------------------------------------------------------------
133-
# Controllo hardware → docker compose --profile hwcheck run --rm mediashrinker-hwcheck
134-
# --------------------------------------------------------------------------
135-
mediashrinker-hwcheck:
136-
profiles: ["hwcheck"]
137-
build: *common-build
138-
image: mediashrinker:local
139-
container_name: mediashrinker-hwcheck
140-
command: ["hwcheck"]
141-
environment:
142-
<<: *common-env
143-
devices:
144-
- /dev/dri:/dev/dri
145-
volumes: *common-volumes
146-
healthcheck:
147-
disable: true

0 commit comments

Comments
 (0)