Skip to main content
Glama
README.md
# dsh-plugin-media-studio — edición de video con ffmpeg para DeepSeek Harness

Plugin MCP local para **probar, convertir, recortar, hacer clips verticales, miniaturas y quemar subtítulos** con el **ffmpeg de tu máquina**. Rutas permitidas, nada de sobrescribir originales, auditoría y modo read-only.

[English](README.en.md) · [Cómo funciona](docs/COMO-FUNCIONA.md) · MIT

## Herramientas (7)

| Tool | Qué hace |
|---|---|
| `mcp__media__status` | Versiones de ffmpeg/ffprobe, rutas permitidas, salida y modo. |
| `mcp__media__probe` | Duración, formato, codecs, resolución y fps. |
| `mcp__media__convert` | Convierte a `mp4`, `webm` o `gif` (calidad low/medium/high). |
| `mcp__media__trim` | Recorte rápido por copia o preciso con re-encode. |
| `mcp__media__vertical` | Clip 1080x1920 para Shorts/Reels/TikTok (`crop` o `pad`). |
| `mcp__media__thumbnail` | Miniatura jpg en un tiempo dado (devuelve la imagen). |
| `mcp__media__burn_subtitles` | Quema un `.srt`/`.vtt` sobre el video. |

## Requisitos

- **ffmpeg y ffprobe** en el PATH (o `ffmpegPath`/`ffprobePath` en la config).
  En Windows: `winget install Gyan.FFmpeg` (incluye ambos).
- Node ≥ 20 (lo aporta el harness).

## Configuración

Archivo: `<DSH_HOME>\media-studio\config.json` (el `postinstall` lo crea con
`allowedPaths` = tu perfil).

```json
{
  "allowedPaths": ["C:\\Users\\tu-usuario"],
  "ffmpegPath": "",
  "ffprobePath": "",
  "note": "ffmpegPath/ffprobePath vacíos usan PATH."
}
```

- `allowedPaths`: carpetas desde las que se puede leer y escribir. Las salidas
  por defecto van a `<DSH_HOME>\cache\media-studio`.
- Variables de entorno opcionales: `DSH_FFMPEG_PATH`, `DSH_FFPROBE_PATH`.

## Instalación

Desde **DSH → Settings → Plugins** instala
`github:thegabopacheco-sudo/dsh-plugin-media-studio` y permite el script de
instalación.

CLI:

```
dsh plugin --profile <perfil> add github:thegabopacheco-sudo/dsh-plugin-media-studio
```

El `postinstall` copia el runtime a `<DSH_HOME>\plugins\media-studio` y crea la
config base.

## Ejemplos de pedidos

- «Analiza este video y dime duración y resolución.»
- «Recorta del minuto 1:20 al 1:45.»
- «Hazme un vertical 9:16 para Shorts.»
- «Sácame una miniatura en el segundo 5.»
- «Quémale estos subtítulos y guárdalo como mp4.»
- «Pásalo a gif de 480 px.»

## Seguridad

- **Rutas permitidas** (`allowedPaths`): no lee ni escribe fuera de ellas.
- **Nunca sobrescribe la entrada**; si el destino existe, crea un nombre único.
- **Modo read-only** (`DSH_MEDIA_MODE=read-only`): solo `status`/`probe`.
- **Límite** de 6 operaciones pesadas por minuto.
- **Auditoría** en `<DSH_HOME>\cache\media-studio\audit.jsonl`.
- Sin comandos arbitrarios: los args de ffmpeg se construyen desde parámetros
  validados (enums, números y tiempos).

## Variables de entorno

| Variable | Uso |
|---|---|
| `DSH_MEDIA_MODE` | `read-only` desactiva conversiones. |
| `DSH_FFMPEG_PATH` / `DSH_FFPROBE_PATH` | Binarios alternativos. |
| `DSH_MEDIA_SKIP_POSTINSTALL` | `1` omite el despliegue. |

## Solución de problemas

- **“no se pudo ejecutar ffmpeg”**: instala ffmpeg, verifica `ffmpeg -version` o
  define `DSH_FFMPEG_PATH`.
- **“ruta no permitida”**: agrega la carpeta a `allowedPaths`.
- **Subtítulos quemados fallan**: usa `.srt`/`.vtt` UTF-8; el filtro escapa
  rutas de Windows automáticamente.
- **Permiso de scripts en la instalación**: aprueba el `postinstall`; si el
  cartel se repite, `allowBuilds: true` en `pnpm-workspace.yaml`.

## Desarrollo

```powershell
npm install
npm run build:bundle
cd test; npm install; node connect-test.mjs   # genera un video con ffmpeg
```

## Licencia

MIT © thegabopacheco-sudo