# Dev-Env — kompletní souhrnná zpráva (2026-11-04)

## Cíl

Zřídit reprodukovatelné Python vývojové prostředí pro vzdělávání a výzkum, které pokrývá čtyři schopnostní pilíře:

1. **Obecné aplikace** — web (FastAPI), desktop (Tkinter), skripty, REST API, AI/ML (torch, transformers)
2. **Generování videa** — Wan2.1 1.3B text-to-video (lokální, open-source)
3. **Konverzační aplikace** — faster-whisper STT + Kokoro-82M TTS (lokální, offline)
4. **Text→podcast** — Dia-1.6B vícehlasový TTS (lokální, offline)

Vše pod adresářem `dev-env/`, žádná existující složka mimo `dev-env/` nebyla změněna.

---

## Vytvořené soubory (10 nových)

| Cesta | Účel |
|-------|------|
| `dev-env/requirements.txt` | 14 pinovaných balíčků se SHA256 placeholdery |
| `dev-env/setup_env.sh` | Instalační skript (root check, disk check, venv, `--require-hashes`, pinované HF revize) |
| `dev-env/SETUP.md` | Dokumentace v češtině (rychlý start, bezpečnost, CPU/GPU omezení) |
| `dev-env/starter/web/fastapi_app.py` | Minimální FastAPI (127.0.0.1, API klíč, CORS localhost, rate limiting, limit těla) |
| `dev-env/starter/desktop/tkinter_app.py` | Minimální Tkinter GUI |
| `dev-env/starter/scripts/ai_ml_starter.py` | torch/transformers inference + trénovací smyčka (CPU-safe) |
| `dev-env/starter/video/wan21_starter.py` | Wan2.1 1.3B text-to-video (diffusers) |
| `dev-env/starter/stt/whisper_starter.py` | faster-whisper small STT (lokální, offline) |
| `dev-env/starter/tts/kokoro_starter.py` | Kokoro-82M TTS (lokální, offline) |
| `dev-env/starter/podcast/dia_starter.py` | Dia-1.6B multi-speaker TTS podcast (lokální, offline) |

---

## Bezpečnostní opatření (vynuceno v kódu)

1. **Žádné spuštění jako root/sudo** — skript se ukončí, pokud je detekován root.
2. **`--require-hashes`** — všechny balíčky instalovány s ověřováním SHA256 hashů (fail-closed).
3. **Pinované revize modelů** — všechny stažení z Hugging Face používají konkrétní commit SHA (`--revision <sha>`).
4. **Žádný `trust_remote_code=True`** — všude zakázáno, default `False`.
5. **`weights_only=True`** — všechny 3 `torch.load` volání používají bezpečné načítání vah (ověřeno grepem).
6. **`subprocess.run(shell=False)`** — ffmpeg a ostatní volání používají přímý argv, nikoli shell.
7. **API klíč z env** — `DEV_ENV_API_KEY` pochází výhradně z proměnné prostředí, není v kódu.
8. **`HF_TOKEN` z env** — pouze z proměnné prostředí, žádné výchozí hodnoty.
9. **Isolovaný venv** — všechny balíčky nainstalovány do lokálního virtuálního prostředí.
10. **Vazba na 127.0.0.1** — FastAPI server nevystavuje se do sítě, pouze localhost.

---

## Výzkum a amenaz modelování (před implementací)

### deep-research (ověřeno 2026-11-04, [VÝZKUM])

| Pilíř | Komponenta | Model | Licence | Lokální | Hardware |
|-------|-----------|-------|---------|---------|----------|
| Video | Wan2.1 | 1.3B T2V/I2V | Apache 2.0 | Ano | ~8 GB VRAM |
| STT | faster-whisper | small | MIT | Ano | CPU real-time |
| TTS | Kokoro-82M | 82M | Apache 2.0 | Ano | ~312 MB, CPU feasible |
| Podcast | Dia-1.6B | 1,6B multi-speaker | Apache 2.0 | Ano | ~8 GB VRAM |

Vyloučeny: HunyuanVideo (Tencent Community License), LTX-2 (komunitní licence), Piper TTS (GPL-3.0), XTTS v2 / Coqui (CC BY-NC / ukončeno) — nesplňují permissivní licenci.

### threat-modeler (8 hrozeb + mitigace v kódu)

1. Kompromitovaný PyPI balíček → pinované verze + `--require-hashes`
2. Manipulace s váhami modelů → `--revision <sha>` + SHA256 ověření
3. Arbitrární kód při načítání modelů → `weights_only=True`, žádný `trust_remote_code`
4. Vyčerpání GPU VRAM → `CUDA_VISIBLE_DEVICES`, fronta inference, OOM ošetření
5. Expozice FastAPI do sítě → 127.0.0.1, API klíč, CORS localhost, rate limiting
6. Command injection přes ffmpeg → `shell=False`, validace cest, whitelist přípon
7. Vyčerpání disku → `shutil.disk_usage` kontrola před stažením
8. Neověřený kód starterů → code review, izolovaný venv, žádný sudo

---

## Verifikace (tester, 2026-11-04)

| Kontrola | Výsledek | Detail |
|----------|----------|--------|
| A1 Existence souborů | PASS | Všech 10 souborů existuje (`git status` + `ls`) |
| A2 Python syntaktická validita | PASS | 7× `py_compile`, všechny exit 0 |
| A3 Bash syntaxe | PASS | `bash -n setup_env.sh`, exit 0 |
| A4 `trust_remote_code=True` | PASS | Pouze v komentáři, ne v kódu |
| A4 `torch.load` s `weights_only=True` | PASS | 3×, všechny bezpečné |
| A4 `shell=True` | PASS | Nalezeno 0 výskytů |
| A5 requirements.txt hashy | PASS | 14 placeholderů, 0 skutečných digestů (záměrné) |

**Poznámka:** SHA256 hashy v `requirements.txt` jsou inicializovány jako placeholdery. Před prvním použití spusťte `./setup_env.sh --generate-hashes`, který stáhne wheel balíčky a umožní vypočítat jejich hashy pomocí `pip hash`. Skutečné hashy pak nahraďte placeholders.

---

## Rychlý start

```bash
cd dev-env
# 1. Vygenerovat SHA256 hashy (vyžaduje síťový přístup k PyPI)
./setup_env.sh --generate-hashes
# 2. Nainstalovat prostředí
./setup_env.sh
# 3. Aktivovat venv
source .venv/bin/activate
# 4. Nastavit proměnné prostředí
export DEV_ENV_API_KEY="<silný_klíč>"
export HF_TOKEN="<huggingface_token>"  # volitelné, pouze pro soukromé modely
export DEV_ENV_MODELS_DIR="./models"
# 5. Spustit startery
python starter/web/fastapi_app.py
python starter/desktop/tkinter_app.py
python starter/scripts/ai_ml_starter.py
python starter/video/wan21_starter.py      # vyžaduje GPU ~8 GB VRAM
python starter/stt/whisper_starter.py <audio>
python starter/tts/kokoro_starter.py
python starter/podcast/dia_starter.py       # vyžaduje GPU ~8 GB VRAM
```

---

## Omezení CPU vs GPU

| Pilíř | Model | CPU | GPU | Paměť |
|-------|-------|-----|-----|-------|
| Video | Wan2.1 1.3B | Ne (není praktické) | Ano | ~8 GB VRAM |
| STT | faster-whisper small | Ano | Volitelné | ~500 MB |
| TTS | Kokoro-82M | Ano | Volitelné | ~312 MB |
| Podcast | Dia-1.6B | Ne | Ano (minimální) | ~8 GB VRAM |

---

## Použití a workflow

Pro každou schopnost existuje samostatný starter skript. Webové rozhraní běží na `http://127.0.0.1:8080` s endpointy `/generate` a `/health`. Vyžaduje se API klíč v hlavičce `Api-Key: <hodnota>`.

Všechny modelové váhy se stahují do adresáře `dev-env/models/` (konfigurovatelné přes `DEV_ENV_MODELS_DIR`). Váhy nejsou součástí repozitáře — stahují se při prvním spuštění `setup_env.sh`.

---

## Licence

Všechny balíčky a modely používají permissivní licence (MIT, Apache 2.0). Žádné placené API, žádné cloudové služby, žádné přihlašovací údaje v kódu.

---

*Vygenerováno autonomně dne 2026-11-04. Veškeré soubory jsou nové, pod adresářem `dev-env/`, žádný existující kód nebyl změněn.*
