Communitygithub.com

Cortometraje 3D realista (Blender + Python)

Crea un cortometraje explicativo 3D realista (30-60 s, vertical 1080x1920) en Blender real, con un humano realista sobre un fondo sólido y una cámara que hace dolly dentro del cuerpo. Pregunta primero por la voz (ElevenLabs, clon de tu voz, grabación propia o solo subtítulos), el estilo, el personaje principal (archivo riggeado propio, uno hecho en Blender, descarga gratuita o ninguno), el motor de renderizado y la duración. Mide vídeos de referencia fotograma a fotograma, escribe un guion original verificado y construye la escena.

¿Qué es Cortometraje 3D realista (Blender + Python)?

Esta habilidad permite a Claude actuar como un director de animación técnico para crear cortometrajes explicativos 3D ultrarealistas utilizando Blender real y Python, sin depender de ningún modelo de IA de imagen o vídeo. El usuario puede elegir entre narración con ElevenLabs (voz predeterminada o clonada), grabación propia o solo subtítulos, y personalizar el estilo visual: fondo de estudio, fondos fotográficos reales o una mezcla. También puede seleccionar la apariencia del personaje principal: proporcionar un modelo riggeado, hacer que Claude cree uno con MPFB, descargar uno gratuito o prescindir de personaje. El motor de renderizado (EEVEE rápido, Cycles rápido o alta calidad) se ajusta a las necesidades del proyecto. El flujo de trabajo es altamente interactivo: Claude pregunta en rondas para definir el tema, la duración y las referencias, mide vídeos de ejemplo fotograma a fotograma, escribe un guion original verificado, construye la escena y renderiza el vídeo final a 1080x1920, 30 fps. El proceso incluye una fase de validación con un 'juez' de realismo (agente separado) que puntúa los fotogramas clave y sugiere mejoras. Esta habilidad está diseñada para Claude Code y otras herramientas de agente de IA que pueden ejecutar scripts de shell y de Blender, ofreciendo una combinación única de control técnico y asistencia creativa para la producción de contenido educativo animado de alta calidad.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/EssouliAnas/blender-3d-short/tree/HEAD

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Cortometraje 3D realista (Blender + Python)?

Cada fotograma es un render real de Blender de una escena que Claude construye en Python. Sin modelo de IA de imagen o vídeo. Resultado final: 1080x1920, 30 fps, H.264 limitado a 30 Mbps. Rutas: <skill> = esta carpeta. Los episodios se guardan en <project>/blender-shorts/<slug>/, los activos descargados en <project>/blender-shorts/assets/, las opciones del canal en <project>/blender-shorts/brand.json. Ejecuta los scripts con python <skill>/scripts/<name>.py.

Lee primero: references/style.md (las reglas), references/traps.md (antes de inventar cualquier solución).

Configuración (una vez por PC)

  • Blender 5.x (se encuentra automáticamente en Program Files; si no, establece BLENDER=<ruta a blender.exe>).
  • python -m pip install numpy opencv-python-headless pillow; ffmpeg en PATH.
  • Prueba que el pipeline funciona: copia examples/test-cell/ a blender-shorts/test-cell/, luego build, still, frames, finish. En una RTX 3080 Laptop, EEVEE rápido renderiza sus 90 fotogramas a 1080x1920 en unos 2 minutos.

Paso 0: preguntas iniciales (siempre, antes de cualquier trabajo)

Pregunta con la herramienta AskUserQuestion, en dos rondas de hasta cuatro preguntas, luego una tercera ronda que depende de la respuesta sobre la voz. Si existe blender-shorts/brand.json, primero haz una pregunta: "¿Misma configuración que la última vez?" (muéstrala en una línea) con "Sí" / "Cambiar algunas". Con "Sí" salta a las partes específicas del tema de la ronda 3. Opción recomendada primero. Guarda cada respuesta en brand.json (para todo el canal) y en el episode.json del episodio.

Ronda 1: qué y cómo habla

  1. Tema: "Sugiéreme 3" / "Tengo uno" (lo escriben en Otro). Sugerencias: preguntas sobre el cuerpo o cómo funcionan las cosas que sean visuales, verificadas en YouTube para originalidad del ángulo.
  2. Voz:
    • Voz de ElevenLabs (recomendada): una voz predeterminada, generada a partir del guion con sincronización exacta de palabras.
    • Clonar mi voz (ElevenLabs): el usuario sube 1-3 min de habla limpia una vez; cada episodio posterior habla con su voz. Solo su propia voz, o una para la que tenga consentimiento por escrito.
    • Grabaré yo mismo: el usuario graba el guion; Claude lo limpia, encuentra la sincronización de palabras y ajusta la imagen.
    • Sin voz, solo subtítulos: el guion se temporiza a 2.8 palabras/s constantes, los subtítulos se queman en el vídeo y se genera un captions.srt para que el usuario pueda grabar o añadir voz después en su editor con esa temporización exacta.
  3. Duración: 30 s (recomendado para el primero) / 45 s / 60 s. A 2.8 palabras/s, eso es ~80 / 120 / 165 palabras.
  4. Vídeos de referencia: "No, usa las reglas de estilo integradas" (recomendado) / "Sí, daré archivos o enlaces" (se miden con measure.py, solo para estudio privado).

Ronda 2: el aspecto visual

  1. Aspecto: Fondo de estudio (recomendado: un color distintivo detrás de todo, el estilo del género) / Fondos de foto del mundo real (estadio, calle, cielo detrás del 3D) / Mezcla (fondo con lugares reales para los momentos "dónde").
  2. Color de fondo (saltar si no se usa fondo): Melocotón #F2D7C9 (el nuestro hasta ahora) / Menta #CFE8DF / Azul marino intenso #1F2A44 / Personalizado (hex). Nunca el color del canal de referencia.
  3. Personaje principal: "¿Hay un personaje principal?" (references/characters.md)
    • Proporcionaré un personaje riggeado: su archivo .blend / .fbx / .glb (Mixamo, Character Creator, una tienda).
    • Crea uno para mí (recomendado si no tiene ninguno): construido en Blender con MPFB, sin cuentas, nuestro logo en la camiseta.
    • Descargar uno gratuito riggeado: Claude propone 2-3 candidatos (fuente, licencia, aspecto); en sitios que requieran una cuenta (Mixamo, Renderpeople, Sketchfab) el usuario lo descarga y da la ruta.
    • Sin personaje: solo objetos, partes del cuerpo y lugares. Una vez que existe un personaje principal (assets/host/host.blend), esta pregunta se convierte en "¿Usar otra vez?".
  4. Motor de renderizado:
    • Auto (recomendado): EEVEE rápido en todas partes, Cycles rápido solo para tomas que fallen el juez en primeros planos de piel, nubes, vidrio o pelo.
    • Solo EEVEE rápido: el más rápido, ~1 s por fotograma.
    • Solo Cycles rápido: aproximadamente 2x más lento, luz más suave y natural.
    • Alta calidad: los ajustes preestablecidos high, aproximadamente 2-3x más lento que rápido.

Ronda 3: depende de la respuesta sobre la voz

  • ElevenLabs o clon: la clave. Busca ELEVENLABS_API_KEY= en un .env en el proyecto o en un nivel superior (nunca lo imprimas). Si está, di "Encontré tu clave de ElevenLabs" y no preguntes. Si no, pregunta: "Añade tu clave: pégala aquí y la guardaré en .env, o añade la línea ELEVENLABS_API_KEY=... a .env tú mismo (la mantiene fuera del chat)". Guarda una clave pegada en <project>/.env solo, nunca la muestres, nunca la pongas en ningún otro archivo, commit o registro.
  • ElevenLabs: Voz: Narrador calmado (id por defecto en sound.py) / "Elige de mi biblioteca de ElevenLabs" (lista con GET /v1/voices, muestra solo nombres) / ID de voz (lo escriben). Modelo de voz: eleven_multilingual_v2 (recomendado: estable, mejor sincronización de palabras) / eleven_v3 (más expresivo, menos predecible).
  • Clon: pide los archivos de muestra (rutas), luego sound.py <ep> clone <files> --name "<nombre> voz"; el id de voz se guarda y se reutiliza en todos los episodios posteriores.
  • Grabación propia: diles que esperen hasta que el guion esté aprobado, luego que lo graben de una vez, con el teléfono a la distancia del brazo, en una habitación tranquila, y que den la ruta del archivo. (Grabar sobre el guion aprobado es lo que mantiene la imagen y la voz sincronizadas).
  • Personaje principal, según la respuesta de la ronda 2:
    • Proporcionar: pide la ruta del archivo (y la carpeta de texturas si está separada).
    • Crear uno: pide rango de edad, complexión, y estilo de pelo y ropa (palabras simples); luego pide instalar MPFB.
    • Descargar: muestra los 2-3 candidatos como opciones (nombre, aspecto, licencia, cuenta necesaria) y deja que elijan.
  • Cada opción de voz: ¿Subtítulos quemados? Sí / No (sin voz siempre lleva subtítulos).
  • Cada opción: Música: Ninguna, solo efectos y tono de ambiente (recomendado para el primero) / Mi propia pista (ruta de archivo, confirman que tienen los derechos) / Pista de la Biblioteca de Audio de YouTube (la descargan y dan la ruta).

No preguntes sobre nada más; todo lo siguiente tiene un valor predeterminado. Preguntas sobre "modelo específico": no hay ningún modelo de IA de imagen o vídeo en este pipeline. Las opciones que actúan como uno son el motor de renderizado (ronda 2), el modelo de voz de ElevenLabs (ronda 3) y el modelo de Claude que ejecuta la habilidad: Opus con esfuerzo alto funciona mejor.

Ajustes preestablecidos del motor (configuración elegida por el usuario, mantenla)

  • EEVEE rápido (predeterminado, b3d.EEVEE_PRESETS['fast']): 16 muestras, trazado de rayos y GI a media res, 1 rayo de sombra. ~0.9-1.2 s por fotograma en 1080p en la 3080, 99-99.9% similar a high.
  • Cycles rápido (b3d.CYCLES_PRESETS['fast']): 32 muestras, límite de tiempo de 1 s, denoiser OptiX, 2-3 rebotes, aproximación Fast GI, Datos Persistentes. ~1.7 s por fotograma. Si el desenfoque del denoiser se nota en un primer plano, dale a esa toma un límite de 2 s.
  • --quality draft | fast | high en el momento del render, sin reconstruir. Motor por escena: setup_render(engine=...), o B3D_ENGINE=CYCLES python render.py <ep> build para A/B sin editar. Motores mixtos en un mismo corto están bien (renderiza el rango de fotogramas de cada toma desde su propio .blend) si el fondo y la gradación coinciden.

Pipeline (guarda después de cada paso; muestra al usuario imágenes fijas, no muros de texto)

  1. Tema y datos. Trabaja cada número y escríbelo con su fuente en episode.json science. Los números famosos dudosos llevan "Los científicos estiman". El mismo tema que un canal grande está bien, sus palabras no.
  2. Mide la referencia (solo si la ronda 1 dijo que sí): measure.py <carpeta> --out <ep>/reference.json. Si no, se usan los valores predeterminados de style.md.
  3. Guion en episode.json (examples/episode.template.json): segunda persona, ~2.8 palabras/s, la duración elegida, la forma de los beats en style.md. Muéstralo y espera la aprobación. Después de la aprobación, "adelante" hasta las imágenes fijas.
  4. Voz y temporización, según la respuesta de la ronda 1:
    • ElevenLabs / clon: sound.py <ep> voice -> audio/voice.wav, words.json, captions.srt.
    • Grabación propia: espera su archivo, luego sound.py <ep> own <archivo> (tiempos de palabras: faster-whisper si está instalado, si no, ElevenLabs speech-to-text si hay clave, si no, estimado a partir de silencios; ofrece pip install faster-whisper si la estimación no es buena).
    • Sin voz: sound.py <ep> captions -> words.json + captions.srt a "wps" (2.8). Luego escribe shots.md: por beat, el rango de fotogramas (a partir de los tiempos de palabras), el movimiento de cámara (dolly in / mantener+deslizar / pull out / vuelo) y qué sigue en movimiento durante cada mantenimiento. Máximo un corte brusco por cada ~7 transiciones.
  5. La prueba de 9 segundos primero. Un beat con el pipeline completo antes de todo el corto: scene.py con los helpers b3d. Renderiza, finaliza, measure.py, y compare.py reference.json ours.json si hay referencia. El delta es la lista de tareas pendientes. Arregla la cámara hasta que la sacudida y la deriva lateral coincidan (un eje, claves suavizadas).
  6. Mundo y personaje. Personaje primero, por su ruta en references/characters.md, siempre a través de b3d.import_character(ruta, height=1.75): lo escala a la altura real con los pies en el suelo, elimina cámaras y luces sueltas, une las partes con peso al rig e imprime un informe (tipo de rig, partes que no siguen el rig, formas faciales x/52, texturas faltantes). Arregla cada elemento del informe, luego una imagen fija de rotación, luego guarda assets/host/host.blend. Mundo desde references/assets.md (lista de descargas, fuente + licencia + tamaño, pregunta una vez). Regla: si existe uno real, descárgalo, nunca lo modeles.
  7. Imágenes fijas y el juez. render.py <ep> still <frames...> --pct 50 para cada beat. Luego inicia un agente separado (herramienta Agent) con las imágenes fijas y references/realism.md; puntúa sobre 10 y nombra los tres peores detalles que delatan que es falso. Arregla, vuelve a renderizar, vuelve a juzgar. Renderiza solo con 8.5+. Muestra al usuario las imágenes fijas y la puntuación. Con motor "Auto", una toma que falle en un atajo de EEVEE pasa a Cycles rápido aquí.
  8. Render. Ejecuta render.py <ep> frames en el panel de Terminal del usuario (run_in_terminal) para que vean la barra en vivo (fotogramas hechos, s por fotograma, ETA); lee <ep>/progress.json para responder "¿cuánto falta?". Reanudable. Luego render.py <ep> times; si es demasiado lento, trabaja con references/render-speed.md en los fotogramas más lentos.
  9. Sonido. beds (un tono de ambiente por mundo) y sfx (cada uno en su palabra: "golpe de hueso" en "huesos") en episode.json, luego sound.py <ep> sfx (necesita clave; sin una, omite efectos o usa archivos que el usuario proporcione en audio/sfx/<nombre>.mp3) y sound.py <ep> mix. Regla de mezcla: música +3 dB, efectos a la mitad, voz sin cambios.
  10. Finalizar. finish.py <ep> --audio <ep>/audio/mix.wav [--captions] -> out/<slug>-final.mp4. Míralo en tamaño de teléfono. Episodios sin voz: también entrega captions.srt y di que la voz se coloca en esos tiempos.
  11. Informe: la ruta final, la última puntuación del juez, minutos de render, créditos de ElevenLabs (costs.json), y el texto de créditos para la descripción (licencias de assets.md). Nunca afirmes que el canal de referencia usa ninguna herramienta.

Scripts

ScriptSe ejecuta enHace
b3d.pyBlenderconfiguración de render + ajustes preestablecidos (EEVEE/Cycles, GPU, aspecto), fondo + HDRI, capturador de sombras (real en Cycles, simulado en EEVEE), luces, cámara dolly suavizada en un eje, materiales, import_character (cualquier .blend/.fbx/.glb riggeado, escalado, vinculado, informado), parent_to_bone, shape keys, compositor, cronómetro
render.pyshellbuild, still, frames (barra de progreso en vivo, progress.json, reanudable), times; --quality
sound.pyshellvoice (ElevenLabs), clone, own (grabación del usuario), captions (sin voz), sfx, mix; cada modo de voz escribe captions.srt
finish.pyshellfotogramas + mezcla -> mp4 1080x1920, capa de cámara real, --captions quemado
measure.py / compare.pyshellmétricas fotograma a fotograma de cualquier vídeo; referencia vs nuestro con una lista de tareas pendientes

scene.py se llama como blender -b --factory-startup --python scene.py -- <skill>/scripts <ep>/scene.blend; empieza desde examples/test-cell/scene.py (llama a shadow_catcher después de las luces).

Skills relacionados