YouTube Tools
Extensión de yt-dlp-mcp para que un modelo pueda ver un video, no sólo leerlo: miniaturas, cuadrículas cronológicas que recorren un tramo completo y fotogramas puntuales como imágenes, cruzados con la transcripción, más transcripción local con Whisper large-v3. La uso para investigar la competencia de mi canal, Drayten.
Antes
Para decidir temas y miniaturas de Drayten necesitaba revisar qué publica la competencia: títulos, miniaturas y contenido de los videos.
Qué había que resolver
yt-dlp-mcp ya resolvía metadatos y subtítulos, pero el modelo no veía las miniaturas ni lo que aparece en pantalla: gráficos, slides, código o texto sobreimpreso. Si el narrador decía "acá ven el gráfico", la IA no podía verlo, y los videos sin subtítulos quedaban afuera.
Qué hace.
Las capacidades principales del sistema.
Miniaturas como imágenes
La tool devuelve un bloque de texto con la identificación y bloques de imagen MCP, con límites de tamaño.
Cuadrículas paginadas
Se pide un tramo y cada cuántos segundos capturar; vuelven tantas cuadrículas de 3×2 como hagan falta, en orden y con el minuto impreso en cada celda.
Fotogramas puntuales
Hasta 12 fotogramas en alta resolución en minutos exactos, cada uno precedido por su marca de tiempo.
Transcripción con marcas de tiempo
Bloques de unos 10 s sin la repetición de los subtítulos automáticos, para ubicar qué mirar.
Lupa progresiva
Transcripción para ubicar, cuadrícula para el panorama y fotogramas para el detalle. La IA decide el recorrido guiada por las descripciones de las tools.
Caché de video
El video se descarga una vez, hasta 1080p y preferentemente en H.264, y se reutiliza entre llamadas. La caché está versionada para no mezclar descargas con otra configuración.
Transcripción local
Whisper large-v3 sobre MLX en un worker nativo de macOS.
Modelo bajo demanda
El proceso del modelo se carga con el primer pedido y se libera tras un período sin uso.
Herramientas.
14 herramientas. Las marcadas en rojo las agregué o las mejoré yo; el resto viene del proyecto original.
Cuadrículas cronológicas
nuevaytdlp_get_video_storyboardsRecorre un tramo con una captura cada N segundos, en cuadrículas de hasta 3×2 (o menores, como 2×2) con el minuto en cada celda. Pagina con un cursor, sin saltos ni repeticiones.
Fotogramas
nuevaytdlp_get_video_framesHasta 12 fotogramas en minutos exactos, para mirar un detalle que la cuadrícula no alcanza a mostrar.
Miniaturas
nuevaytdlp_get_video_thumbnailsDevuelve la miniatura de uno a cinco videos como bloques de imagen MCP.
Transcripción local
nuevaytdlp_transcribe_videoTranscribe el audio con Whisper large-v3 en un worker local; videos de hasta dos horas.
Transcript
mejoradaytdlp_download_transcriptTexto limpio a partir de los subtítulos. Le sumé marcas de tiempo opcionales en bloques de unos 10 s, sin las repeticiones de los subtítulos automáticos.
Búsqueda
originalytdlp_search_videosBusca videos por palabras clave y fecha.
Metadatos
originalytdlp_get_video_metadataMetadatos completos del video.
Resumen de metadatos
originalytdlp_get_video_metadata_summaryVersión resumida de los metadatos.
Comentarios
originalytdlp_get_video_commentsComentarios del video.
Resumen de comentarios
originalytdlp_get_video_comments_summaryComentarios en formato resumido.
Idiomas de subtítulos
originalytdlp_list_subtitle_languagesIdiomas de subtítulos disponibles.
Subtítulos
originalytdlp_download_video_subtitlesDescarga los subtítulos en VTT.
Video
originalytdlp_download_videoDescarga el video con calidad y recorte a elección.
Audio
originalytdlp_download_audioDescarga sólo el audio.
Cómo está armado
- 01CHATGPTcliente multimodal
- 02SERVIDOR MCPTypeScript · Docker · STDIO
- 03YT-DLP + FFMPEGcaché · fotogramas · cuadrículas
- 04WORKER WHISPERHTTP local autenticado
- 05MLXlarge-v3 · GPU Apple
Decisiones técnicas.
Qué se eligió y qué implica.
- 01
Descargar y cachear en vez de leer en streaming
Medí las dos opciones: decodificar 60 s directo desde YouTube tardaba unos 37 s por el límite de velocidad, y bajar el video entero en 720p sin audio, en fragmentos paralelos, unos 9 s.
→ Las llamadas siguientes sobre el mismo video tardan segundos. A cambio, la primera baja el video completo y ocupa disco durante 24 h.
- 02
Panorama antes que detalle
Las descripciones de las tools llevan al modelo a ubicar en la transcripción, mirar una cuadrícula y recién después pedir pocos fotogramas.
→ Cada imagen consume contexto: con este orden y los límites (seis capturas por cuadrícula, 12 fotogramas por llamada) el análisis visual entra en una conversación.
- 03
Recorrer el tramo entero, en páginas
Las cuadrículas cubren todo el tramo pedido, en páginas con un cursor validado, y los fotogramas quedan para minutos exactos: una herramienta recorre y la otra inspecciona. Cada respuesta indica qué cubre y cómo seguir, así el modelo sabe cuántas imágenes va a recibir.
→ Nunca baja la frecuencia ni la resolución a escondidas, y cada respuesta entra en 12 MiB contando el base64. A cambio, un tramo largo lleva varias llamadas.
- 04
Enviar la imagen, no la URL
Miniaturas, cuadrículas y fotogramas viajan como bytes en bloques image, con su tipo MIME y un límite de 4 MiB por imagen.
→ El modelo las ve sin abrir enlaces. El payload es más pesado.
- 05
Docker para el MCP, nativo para la inferencia
El servidor corre en Docker y habla por HTTP local autenticado con un worker de macOS que usa MLX.
→ Se aprovecha la GPU de Apple, con dos entornos que mantener.
- 06
Liberar el modelo por inactividad
El proceso de inferencia se reutiliza entre pedidos y se termina tras 300 s sin uso, por defecto.
→ La memoria queda libre cuando no se transcribe; el pedido siguiente espera la carga.
Que la IA vea lo que pasa en el video, no sólo lo lea, sin volver lenta cada consulta.
- 01Las miniaturas y los fotogramas tenían que llegar al cliente como imágenes reales, no como texto ni enlaces. Lo validé inspeccionando el pedido y la respuesta hacia ChatGPT.
- 02Leer el tramo en streaming desde YouTube era lento por el límite de velocidad; descargar el video entero y cachearlo resultó más rápido que bajar un pedazo.
- 03Las marcas de tiempo tenían que ser exactas: al saltar con ffmpeg los tiempos se reinician en 0 y hubo que volver a sumar el inicio del tramo, además de escapar los ":" del minuto impreso en cada celda.
- 04Recorrer un tramo largo sin perder capturas: cada página se ajusta a un presupuesto de bytes y, si la última cuadrícula queda incompleta, se completa con celdas vacías etiquetadas en vez de repetir fotogramas.
- 05Whisper large-v3 corre en el mismo Mac mini que el resto de mis servicios: el modelo se carga cuando hace falta y se libera solo.
Cómo usé IA
Las ideas y decisiones de las funciones nuevas son mías. El código lo generó IA y lo revisé yo.
Resultado
Lo uso para investigar la competencia del canal antes de definir videos y miniaturas, y para que la IA lea gráficos, slides o código que aparecen en pantalla. Con una captura cada 10 s, la IA puede recorrer 14 minutos de video en 14 cuadrículas sin perder ningún tramo.
- Validado en un caso de uso propio.
- Transcripción del MCP idéntica a la local en el mismo video y modelo.
- Tests unitarios (Jest) de tiempos, rangos, paginación y transcripción con marcas de tiempo, más pruebas con videos sintéticos sobre FFmpeg y ffprobe reales.
- Las 14 herramientas publican un JSON Schema válido.
- Prueba punta a punta por STDIO en el contenedor de producción: del minuto 1 al 15 de un video real, una captura cada 10 s dio 84 capturas en 14 cuadrículas, recorridas completas sin saltos ni duplicados.