¿Qué hace Buscador de Fotogramas de Películas?
Convierte «Necesito un fotograma de dos personas sentadas en silencio después de una discusión» en un archivo de imagen real y con fuente. Cualquier agente de IA, cualquier sistema operativo, sin credenciales.
1. Léelo primero: qué es realmente posible
No existe una API pública gratuita que tome una frase en lenguaje natural y devuelva el fotograma exacto de una película, especialmente uno con subtítulos de diálogo incrustados. Buscar esa «bala de plata» pierde tiempo. Lo que funciona es un pipeline, donde el agente orquesta y un modelo con capacidad de visión selecciona el fotograma:
consulta -> verificación de hechos -> elegir fuente -> descarga por lotes de candidatos
-> hoja de contactos numerada -> SELECCIÓN VISUAL del fotograma -> original en alta resolución
-> recortar subtítulos / componer subtítulos -> revisión visual
-> entrega + manifiesto de fuente
Dos consecuencias innegociables:
- El paso de visión no se puede omitir. Adivinar un fotograma a partir de nombres de archivo o solo texto falla. Muestra la hoja de contactos a un modelo con capacidad de visión (o al humano).
- Verifica los hechos primero. Los «hechos» ampliamente repetidos sobre películas suelen ser incorrectos (consulta
references/fact-check.md). Verifica la línea / escena / episodio antes de buscar.
2. Inicio rápido (perfil mínimo, el predeterminado)
pip install -r requirements.txt
python scripts/still.py probe # qué fuentes están accesibles ahora mismo
python scripts/still.py grab --out ./work \
--page "https://movie-screencaps.com/avatar-2009/page/114" \
--image-referer "https://movie-screencaps.com/" \
--limit 40
# -> ./work/candidates/*.jpg, ./work/contact_1.jpg, ./work/manifest.json
# Muestra contact_1.jpg a un modelo de visión, anota el número ganador, luego:
python scripts/still.py sheet ./work/candidates # regenera una hoja numerada
python scripts/still.py crop ./work/candidates/p1_02.jpg --bottom 100 -o ./work/clean.jpg
python scripts/still.py deliver ./work --picks examples/sample-picks.json \
--profile profiles/minimal.json --out ./delivery
Ejecuta siempre probe primero: la disponibilidad de las fuentes cambia. Para una ejecución completamente offline, consulta la sección D de examples/quickstart.md. --image-referer normalmente es la raíz del sitio, no la URL del artículo.
Para una línea de diálogo, quote da la película + la marca de tiempo en milisegundos:
python scripts/still.py quote "Te veo" --title Avatar
Tutorial completo: examples/quickstart.md. Referencia de comandos: scripts/still.py --help.
3. Decide la ruta antes de tocar la red
| Solicitud | Primera opción | Alternativa |
|---|---|---|
| Escena / ambiente («silencio después de una pelea», «dos personas mirando hacia otro lado») | Artículo editorial con fotogramas subtitulados, o fotogramas seleccionados de FilmGrab (grab) | Galería fotograma a fotograma + selección visual |
| Una línea citada / «el fotograma donde X dice Y» | quote → marca de tiempo → galería de fotogramas → subtitle (etiquetar como compuesto) | Captura de pantalla con subtítulos nativos de un artículo editorial |
| Necesita portada amplia, limpia y sin subtítulos | Fotogramas seleccionados de FilmGrab | crop los 95-100 píxeles inferiores de una captura de pantalla de visualización |
| El usuario tiene archivos de video locales | Búsqueda semántica local opcional, consulta references/optional-adapters.md | — |
| Meme / 梗图 en lugar de un fotograma | Apéndice opcional, references/meme-optional.md | — |
Ejecuta probe primero. Es gratuito, no necesita inicio de sesión y te dice qué fuentes están 403 / inalcanzables en tu entorno para que no reintentes un host muerto.
4. Reglas que se aplican a todos los agentes
- Sin credenciales. No pidas claves API, no inicies sesión en nombre del usuario, no evites muros de pago ni protecciones anti-bot. Un 403 significa «cambiar de fuente», registrado en el registro de ejecución.
- Descarga solo URLs que fueron realmente devueltas. Nunca inventes una URL de imagen. Que una página sea accesible no significa que su CDN de imágenes lo sea: verifica una imagen antes de confiar en toda una galería. Si las imágenes dan 403 después de una corrección de Referer, cambia de fuente — no sigas variando los encabezados.
- Registra la procedencia. Cada imagen entregada necesita página de origen, URL directa de la imagen, título/año de la película, y si se recortó o compuso algún subtítulo.
grabescribe esto enmanifest.jsonautomáticamente. - Marca los subtítulos compuestos. Si añades un subtítulo que no estaba en el fotograma original, indícalo en el pie de foto. Nunca lo presentes como un fotograma nativo.
- Verifica, no asumas, la resolución (>= 1000 px de ancho por defecto) y abre el archivo final con un visor antes de entregarlo.
- Respeta el perfil. El comportamiento más allá de lo anterior (selección humana en el bucle, entrega en dos carpetas, verificación de hechos obligatoria, vista previa de recorte de portada) está controlado por
profiles/*.json. No actives silenciosamente reglas adicionales.
5. Perfiles (comportamiento opcional)
El perfil predeterminado profiles/minimal.json es un pipeline simple y de propósito general: encuentra candidatos, selecciona uno, entrega con procedencia. Todo lo demás es optativo.
python scripts/still.py rules --profile profiles/editorial-wechat.json
python scripts/still.py deliver ./work --picks picks.json \
--profile profiles/editorial-wechat.json --out ./delivery
editorial-wechat.json agrupa el flujo de trabajo de un editor humano: vistas previas numeradas y selección humana (nunca finalización automática), entrega en dos carpetas sin eliminación de candidatos, verificación de hechos obligatoria, anotación obligatoria de subtítulos/fuente, y una vista previa de recorte de portada 2,35:1. Consulta profiles/README.md para el esquema completo.
6. Índice de referencias (divulgación progresiva)
Lee solo lo que necesites para el paso actual.
| Archivo | Cuándo leerlo |
|---|---|
references/workflow.md | Cuando necesites el SOP completo de principio a fin y la lista de verificación de aceptación |
references/sources.md | Al elegir una fuente, o cuando una fuente deja de funcionar |
references/pitfalls.md | Cuando algo falla; contiene los hosts muertos conocidos y los modos de fallo exactos |
references/image-ops.md | Hojas de contactos, recorte, composición de subtítulos, fuentes |
references/fact-check.md | Cualquier solicitud que cite una línea o describa una escena específica |
references/delivery.md | Esquema de procedencia, diseño de dos carpetas, límite de derechos de autor |
references/meme-optional.md | Cuando el usuario pide un meme en lugar de un fotograma |
references/optional-adapters.md | Biblioteca de video local, u otras herramientas basadas en inicio de sesión/CLI |
7. Lista de verificación de aceptación
- La línea / escena fue verificada antes de buscar
- Una hoja de contactos numerada fue examinada por un modelo de visión o el humano
- La imagen final se abre correctamente y coincide con la solicitud, no solo con la consulta
- Página de origen + URL directa + película/año registrados en
manifest.json - Subtítulos recortados / compuestos explícitamente etiquetados
- Ancho >= 1000 px (o se indica la desviación)
- Hosts muertos y soluciones registrados, no reintentados silenciosamente
- No se eliminó ningún candidato; se conservaron los intermedios
8. Límites del alcance
Esta habilidad encuentra y prepara imágenes. No publica nada, edita el manuscrito del usuario, decide la portada final en nombre del usuario (a menos que el perfil indique que el humano ya eligió), ni otorga ningún derecho para redistribuir fotogramas de películas. Consulta references/delivery.md para conocer el límite de los derechos de autor.