Skip to main content
Glama

AI-MediaLens - Análisis de medios para agentes de IA mediante OpenRouter

Cubre la brecha de lo que Cline no puede leer: archivos de video, audio y PDF. Envía archivos directamente a la API de OpenRouter, que los enruta a modelos multimodales (y analiza PDFs para cualquier modelo).

Funciona como un servidor MCP para Cline, una CLI independiente y un módulo de Python importable, todo desde un solo archivo.

Inicio rápido

git clone https://github.com/Alihkhawaher/ai-medialens.git
cd ai-medialens
pip install mcp          # only needed for MCP mode
python openrouter_media.py setup    # configure API key + register in Cline

setup de forma interactiva:

  1. Guarda tu clave de OpenRouter en .env

  2. Registra el servidor MCP ai-medialens en la configuración global de Cline

Related MCP server: Media Context MCP

Entradas compatibles (detección automática por extensión)

Tipo

Extensiones

Parte de contenido de OpenRouter

Video

.mp4 .mpeg .mov .webm

video_url (base64)

Audio

.wav .mp3 .aiff .aac .ogg .flac .m4a

input_audio

PDF

.pdf

file (base64)

Imagen

.jpg .jpeg .png .gif .webp

image_url (base64)

Uso

CLI

# Full file
python openrouter_media.py video.mp4 -p "Transcribe all spoken Arabic word-for-word"

# Only seconds 5-20 (trimmed locally; ffmpeg auto-downloaded on first use)
python openrouter_media.py video.mp4 -p "What happens here?" --start 5 --end 20

# Different model / explicit key
python openrouter_media.py doc.pdf -p "Summarize" -m z-ai/glm-5.3-flash -k sk-or-v1-...

# Scanned PDF -> real OCR (billed per page by OpenRouter)
python openrouter_media.py scan.pdf -p "Extract all text" --pdf-engine mistral-ocr

# Speech-to-text (works on video files too - audio track extracted locally)
python openrouter_media.py lecture.mp4 --stt --language ar

# SRT subtitles with timestamps
python openrouter_media.py lecture.mp4 --stt --srt > lecture.srt

# Find models that accept video input, with prices
python openrouter_media.py --list-models video

# Preview request shape without sending (no API cost)
python openrouter_media.py video.mp4 -p "test" --dry-run

MCP (desde Cline)

Cline llama a las herramientas de forma nativa:

use_mcp_tool: server=ai-medialens, tool=analyze_media
arguments: { "path": "...", "prompt": "...", "start": "5", "end": "20" }

use_mcp_tool: server=ai-medialens, tool=transcribe_audio
arguments: { "path": "...", "language": "ar", "srt": false }

Como módulo de Python

from openrouter_media import analyze
text = analyze("video.mp4", "Transcribe all speech.")
resp = analyze("doc.pdf", "Summarize.", raw=True)

Orden de resolución de la clave de API

  1. Indicador -k/--key

  2. Variable de entorno OR_KEY

  3. Variable de entorno OPENROUTER_API_KEY

  4. Archivo .env junto al script (ver .env.example)

ffmpeg y recorte por rango de tiempo

--start/--end recortan el medio localmente antes de la subida (OpenRouter no tiene parámetro de rango nativo). ffmpeg se resuelve en este orden:

  1. bin\ffmpeg.exe incluido (si lo colocas allí)

  2. Copia en caché en %LOCALAPPDATA%\ai-medialens\bin\ffmpeg.exe

  3. ffmpeg en PATH

  4. Descarga automática (compilación estática de ~80 MB, una sola vez, Windows)

Nota: el recorte usa -c copy (rápido, pero corta en keyframes; los cortes exactos requerirían re-codificación).

Modelos

Predeterminado: qwen/qwen3.7-flash ($0.03/M entrada, $0.13/M salida) — actualmente el modelo más barato de OpenRouter con soporte completo de entrada de video.

Otras buenas opciones con capacidad de video (verifica los precios actuales mediante --list-models video):

Modelo

Entrada /M

Salida /M

qwen/qwen3.7-flash (predeterminado)

$0.03

$0.13

z-ai/glm-5.3-flash

$0.075

$0.25

qwen/qwen3.8-27b

$0.425

$2.55

Cualquier slug de modelo de OpenRouter funciona mediante -m / model= — incluyendo lanzamientos más recientes a medida que aparecen.

Motores de análisis de PDF

Los PDFs se analizan localmente o en el lado del servidor por OpenRouter:

Motor

Comportamiento

Costo

(predeterminado)

Extracción de texto del lado del servidor desde la capa de texto incrustada

Gratis

--pdf-engine local

Análisis local mediante PyMuPDF (pip install pymupdf) — sin límites de tasa. PDFs digitales: texto extraído localmente. PDFs escaneados: páginas renderizadas como imágenes y el modelo de visión realiza el OCR por sí mismo

Gratis

--pdf-engine mistral-ocr

OCR real del lado del servidor sobre imágenes de páginas — lee PDFs escaneados/solo imagen

Facturado por página

--pdf-engine native

Reenvía el PDF sin procesar a modelos con entrada de archivo nativa

Gratis

local es recomendado: nunca alcanza los límites de tasa del analizador de OpenRouter y maneja tanto PDFs digitales como escaneados a costo adicional cero.

Conversión de voz a texto (STT)

Usa el endpoint dedicado /audio/transcriptions de OpenRouter (modelos clase Whisper). Modelo predeterminado: openai/whisper-large-v3-turbo. Otras opciones: openai/gpt-4o-transcribe, openai/gpt-4o-mini-transcribe, microsoft/mai-transcribe-1.5, openai/whisper-large-v3.

Endurecimiento del pipeline (lecciones de un sistema de producción YouTube→subtítulos):

  • Cualquier entrada de audio/video → ffmpeg convierte a Opus 32kbps/16kHz/mono (8× más pequeño que WAV, aceptado por todos los proveedores); las pistas de video se eliminan

  • Medios largos se dividen automáticamente en fragmentos de 6 minutos (OpenRouter tiene un tiempo de espera ascendente de ~60s por solicitud)

  • Cada fragmento se re-multiplexa para agregar la página Ogg EOS faltante (el muxer de segmentos de ffmpeg la omite; el analizador de OpenRouter rechaza flujos sin ella)

  • --srt devuelve subtítulos SRT con marcas de tiempo mediante segmentos verbose_json, con compensación correcta entre fragmentos

  • Nota: whisper-large-v3 produce salida confusa en audio acelerado; mai-transcribe-1.5 lo tolera

Notas

  • Los archivos grandes se codifican en base64 en memoria - videos muy grandes pueden alcanzar los límites de subida del proveedor.

  • Los secretos están seguros: .env está en gitignore y nunca se confirma.

Related MCP Connectors

Related MCP Servers