# Sprint 6I-B — lokale Apple-Medienruntime

## Verbindliche V4-Baseline

- Laufzeit-Artefakt: `/home/agent/.hermes/assets/Gesundheit/reports/health_dashboard_v4.html`
- Algorithmus: SHA-256
- Baseline: `798d11f191b402c556ec9233f50f5622d7f849022ff301cb4336ef2556e5f3a8`
- Der ältere Wert `012f39afefa97dc7a310c52bd2151c18d45f533ce42fda96c334309574eddb6a` lässt sich keinem der sieben aktuellen V4-benannten Artefakte und keinem der sieben historischen V4-Git-Blobs zuordnen. Er ist daher keine reproduzierbare Baseline. Maßgeblich ist der explizite V4-Servicepfad oben.
- `git diff d666b9a4abb54c5adcb378a22e09e007f09f0d47..500fc56b5f3cf27413ff2d449279bef3bad191e0 -- <V4-Pfade>` ist leer. Sprint 6I-B vergleicht vor und nach dem Deployment ausschließlich den verbindlichen Laufzeitpfad oben.

## Reproduzierbare private Runtime

Python-Pakete stehen in `deploy/requirements-health-media.txt` und werden ausschließlich in der privaten Hermes-Venv installiert.

- Python 3.11.15
- Pillow 12.2.0
- pillow-heif 1.4.0
- vom pillow-heif-Wheel geladene libheif 1.23.0
- lokaler HEIF-Decoder: libde265 1.1.0
- System-FFmpeg/ffprobe 6.1.1 (Ubuntu-Paket 7:6.1.1-3ubuntu5)

Dashboardserver und Action-Worker führen beim Start echte synthetische HEIF- und HEVC-Decode-Selbsttests aus und stoppen fail-closed. Technische Decoderprovenienz wird ohne Pfade, EXIF oder GPS in den Mediendatensätzen gespeichert.

Installation:

```bash
uv pip install --python /home/agent/.hermes/hermes-agent/venv/bin/python3 -r deploy/requirements-health-media.txt
```

## Festgelegte Limits

### Bilder

- Original: maximal 20 MiB
- maximal 40.000.000 Pixel
- maximal 16.000 Pixel je Seite
- maximal vier Frames; nur das Primärbild wird als Vorschau genutzt
- maximal vier Bilder je Capture-Eintrag
- Decode-Timeout: 20 Sekunden
- Child-Prozess: 768 MiB Adressraum, 128 MiB Dateiausgabe, 18 CPU-Sekunden
- Browserderivat: JPEG, maximal 1.600 × 1.600, ohne EXIF/GPS/XMP

### Videos

- Original: maximal 64 MiB
- Dauer: maximal 30 Sekunden
- Auflösung: maximal 3.840 × 2.160
- Framerate: maximal 60 fps
- maximal 1.800 Frames
- maximal ein Video- und optional ein AAC-Audiostream; keine weiteren Streams
- ausschließlich HEVC/H.265 in lokal geprüftem MOV- oder MP4-BMFF-Container
- ffprobe-Timeout: 15 Sekunden
- Poster-Timeout: 30 Sekunden
- H.264-Proxy-Timeout: 120 Sekunden
- ffmpeg/ffprobe erhalten feste Argumentlisten und `-protocol_whitelist file,pipe`; keine Shell-Interpolation

## Datenschutz- und Reviewregeln

- Original unverändert, SHA-256-stabil und Modus `0600`; private Verzeichnisse `0700`.
- Vorschauen und Proxys enthalten keine übernommenen Medienmetadaten.
- EXIF-/QuickTime-Zeitstempel bleiben unbestätigte technische Hinweise. Das vom Nutzer gewählte Gesundheitsdatum ist autoritativ.
- Keine automatische Live-Photo-Paarung. Einzelne HEIC-/MOV-Dateien bleiben unabhängige Medien.
- Symptommedien werden nicht medizinisch interpretiert und nicht OCR-verarbeitet.
- Dokumentbilder werden ausschließlich über das lokal normalisierte Bildderivat OCR-verarbeitet; Video erhält kein OCR.
- Medien beginnen mit Status `unverified`; keine automatische medizinische Freigabe.
