# Dev-Env — reprodukovatelné Python prostředí pro vzdělávání a výzkum

Tento adresář obsahuje kompletní nastavení pro izolované Python vývojové prostředí
se čtyřmi schopnostními pilíři: generování videa (Wan2.1), řeč-zk text (faster-whisper),
text-řeč (Kokoro-82M) a vícehlasový podcast (Dia-1.6B).

## Soubory

| Soubor | Účel |
|--------|------|
| `requirements.txt` | Přesně pinované balíčky se SHA256 hashy (placeholders — vygenerovat před prvním použitím) |
| `setup_env.sh` | Skript pro zřízení prostředí (GPU kontrola, místo na disku, venv, instalace, stažení modelů) |
| `starter/web/fastapi_app.py` | Minimální FastAPI aplikace (127.0.0.1, API klíč, CORS localhost, rate limiting, limit těla) |
| `starter/desktop/tkinter_app.py` | Minimální Tkinter GUI |
| `starter/scripts/ai_ml_starter.py` | torch/transformers inference + trénovací smyčka |
| `starter/video/wan21_starter.py` | Wan2.1 1.3B text-to-video (diffusers) |
| `starter/stt/whisper_starter.py` | faster-whisper small STT (lokální, offline) |
| `starter/tts/kokoro_starter.py` | Kokoro-82M TTS (lokální, offline) |
| `starter/podcast/dia_starter.py` | Dia-1.6B multi-speaker TTS (lokální, offline) |

## Požadavky

- Python 3.11+
- Přibližně 30 GB volného místa na disku
- GPU s minimálně ~8 GB VRAM pro Wan2.1 a Dia-1.6B (CPU-only pro faster-whisper, Kokoro, ai_ml_starter)
- `nvidia-smi` pro detekci GPU (volitelné)

## Rychlý start

```bash
cd dev-env
# 1. Vygenerovat SHA256 hashy (vyžaduje síťový přístup k PyPI)
./setup_env.sh --generate-hashes
# requirements.txt nyní obsahuje skutečné hashy — aktualizujte je

# 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
```

## Bezpečnostní opatření

- **Žádné spuštění jako root/sudo** — skript se ukončí, pokud je detekován root.
- **--require-hashes** — všechny balíčky jsou instalovány s ověřováním SHA256.
- **Pinované revize modelů** — všechny stáhnutí z Hugging Face používají konkrétní commit SHA.
- **Žádný `trust_remote_code=True`** — všude zakázáno.
- **`weights_only=True`** — všechny `torch.load` volání používají bezpečné načítání vah.
- **`subprocess.run(shell=False)`** — ffmpeg a jiné volání používají přímý argv, nikoli shell.
- **API klíč z env** — `DEV_ENV_API_KEY` pochází výhradně z proměnné prostředí, není v kódu.
- **`HF_TOKEN` z env** — pouze z proměnné prostředí, žádné výchozí hodnoty.
- **Isolovaný venv** — všechny balíčky jsou nainstalovány do lokálního virtuálního prostředí.

## 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 |

## Poznámky k hashům

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í vám vypočítat
jejich hashy pomocí `pip hash`. Skutečné hashy pak nahraďte placeholders v souboru.

## Licence

Všechny modely a balíčky používají permissivní licence (MIT, Apache 2.0). Žádné placené API
ani cloudové služby nejsou vyžadovány.

Dopad: bezpečnost / rozhraní / persistence / kompatibilita
- Bezpečnost: --require-hashes + SHA256, weights_only=True, žádný trust_remote_code, shell=False, API key auth (127.0.0.1), CORS localhost only, rate limiting, limit těla, HF_TOKEN z env pouze, .env je v root .gitignore, never root
- Rozhraní: FastAPI na 127.0.0.1:8080, Tkinter GUI okno, CLI skripty s argumenty
- Persistence: venv v dev-env/.venv, modelové váhy v dev-env/models/ (konfigurovatelné přes DEV_ENV_MODELS_DIR), .env ignorováno gitem
- Kompatibilita: Python 3.11+, CPU-safe defaulty, GPU volitelné, ruff kompatibilní styl (line-length 100)
