media-studio
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
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo recent community issues