# Instalación y Quickstart

Este documento explica las opciones de instalación y comandos recomendados para entornos CPU-only y entornos con GPU. Incluye instrucciones para Coqui TTS (local) y el uso del `config.toml` para Kokoro.

Requisitos mínimos
- Python 3.11 (recomendado para compatibilidad con Coqui TTS y dependencias).
- `ffmpeg` y `ffprobe` en PATH.

Instalación recomendada (CPU-only)

1) Crear virtualenv y activarlo:

```bash
python3.11 -m venv .venv311
source .venv311/bin/activate
python -m pip install --upgrade pip
```

2) Instalar PyTorch CPU explícito (recomendado):

```bash
python -m pip install torch --index-url https://download.pytorch.org/whl/cpu
```

3) Instalar el resto de dependencias (pinned):

```bash
python -m pip install -r requirements.txt
```

4) (Opcional) instalar dependencias del paquete editables:

```bash
python -m pip install -e .
```

Instalación para GPU

- Si dispones de GPU y quieres aprovecharla, instala la rueda de PyTorch adecuada para tu versión de CUDA siguiendo las instrucciones oficiales en https://pytorch.org/ y luego instala el resto de dependencias.

Coqui TTS (local)

- Coqui TTS permite ejecutar TTS localmente sin depender de un servicio externo.
- Ten en cuenta:
  - Algunos modelos son pesados (centenas de MB). Hay variantes optimizadas para CPU (p.ej. ~326 MB fp32).
  - La primera ejecución puede descargar modelos; para uso en CI descárgalos y cachea con anticipación.

Instalación:

```bash
# dentro del entorno virtual
python -m pip install -r whisper_project/requirements.txt
```

Uso del `config.toml`

- Coloca `config.toml` en la raíz con la sección `[kokoro]`. Usa `config.toml.example` como plantilla.
- Precedencia por defecto: CLI > `config.toml` > ENV (modo `override-env`).

Comandos de ejemplo

- Ejecutar pipeline real con traducción local:

```bash
.venv311/bin/python -m whisper_project.main --video output/dailyrutines/dailyrutines.mp4 --translate-method local
```

- Ejecutar smoke test (fixture corto):

```bash
.venv311/bin/python -m whisper_project.main --video tests/fixtures/smoke_fixture.mp4 --translate-method none --dry-run
```

- Forzar instalación CPU-only de PyTorch y dependencies en una sola línea:

```bash
python -m pip install --index-url https://download.pytorch.org/whl/cpu -r requirements.txt
```

Pinning y reproducibilidad

- `requirements.txt` (raíz) y `whisper_project/requirements.txt` contienen pins orientados a CPU. Revisa y actualiza si tu entorno requiere otras variantes.
- Para CI reproducible, genera un lockfile con `pip-compile` o fija versiones a través de `pip freeze` en tu pipeline.

Notas y recomendaciones

- Para entornos con recursos limitados usa modelos `small` o `base`.
- Si necesitas ayuda para crear un Dockerfile o un job de CI (GitHub Actions) para pre-cachear modelos, lo puedo generar.

## Instalación editable (pip install -e .) usando `pyproject.toml`

Este repositorio incluye un `pyproject.toml` para soportar instalaciones en modo editable (`pip install -e .`).
La instalación editable facilita el desarrollo (cambios en el código se reflejan sin reinstalar).

Recomendaciones y ejemplos (CPU-first)

1) Activa tu entorno virtual (ejemplo `.venv311`) y actualiza pip:

```bash
source .venv311/bin/activate
python -m pip install --upgrade pip
```

2) Instala primero la rueda CPU de PyTorch (recomendado):

```bash
python -m pip install torch --index-url https://download.pytorch.org/whl/cpu
```

3) Instala el paquete en modo editable con el extra `cpu` (y opcionalmente `tts`):

```bash
python -m pip install -e .[cpu]
# o para incluir soporte TTS local:
python -m pip install -e .[cpu,tts]
```

Notas importantes
- `pip install -e .[cpu]` usará el `pyproject.toml` para leer metadatos y extras definidos allí.
- Si prefieres instalar PyTorch y otras dependencias con un único comando que fuerce las ruedas CPU, puedes usar:

```bash
python -m pip install --index-url https://download.pytorch.org/whl/cpu -e .[cpu,tts]
```

- Asegúrate de tener `setuptools` y `wheel` actualizados (el `pyproject.toml` ya declara `setuptools` como build-system). Si tienes problemas al instalar en modo editable, ejecuta:

```bash
python -m pip install --upgrade setuptools wheel
```

- El extra `tts` instala dependencias opcionales para Coqui TTS y reproducción (puede descargar modelos a la primera ejecución).

- Recuerda no subir `config.toml` con credenciales reales; usa `config.toml.example`.


## Script de instalación automática: `scripts/auto_install.sh`

Se incluye un script helper en `scripts/auto_install.sh` para automatizar la creación del virtualenv e instalación de dependencias con opciones CPU/GPU y soporte para TTS local o uso de Kokoro remoto.

Propósito
- Simplificar la puesta en marcha del proyecto en entornos de desarrollo.
- Permitir elegir instalación CPU-only (recomendado) o GPU, y decidir si instalar dependencias para Coqui TTS local.

Ubicación
- `scripts/auto_install.sh` (hacer ejecutable con `chmod +x scripts/auto_install.sh`).

Uso (resumen)

```bash
# instalar en venv por defecto (.venv311), CPU y soporte TTS local:
./scripts/auto_install.sh --cpu --local-tts

# instalar en venv personalizado, GPU y usar Kokoro remoto (no instala TTS extra):
./scripts/auto_install.sh --venv .venv_gpu --gpu --kokoro
```

Opciones principales
- `--venv PATH` : ruta del virtualenv a crear/usar (default: `.venv311`).
- `--cpu` : instalar la build CPU de PyTorch (usa índice CPU de PyTorch).
- `--gpu` : intentar instalar PyTorch (selección de rueda GPU queda a cargo de pip/usuario si requiere CUDA específica).
- `--torch-version V` : opción para forzar una versión concreta de `torch`.
- `--local-tts` : instala extras para Coqui TTS (`tts` extra) y soporte de reproducción.
- `--kokoro` : indica que usarás Kokoro remoto (no fuerza instalación de TTS local).
- `--no-editable` : instala dependencias sin modo editable (usa `requirements.txt`).

Qué hace internamente
- Crea (si no existe) y activa el virtualenv.
- Actualiza `pip`, `setuptools` y `wheel`.
- Instala `torch` según la opción `--cpu`/`--gpu` y la `--torch-version` si se proporciona.
- Instala el paquete en modo editable (`pip install -e .`) y añade extras `cpu` y/o `tts` según flags.
- Si existe `config.toml.example` y no hay `config.toml`, copia el ejemplo a `config.toml` para que lo rellenes con tus credenciales.

Ejemplos

- Instalación mínima CPU y editable (sin TTS):

```bash
./scripts/auto_install.sh --cpu
```

- Instalación CPU y extras para Coqui TTS local:

```bash
./scripts/auto_install.sh --cpu --local-tts
```

- Instalación editable en un venv personalizado e instalar PyTorch GPU (nota: el script no elige la rueda CUDA exacta por ti):

```bash
./scripts/auto_install.sh --venv .venv_gpu --gpu
```

Notas y recomendaciones
- Recomendado: para evitar problemas con ruedas de PyTorch, instala primero la rueda CPU/GPU apropiada siguiendo https://pytorch.org/ y luego ejecuta `--cpu`/`--gpu` sin forzar versión en el script.
- Si necesitas reproducibilidad en CI, considera usar el comando combinado que fuerza el índice CPU para todo:

```bash
python -m pip install --index-url https://download.pytorch.org/whl/cpu -e .[cpu,tts]
```

- Si se detectan errores de compilación de dependencias nativas (p.ej. `av`, `soundfile`), instala las dependencias de sistema necesarias (headers de libav, libsndfile, etc.) antes de repetir la instalación.

- El script no elimina ni borra artefactos; solo prepara el entorno. Para ejecutar la pipeline usa la CLI:

```bash
.venv311/bin/python -m whisper_project.main --video path/to/video.mp4 --translate-method local
```

Soporte y troubleshooting
- Si la instalación falla en una dependencia binaria, pega la salida de error y te indico el paquete del sistema que falta (por ejemplo `libsndfile1-dev`, `libavcodec-dev`, etc.).
- Si el script no encuentra `python3.11`, intenta `python3` o instala Python 3.11 en el sistema.

Fin de la documentación del script.
