# Optional local Docker image for the reverse-SynthID pixel scorer. # # Build from the repository root: # docker build -f Dockerfile.synthid -t watermarks-remover-synthid-scorer . # # The upstream code is fetched from source at build time and is NOT # redistributed by this repository. Users must comply with the upstream # project's non-commercial Research License. # # Vendored fork hardening: # - base image pinned by digest (no moving tag drift) # - upstream checkout pinned to a commit SHA (no moving branch) # - deps pinned exactly in requirements-synthid-scorer.txt # - pip itself pinned (no unpinned bootstrap step) # - runs as an unprivileged user (a parser bug in a crafted image can no # longer write files as root inside the container) # Pinned upstream commit (2026-07-17). Keep in sync with setup_synthid.sh. ARG REVERSE_SYNTHID_REF=b11083676fd3ee3ff97ce9d03c0e409e46905902 # python:3.11-slim linux/amd64 digest. FROM python:3.14-slim@sha256:ce40764625a4ff50df3548277632e7f96c4e77fe75fa848aae9885476e7df5a4 ARG REVERSE_SYNTHID_REF RUN apt-get update \ && apt-get install -y --no-install-recommends \ git \ libgl1 \ libglib2.0-0 \ passwd \ && rm -rf /var/lib/apt/lists/* RUN git clone --depth 1 --filter=blob:none --sparse \ https://github.com/aloshdenny/reverse-SynthID.git /opt/reverse-synthid \ && cd /opt/reverse-synthid \ && git fetch --depth 1 origin "${REVERSE_SYNTHID_REF}" \ && git checkout --detach "${REVERSE_SYNTHID_REF}" \ && git sparse-checkout set --no-cone \ '/src/' \ '/artifacts/spectral_codebook_v4.npz' \ '/requirements.txt' \ '/LICENSE' \ '/README.md' COPY skills/remove-ai-marks/scripts/requirements-synthid-scorer.txt /app/requirements-synthid-scorer.txt COPY skills/remove-ai-marks/scripts/score_synthid.py /app/score_synthid.py RUN python3 -m pip install --no-cache-dir "pip==26.2.1" \ && python3 -m pip install --no-cache-dir -r /app/requirements-synthid-scorer.txt # Unprivileged runtime user. The scorer only reads input files and writes to # stdout, so nothing under /opt, /app, or the mounted data dir needs root. RUN useradd --create-home --uid 10001 --shell /usr/sbin/nologin scorer USER scorer ENV REVERSE_SYNTHID_DIR=/opt/reverse-synthid \ HOME=/home/scorer \ PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 WORKDIR /app ENTRYPOINT ["python3", "/app/score_synthid.py"]