Metadata-Version: 2.4
Name: ogacai
Version: 0.2.1
Summary: Convierte videos en artículos de blog en Markdown mediante IA
Author-email: Retired64 <retired64.github@gmail.com>
License-Expression: MIT
Keywords: youtube,blog,cli,deepseek,subtitulos,markdown
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Text Processing :: Markup :: Markdown
Classifier: Topic :: Utilities
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.25
Requires-Dist: tomli>=2.0; python_version < "3.11"
Provides-Extra: dev
Requires-Dist: pytest>=7; extra == "dev"
Requires-Dist: ruff>=0.4; extra == "dev"
Requires-Dist: mypy>=1.8; extra == "dev"
Requires-Dist: build>=1.0; extra == "dev"
Requires-Dist: twine>=5.0; extra == "dev"
Provides-Extra: fetch
Requires-Dist: yt-dlp>=2024.1; extra == "fetch"
Provides-Extra: portada
Requires-Dist: pillow>=10.0; extra == "portada"
Requires-Dist: numpy>=1.24; extra == "portada"
Requires-Dist: cairosvg>=2.7; extra == "portada"
Dynamic: license-file

# ogacai

Convierte videos en artículos de blog mediante IA.

`Video → IA → Artículo`

`ogacai` automatiza la creación de un artículo estructurado en Markdown, listo para integrarse o publicarse en un blog, manteniendo la fidelidad al contenido original sin depender de un proceso manual de transcripción.

## Inicio rápido

**Requisitos:** Python 3.9 o superior.

**1. Instalación**

```bash
pip install ogacai

```

*(Opcional: Para descargar subtítulos directamente desde YouTube, instale la dependencia de obtención)*

```bash
pip install "ogacai[fetch]"

```

**2. Configuración de API (DeepSeek por defecto)**
Las credenciales pueden configurarse de forma persistente o mediante variables de entorno:

```bash
export DEEPSEEK_API_KEY="su-api-key"

```

**3. Ejecución**

```bash
# Descargar los subtítulos automáticos
ogacai fetch "https://youtu.be/ID" --salida-dir /tmp/output

# Generar el artículo validado y su portada
ogacai run /tmp/output/<video_id>.es.json3 --output-dir ./mi-blog

```

## Características principales

* **Procesamiento determinista:** Reconstruye el texto hablado y elimina anotaciones de audio (ej. `[música]`) sin depender de llamadas a APIs externas.


* **Múltiples proveedores de IA:** Soporte integrado para DeepSeek (predeterminado), Cloudflare Workers AI y Gemini.


* **Validación estructural:** Verifica automáticamente la integridad del front matter (`title`, `description`, `date`, `image`, `imageAlt`, `tags`) y el balance de los bloques de código.


* **Generación de OpenGraph:** Crea automáticamente la imagen de portada del artículo en formato PNG (desactivable con `--sin-portada`).


* **Inspección de limpieza:** Permite visualizar un diff exacto de las palabras descartadas durante el procesamiento mediante el subcomando `preview`.


* **Ejecución modular:** Cada etapa del pipeline puede ejecutarse de forma independiente para facilitar su integración o depuración.



## Arquitectura interna

El comando `run` coordina una serie de etapas independientes. Esta separación permite depurar el parseo de datos y calibrar la limpieza del texto sin consumir cuota de API.

`YouTube → subtítulos (.json3) → texto limpio → IA → Markdown validado`

Responsabilidades por etapa:

1. **fetch:** Descarga el archivo `.json3` de subtítulos automáticos vía `yt-dlp`, omitiendo la descarga del video.


2. **procesar:** Lee el `.json3`, reconstruye el texto, deduplica el solapamiento de los "rolling captions" y genera dos versiones en texto plano (`raw` y `clean`).


3. **generar:** Envía el texto limpio al proveedor de IA utilizando un system prompt estricto, el cual recibe texto y devuelve únicamente texto estructurado.


4. **validar:** Verifica la estructura del archivo generado.



## Interfaz de línea de comandos (CLI)

Puede consultar todas las opciones ejecutando `ogacai --help`.

| Comando | Función |
| --- | --- |
| `run` | Ejecuta el pipeline completo: procesar → generar → validar, escribiendo el archivo final y la portada.

 |
| `fetch` | Descarga el archivo `.json3` de subtítulos a partir de una URL de YouTube.

 |
| `procesar` | Convierte un archivo `.json3` en `transcripcion_raw.txt` y `transcripcion_clean.txt`.

 |
| `preview` | Procesa los datos en memoria y muestra las diferencias exactas eliminadas en la limpieza.

 |
| `generar` | Invoca al proveedor de IA proporcionando un archivo `.txt` limpio y devuelve el artículo.

 |
| `validar` | Valida estructuralmente un artículo Markdown generado previamente.

 |
| `config` | Administra la configuración persistente de la herramienta.

 |

## Configuración avanzada de proveedores

Las credenciales pueden definirse temporalmente mediante variables de entorno o de forma persistente utilizando el CLI. El comando `ogacai config show` muestra la configuración activa; por motivos de seguridad, las claves y tokens se enmascaran mostrando únicamente los últimos 4 caracteres.

**Elegir el proveedor y el modelo por defecto**

Sin `--proveedor`, `generar`/`run` usan el proveedor definido en `default_proveedor` (o `deepseek` si no está seteado). El modelo de cada proveedor también es configurable:

```bash
# Proveedor por defecto (persistente, evita pasar --proveedor cada vez)
ogacai config set default_proveedor gemini

# Modelo por proveedor (opcional; si no se setea, se usa el default del cliente)
ogacai config set deepseek.model deepseek-v4-flash
ogacai config set workers_ai.model "@cf/google/gemma-4-26b-a4b-it"
ogacai config set gemini.model gemini-3.5-flash-lite

# Override por corrida (sin tocar la config): el flag gana sobre config.toml
ogacai run <video> --proveedor workers-ai --model "@cf/google/gemma-4-26b-a4b-it"
```

**DeepSeek (Predeterminado)**

```bash
ogacai config set api_key "su-api-key"
# Alternativa: export DEEPSEEK_API_KEY="su-api-key"

```

**Cloudflare Workers AI**
Requiere dos credenciales. Para utilizarlo, configúrelo una vez como predeterminado (`ogacai config set default_proveedor workers-ai`) o asígnelo por corrida con `--proveedor workers-ai` al invocar `run` o `generar`.

```bash
ogacai config set workers_ai.account_id "su-account-id"
ogacai config set workers_ai.api_token "su-api-token"

```

**Gemini**
Para utilizarlo, configúrelo una vez como predeterminado (`ogacai config set default_proveedor gemini`) o asígnelo por corrida con `--proveedor gemini`. Puede especificar la versión del modelo a utilizar; si se omite, el sistema emplea `gemini-3.5-flash-lite` por defecto.

```bash
ogacai config set gemini.api_key "su-api-key"
ogacai config set gemini.model "gemini-3.5-flash-lite"

```

---

**Licencia:** MIT.
