用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Ntizar/MasterMind --skill short-form-video-generation命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
Restore Hermes from a backup repo or migrate machines.
Usa al analizar ADN crudo: ascendencia, rasgos, sexo.
Usar al operar Mastermind en Windows: repo, ChromaDB, crons, gateway Telegram (colapso por token revocado y su restauración), backups y monitorización.
| name | short-form-video-generation |
| description | Usa a hacer shorts verticales con voz y fotos reales. |
| version | 1.0.0 |
| tags | ["video","shorts","reels","tiktok","tts","ffmpeg","slides","monetizacion","product-images"] |
| related_skills | ["video-gen-from-topic","video-processing","hyperframes-html-video","manim-video"] |
| author | Mastermind (Ntizar) |
| license | MIT |
| metadata | {"hermes":{"tags":["video","shorts","reels","tiktok","tts","ffmpeg","slides","monetizacion","product-images"],"related_skills":["video-gen-from-topic","video-processing","hyperframes-html-video","manim-video"]}} |
Pipeline programático para producir un short vertical (Shorts/Reels/TikTok) con voz + slides + imágenes reales, sin GPU ni claves de pago. Stack: edge-tts (voz) + Pillow (slides) + ffmpeg (composición) + imágenes reales (Wikimedia CC o Amazon por ASIN).
No es moneyprinterturbo/stock random: es el montaje con imágenes reales y variadas del tema (clave para que no parezca un vídeo de bot).
es-ES-AlvaroNeural (edge-tts). Nunca voz genérica/femenina por defecto.#f59e0b) + texto blanco gordo.# 1) VOZ (en el venv de Hermes, tiene edge_tts)
python -c "import edge_tts,asyncio; asyncio.run(edge_tts.Communicate(open('guion.txt',encoding='utf-8').read().strip(),'es-ES-AlvaroNeural').save('voice.mp3'))"
# medir duracion: ffprobe -v error -show_entries format=duration -of csv=p=0 voice.mp3
# 2) SLIDES (Python312, tiene Pillow): foto + scrim + titulo gordo + acento -> slides/slide_0N.png
python build_slides.py
# 3) COMPOSICION — slideshow RAPIDO (loop 1 + concat + audio). OJO: NO usar zoompan, es lentisimo.
for i in 01 02 03 04 05; do ffmpeg -y -loglevel error -loop 1 -t 5 -i slides/slide_$i.png \
-vf "fps=30,scale=1080:1920" -c:v libx264 -pix_fmt yuv420p segs/seg_$i.mp4; done
{ for i in 01 02 03 04 05; do printf "file 'C:/.../segs/seg_%s.mp4'\n" "$i"; done; } > list.txt
ffmpeg -y -f concat -safe 0 -i list.txt -i voice.mp3 -c:v libx264 -pix_fmt yuv420p \
-c:a aac -b:a 192k -shortest -movflags +faststart out/short.mp4
duracion_voz / n_slides (redondea a entero; -shortest recorta al audio).Cuando David quiere el vídeo más espectacular/realista que un slideshow, renderiza una escena Three.js a MP4 con Puppeteer frame-by-frame (no zoompan, no HyperFrames). Receta completa en references/threejs-video-render.md. Claves (todas verificadas):
window.seek(t) que dibuja el estado en tiempo t. NUNCA auto-arranques el loop requestAnimationFrame si vas a hacer seek — el loop corre con reloj de pared y sobrescribe el seek(t) justo antes de cada screenshot (bug real: todos los frames salen iguales y los textos no siguen el timing). Exponer window.play()/stop() y llamar window.seek(0) al cargar.ffprobe, concatena con el demuxer de ffmpeg, y usa los tiempos acumulados como ventanas de visibilidad de cada slide en draw(t).WebGLRenderer necesita alpha:true + renderer.setClearColor(0x000000, 0) — sin eso el canvas limpia a negro y tapa el gradiente.seek(t) es determinista, así que renderiza en trozos; acepta un START (índice de frame) y re-abre la página para continuar sin duplicar trabajo.ffmpeg -vf "fade=t=in...,fade=t=out..." -af "afade=...".Cuando David pide que NO parezca "IA slop"/"videojuego", usa esta variante (sin Three.js): fondo gradiente cinematográfico (Ken Burns con transform:scale) + canvas 2D para humo y brasas (partículas dependientes de t, seekable) + fotos reales de producto en panel con marco+glow + texto punch skewed + guion loco narrado por segmento. Receta completa (HTML + render.js + ffmpeg) en references/canvas2d-cinematic-short.md.
Coste (clave para escalar a muchos vídeos): el render (Puppeteer+ffmpeg) y la voz (edge-tts) son locales y gratis — cero tokens; solo el guion LLM cuesta (~50–150K tokens/vídeo). El trabajo "caro" de desarrollo del pipeline se paga una vez.
commons.wikimedia.org/w/api.php con generator=search + gsrsearch=filetype:bitmap <tema> + prop=imageinfo + iiurlwidth. Obligatorio User-Agent (403 sin él) y filtrar resultados (la query "agua" devolvió un mono bebiendo — excluir títulos con monkey|maca|animal|museum|collection...). Preferir image/jpeg >1000px./dp/<ASIN>) devuelven vacío a curl sin cookies (bloqueo). La vía fiable es buscar amazon.es/s?k=<query> con cookie jar + UA (patrón de kit72h/scripts/buscar-amazon.py) y extraer la imagen del bloque data-asin="<ASIN>" (<img ... src="https://m.media-amazon.com/images/I/...">). Detalle en references/imagenes-producto-amazon.md.zoompan de ffmpeg es un cuello de botella enorme (re-encodifica cada frame; ~60-100s/segmento en 1080×1920; un vídeo de 6 planos se quedó a 4/6 a los 400s). Usa slideshow estático (-loop 1 + concat) para velocidad; si quieres movimiento, mételo en los slides o usa xfade (más rápido que zoompan).pip install no trae Pillow en el venv de Hermes; usar el Python del sistema (C:/Users/d_ant/AppData/Local/Programs/Python/Python312/python.exe, tiene Pillow). edge_tts vive en el venv de Hermes, no en el del sistema./tmp); -o a un path nativo.Neural (es-US-AlonsoNeural, no es-US-Alonso) y rate/pitch exigen signo ('+0%', no '0%'; '-8Hz'). Para elegir la voz más cinematográfica, medir la frecuencia fundamental (autocorrelación sobre el wav) y quedarse con la más grave (ej. es-US-AlonsoNeural ≈104 Hz vs es-ES-AlvaroNeural ≈110 Hz).ffprobe el mp4: 1080×1920, H.264/AAC, duración ≈ voz. Reproducir y comprobar que cambia de imagen por ítem y la voz es Álvaro.references/imagenes-producto-amazon.md — receta completa de extracción de imagen por ASIN (search + cookie jar + data-asin).references/threejs-video-render.md — receta de escena Three.js seekable → MP4 (Puppeteer frame-by-frame + ffmpeg), con el fix del loop rAF.