Repository navigation
Expand file tree
/
Copy pathcompose.yaml
More file actions
146 lines (138 loc) · 4.7 KB
/
Copy pathcompose.yaml
File metadata and controls
146 lines (138 loc) · 4.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Whole-infra bring-up for watermark-remover.
#
# docker compose up --build -d # core HTTP service only
# docker compose --profile harness up --build -d # + markllm / markdiffusion harnesses
# docker compose --profile heavy up --build -d # + ctrlregen / synthid (local builds)
#
# The skill and any web app talk to the wr-core service at http://127.0.0.1:8765
# (loopback-only host mapping). The heavy/harness images are one-shot CLIs:
# `up` starts them with `--help` to confirm the image, and real jobs run via
# `docker compose run`, e.g.:
# docker compose run --rm wr-ctrlregen /data/shot.png -o /data/out.png
#
# ctrlregen and synthid bake in upstream code that is not publicly
# redistributable (all-rights-reserved / non-commercial Research License), so
# they build from source locally and are never pushed to GHCR.
name: watermark-remover
services:
wr-core:
build:
context: .
dockerfile: Dockerfile
image: ghcr.io/pymodel/watermark-remover:latest
ports:
- "127.0.0.1:8765:8765"
environment:
# Empty by default (no auth). Set to require `Authorization: Bearer <key>`.
WATERMARKS_SERVER_API_KEY: ${WATERMARKS_SERVER_API_KEY:-}
# Optional Gemini API key. The vendor SynthID-text detector is
# currently disabled and this key enables nothing (see .env.example).
WATERMARKS_GEMINI_API_KEY: ${WATERMARKS_GEMINI_API_KEY:-}
WATERMARKS_GEMINI_MODEL: ${WATERMARKS_GEMINI_MODEL:-}
# Optional SynthID image scorer sidecar (heavy profile).
WATERMARKS_SYNTHID_SCORER_URL: ${WATERMARKS_SYNTHID_SCORER_URL:-}
WATERMARKS_SYNTHID_SCORER_API_KEY: ${WATERMARKS_SYNTHID_SCORER_API_KEY:-}
read_only: true
tmpfs:
- /tmp
init: true
user: "10001:10001"
restart: unless-stopped
wr-markllm:
profiles: [harness]
build:
context: .
dockerfile: Dockerfile.markllm
image: ghcr.io/pymodel/watermark-remover:markllm-latest
# One-shot CLI: `up` just confirms the image; run real jobs with
# `docker compose run --rm wr-markllm detect /data/wm.txt --scheme kgw`.
command: ["--help"]
read_only: true
tmpfs:
- /tmp
init: true
user: "10001:10001"
environment:
HF_TOKEN: ${HF_TOKEN:-}
HF_HOME: /home/markllm/.cache/huggingface
volumes:
- markllm-cache:/home/markllm/.cache/huggingface
wr-markdiffusion:
profiles: [harness]
build:
context: .
dockerfile: Dockerfile.markdiffusion
image: ghcr.io/pymodel/watermark-remover:markdiffusion-latest
command: ["--help"]
read_only: true
tmpfs:
- /tmp
init: true
user: "10001:10001"
environment:
HF_TOKEN: ${HF_TOKEN:-}
HF_HOME: /home/markdiffusion/.cache/huggingface
volumes:
- markdiffusion-cache:/home/markdiffusion/.cache/huggingface
wr-ctrlregen:
profiles: [heavy]
build:
context: .
dockerfile: Dockerfile.ctrlregen
# Local-only tag: upstream `noai-watermark` ships no LICENSE (all-rights-
# reserved), so this image is never published.
image: watermark-remover-ctrlregen:local
command: ["--help"]
read_only: true
tmpfs:
- /tmp
init: true
user: "10001:10001"
environment:
HF_TOKEN: ${HF_TOKEN:-}
NOAI_WATERMARK_DIR: /opt/noai-watermark
volumes:
- ctrlregen-cache:/home/remover/.cache/huggingface
wr-synthid:
profiles: [heavy]
build:
context: .
dockerfile: Dockerfile.synthid
# Local-only tag: upstream `reverse-SynthID` is under a non-commercial
# Research License, so this image is never published.
image: watermark-remover-synthid-scorer:local
command: ["--help"]
read_only: true
tmpfs:
- /tmp
init: true
user: "10001:10001"
volumes:
- synthid-cache:/home/scorer/.cache/huggingface
# HTTP SynthID scorer sidecar: lets wr-core score images before/after
# cleaning without bundling the non-commercial reverse-SynthID code in the
# published core image. Reach it via WATERMARKS_SYNTHID_SCORER_URL on
# wr-core (see .env.example) and require the same bearer key on both sides.
wr-synthid-score:
profiles: [heavy]
build:
context: .
dockerfile: Dockerfile.synthid
image: watermark-remover-synthid-scorer:local
entrypoint: ["python3"]
command: ["/app/synthid_score_server.py", "--host", "0.0.0.0", "--port", "8766"]
read_only: true
tmpfs:
- /tmp
init: true
user: "10001:10001"
environment:
WATERMARKS_SYNTHID_SCORER_API_KEY: ${WATERMARKS_SYNTHID_SCORER_API_KEY:-}
REVERSE_SYNTHID_DIR: /opt/reverse-synthid
volumes:
- synthid-cache:/home/scorer/.cache/huggingface
volumes:
markllm-cache:
markdiffusion-cache:
ctrlregen-cache:
synthid-cache: