Depth POV Explainer
Produce un video de ~10 min "Por Qué Nunca Querrías Encontrarte Con Un [ANIMAL]": gráficos de movimiento vectoriales planos animados con Remotion (todo se mueve; sin diapositivas estáticas), narrado con ElevenLabs Eleven v4, una idea visual por oración. Siempre habla al usuario en inglés, independientemente del idioma en que escriban; el guion, las etiquetas y los prompts también están en inglés de EE. UU. Escribe cada JSON/TXT/.env como UTF-8 sin BOM.
Paso 0 - Espacio de trabajo en D: (ejecutar cada vez, crear lo que falte)
Raíz: D:\DepthPOV (si D: no existe, preguntar al usuario por otra unidad).
D:\DepthPOV\.env
D:\DepthPOV\studio\ Proyecto Remotion (npx create-video@latest studio, plantilla Blank)
D:\DepthPOV\studio\src\lib\ Biblioteca visual compartida (core.tsx, sets.tsx, art.tsx, ui.tsx)
D:\DepthPOV\tools\ voice.py stock.py stock_pick.py sfx.py
D:\DepthPOV\videos\<slug>\ facts.json script.txt script_tagged.txt beats.json timing.json stock.json packaging.md voice.mp3 out.mp4 FINAL\
D:\DepthPOV\assets\stock\ music\ sfx\ thumbnails\
D:\DepthPOV\brand\brand.json
Incluido con esta habilidad (copiar en el espacio de trabajo cuando falte, nunca sobrescribir copias locales más nuevas): scripts/*.py -> D:\DepthPOV\tools\; remotion-lib/lib/*.tsx y brand.ts -> studio\src\lib\; remotion-lib/stills.mjs -> studio\; remotion-lib/example-blue-whale/ es un video completo terminado por el autor de la habilidad (13 archivos de capítulo, ~66 escenas persistentes, Main.tsx, Thumb.tsx) para leer como implementación de referencia, no para copiar escena por escena. La biblioteca toma el nombre del canal, los colores de acento y los colores de los personajes de studio\src\lib\brand.ts, que tools\sync_brand.py genera a partir de brand.json; nunca codificar un nombre de canal o color en una escena. Después de crear el estudio, ejecutar npx remotion add @remotion/media @remotion/google-fonts. Python necesita requests.
Si falta .env, crearlo con valores vacíos y DETENERSE, indicando al usuario que lo abra en el Bloc de notas y complete las claves:
ELEVENLABS_API_KEY=
ELEVENLABS_VOICE_ID=
ELEVENLABS_MODEL_ID=eleven_v4
PIXABAY_API_KEY=
PIXABAY_API_KEY es gratuita: iniciar sesión en pixabay.com y copiar la clave que se muestra en https://pixabay.com/api/docs/ (una clave cubre tanto videos como fotos). Ignorar cualquier clave adicional que un .env anterior pueda contener.
Nunca imprimir los valores de las claves. Verificar que Node.js LTS esté instalado; instalar las habilidades del agente de Remotion una vez con npx skills add remotion-dev/skills y cargarlas antes de escribir código de Remotion. Si el usuario dice "Retention", quiere decir Remotion. Mencionar una vez que Remotion es gratuito solo para individuos y empresas muy pequeñas (/remotion-license).
Paso 1 - Marca (solo en la primera ejecución, guardado en brand.json; omitir si brand.json existe)
Preguntar en orden, un mensaje cada vez, siempre con una recomendación:
- Nombre del canal. Preguntar si el usuario ya tiene un nombre. Si no, proponer 8 nombres en 3 estilos (misterioso, ej. "Archivos del Abismo"; explorador, ej. "Hacia lo Profundo"; directo, ej. "Por Qué Nunca Querrías"): 1-3 palabras, fáciles de decir en voz alta, sin nombres de canales grandes existentes, sin parecidos a "Depth Theory", que funcione si el canal luego sale del océano. Para cada uno, dar un @handle correspondiente. Decir al usuario que busque el nombre + handle en YouTube antes de comprometerse (Claude no puede confirmar disponibilidad). Guardar channel_name, handle, tagline.
- El personaje "tú", recomendar uno:
- Buzo (traje naranja, casco rojo) - océano; el más cercano a Depth Theory, menos distintivo.
- Piloto de minisubmarino - mar profundo; todo el video enmarcado por un ojo de buey redondo + HUD (profundidad, oxígeno). Recomendado para un canal solo de océano.
- Superviviente en balsa después de un naufragio - superficie oceánica; vista cenital de la balsa.
- Explorador con casco - jungla, cuevas, ríos, hielo; círculo de luz en la oscuridad. Recomendado si el canal se expande más allá del océano.
- Guardabosques / biólogo de campo - animales terrestres; binoculares + libreta de campo.
- Viajero en el tiempo - criaturas prehistóricas; contador de años (-66,000,000).
- Color de acento + fuente, y el estilo de apertura propio del canal (mostrar 3 muestras de aperturas en frío, el usuario elige).
Guardar {channel_name, handle, tagline, character, look, signature_frame, accent {threat, safe, danger}, character_colors {suit, suit2, stripe, fins, fins_dark, lamp} (aletas en un color de alta visibilidad), font, opening_style} en brand.json, luego ejecutar
python D:\DepthPOV\tools\sync_brand.pypara escribir studio\src\lib\brand.ts, y reutilizarlo en cada video. La biblioteca de arte incluida dibuja al buzo; para cualquier otro personaje (piloto de submarino, explorador, guardabosques, viajero en el tiempo), construir un nuevo componente en art.tsx con las mismas reglas de anatomía (references/visual-style.md). Nunca usar la apertura "Picture this." de Depth Theory, su paleta exacta ni el diseño del buzo. Usar channel_name en: la línea de llamada cruzada entre videos ("si has estado viendo [channel_name] por un tiempo..."), la línea de CTA/pantalla final, la descripción y un pequeño logotipo en los últimos 10 s del video.
Paso 2 - Datos (antes de cualquier guion)
Buscar en la web el animal. facts.json: 25-35 elementos {id, claim, number, unit, everyday_comparison, source_url, confidence}. Ningún superlativo (más grande/más profundo/único/jamás) a menos que una fuente obtenida lo indique. Listar mitos populares y la verdad.
Paso 3 - Guion (estructura fija; leer references/script-patterns.md primero)
Usar script-patterns.md para los presupuestos de sección, los dispositivos y las reglas de originalidad: aprender el ritmo de la referencia, nunca su redacción. Cada guion se escribe nuevo a partir de los datos de este animal; si el animal ya fue cubierto por la referencia (cachalote), evitar los ángulos allí listados.
- Apertura en frío 0:00-0:25. La línea 1 es SIEMPRE la apertura característica de la marca, corta (menos de 3 s), para que los espectadores la aprendan: "Registro de inmersión, entrada [n]. [profundidad]. Aire: [PSI]." La línea 2 en adelante es el GANCHO, aún dentro de los primeros 7 s: poner al espectador en peligro ahora mismo - algo toca, agarra, rodea o bloquea la luz, una forma parecida a un tiburón, una sombra, algo invisible - tiempo presente, sin explicación, y mostrado en pantalla en el mismo instante (silueta, tentáculo, sombra, ojo). Solo entonces el escenario (inmersión nocturna, cable, profundidad debajo), una REGLA que el espectador sabe, y una señal sensorial que la rompe y se eleva hacia ti. Nunca pasar los primeros 7 s en un paisaje tranquilo o logística. Plantar el detalle sensorial para un pago a mitad del video y hacer eco del peligro de apertura más tarde (el encuentro real, el acercamiento). Sin introducción.
- Replantear: animales que la gente suele temer, conceder, luego tres afirmaciones para [ANIMAL]; terminar con "...por qué nunca querrías encontrarte con uno."
- Cinco capítulos: TAMAÑO, COMIDA, CÓMO CAZA/SIENTE, CEREBRO/COMPORTAMIENTO, ¿ALGUNA VEZ SE HA VUELTO CONTRA LAS PERSONAS?. Cada uno termina con una pregunta que el siguiente responde. Cada número obtiene una comparación cotidiana.
- Pago del detalle plantado alrededor de 3:30.
- "¿Qué harías realmente?": 4 opciones descartadas una por una, una broma seca cada una, línea de veredicto.
- Giro 1: casi nunca ataca a las personas. Giro 2: el peligro real va en la otra dirección.
- Rol en el ecosistema. 8. Cierre: repetir la REGLA con nuevo significado. 9. CTA: preguntar qué criatura cubrir a continuación, en las propias palabras del canal desde brand.json (nunca copiar el "I do actually read them" de Depth Theory). Voz: segunda persona (más de 35 "tú"), oraciones de menos de 20 palabras, 5-7 metáforas de broma seca, 1,600-1,800 palabras a ~170 ppm. Sin "let's dive in", sin emojis. Guardar como script.txt (sin etiquetas).
Paso 4 - Escenas y ritmo (leer references/visual-style.md primero)
El video tiene alrededor de 60 ESCENAS persistentes, no una tarjeta por oración. scenes.json: {scene_id, chapter, setting (deep|mid|surface-split|paper|radar|xray|black|stock), camera (drift|push-in|follow-dive|tilt|top-down|macro), cast (sujetos ilustrados), beats:[...]}. Una escena dura 6-20 s y cubre 2-6 oraciones; cada oración AÑADE un elemento a la escena (el sujeto entra, la línea de medida se dibuja, el contador corre, la etiqueta aparece, el sello golpea, el FX se dispara) en lugar de reemplazarlo. Beat = {id, scene_id, text, add (lo que aparece/cambia), label (0-5 palabras o vacío; nunca repite la narración), label_pos (top|under-subject|near:), accent, fact_ids, stock_query?}. Usar el kit de herramientas de referencia por tipo de oración: número -> diagrama en escena (línea de medida, medidor, contador, matriz de iconos, cuadrícula, gráfico circular); comparación -> el objeto entra junto al sujeto (el autobús entra, los elefantes aparecen); historia -> accesorios de papel/sepia y conjuntos de superficie; broma -> accesorio o figura de palo (recibo, formulario, pizarra, sello, diálogo de IU); peligro -> etiqueta roja + FX de impacto; detección -> modo de radar/rayos X. El personaje "tú" aparece en la apertura en frío, el pago, el capítulo de opciones y el cierre, siempre pequeño al lado del animal.
Paso 5 - Puerta de datos (bloqueo)
Tabla: oración | fact_id | source | OK/ARREGLAR para cada oración con un número o superlativo. Arreglar todas las filas ARREGLAR y mostrar la tabla al usuario antes de gastar créditos de ElevenLabs.
Paso 6 - Voz (Eleven v4 + etiquetas de audio)
- Crear script_tagged.txt añadiendo etiquetas de audio v4 como lo haría ElevenLabs Auto-tag: [thoughtful], [curious], [uneasy], [dry], [whispers], [short pause], [long pause]. Máximo una etiqueta cada 2-3 oraciones; susurro/pausa alrededor de revelaciones y el pago; [dry] antes de las bromas; ninguna etiqueta dentro de una oración que lleve una estadística. Mostrar una muestra de 10 líneas al usuario una vez por canal para aprobar la densidad de etiquetas.
- Llamar
POST https://api.elevenlabs.io/v1/text-to-speech/{ELEVENLABS_VOICE_ID}/with-timestampscon model_id de .env (eleven_v4). Límite de 10,000 caracteres por solicitud: dividir en límites de capítulo (generalmente 2 solicitudes), pasar previous_text/next_text para continuidad, concatenar con ffmpeg. - Si with-timestamps es rechazado para v4, usar el endpoint simple, luego ElevenLabs Forced Alignment (
POST /v1/forced-alignment) con el audio + script.txt (etiquetas eliminadas). - Mapear tiempos de palabras a oraciones -> timing.json {beat_id, start_s, end_s, start_frame, end_frame} a 30 fps.
Paso 6b - Efectos de sonido (ElevenLabs Sound Effects, no se necesita CapCut)
Mantener una biblioteca de SFX reutilizable en D:\DepthPOV\assets\sfx\ generada con POST https://api.elevenlabs.io/v1/sound-generation {text, duration_seconds, prompt_influence 0.6} usando la misma ELEVENLABS_API_KEY (tools/sfx.py; solo se generan los archivos faltantes, por lo que los créditos se gastan una vez). Conjunto principal: whoosh_soft, whoosh_deep, pop_soft, tick_ui, counter_roll, stamp, paper_slide, impact_heavy, splash_big, bubbles, sonar_ping, low_hum, whale_moan, heartbeat_slow, riser_tension, scan_beep, warning_beep, strike_line, gulp, boat_motor; agregar sonidos específicos de la criatura cuando sea necesario. Normalizar las copias a -20 LUFS en studio/public/sfx/. Colocar cada SFX en la acción a la que pertenece (entrada de elemento, contador, sello, impacto, cambio de escena) con <Sfx at=... vol=...> dentro de la escena, volumen 0.3-0.6, nunca más de uno por segundo; la voz permanece encima.
Paso 7 - Material de archivo (objetivo: 6-10 clips, 3-6 s cada uno, en picos emocionales; máximo 8% del tiempo de ejecución)
Fuentes, en este orden (solo estas; nunca descargas de YouTube/TikTok, imágenes documentales o cualquier cosa marcada como "solo uso editorial"):
- Pixabay (automático, API). Una PIXABAY_API_KEY sirve videos
https://pixabay.com/api/videos/?key=...&q=...y fotoshttps://pixabay.com/api/?key=...&q=.... Máximo 100 solicitudes/60 s; almacenar en caché cada respuesta durante 24 h en assets/stock/_cache; sin descargas masivas. Herramientas: tools/stock.py, tools/stock_pick.py. - NOAA (manual, mejor para la especie real). NOAA no tiene API de video de archivo. Claude encuentra los clips (páginas de especies de NOAA Fisheries y galería de videos, NOAA Ocean Exploration, NOAA Photo Library, las propias cargas de NOAA en Wikimedia Commons) y le da al usuario una lista numerada: enlace de página directa, qué muestra el clip, el espacio que llena, la línea de crédito exacta y el archivo a elegir (MP4 más grande, idealmente 1080p). El usuario descarga en assets/stock//noaa/. El material filmado por el personal de NOAA es generalmente de dominio público, pero leer cada página: muchos clips de ballenas se filman bajo un permiso de investigación o por un contratista y requieren una línea de crédito como "NOAA Fisheries, permiso #XXXX" o el nombre del fotógrafo; si una página restringe la reutilización, omitir el clip. Después de la descarga, leer SIEMPRE la placa de apertura y los créditos finales del archivo: las placas B-roll de NOAA Fisheries dicen "Todo el material cortesía de NOAA... Por favor, acreditar a NOAA Fisheries" más cualquier número de permiso (seguro); las películas educativas (ej. Ocean Today) a menudo enumeran colaboradores externos como casas de producción o agencias de archivo en los créditos finales, por lo que sus tomas NO son de dominio público y deben ser rechazadas; también rechazar archivos con subtítulos o logotipos incrustados. Usar solo los segmentos cuya placa nombra la especie objetivo (los paquetes B-roll mezclan especies), y decir "NOAA no respalda este canal" en la descripción. Nunca usar el logotipo de NOAA.
- Pexels (enlaces manuales). La emisión de claves API estaba en pausa la última vez que se verificó (noviembre de 2026), por lo que Claude busca en pexels.com/videos (Claude en Chrome o búsqueda web) y le da al usuario enlaces de página de clip directos con qué descargar (Full HD 1920x1080) en assets/stock//pexels/. Descargar algunos clips manualmente para un video está bien bajo la licencia de Pexels (uso comercial permitido); sin scraping masivo o con scripts. Si luego aparece una PEXELS_API_KEY en .env, usar la API en su lugar (encabezado
Authorization: <key>,GET https://api.pexels.com/v1/videos/search?query=...&orientation=landscape&size=medium&per_page=.., 200 solicitudes/hora). - Wikimedia Commons (manual, ocasional). Solo archivos con una licencia clara PD / CC BY / CC BY-SA; registrar autor + licencia. Colocar los clips donde los pone la referencia: justo después de la apertura en frío (el animal real o un buzo), en afirmaciones "del mundo real" (salto, manada, barco, caza de ballenas, aéreo), y en el giro/ecosistema; distribuirlos (nunca 3 seguidos). Para cada espacio buscar 3-5 sinónimos, conservar solo los resultados cuyas etiquetas/títulos contengan el sujeto, luego extraer un fotograma por candidato con ffmpeg y MIRARLO; rechazar especies incorrectas (una yubarta no es una ballena azul) y tomas fuera de tema. Un clip de una especie diferente solo puede usarse para una línea general ("grandes ballenas") con una nota en pantalla "(mostrado: ballena jorobada)". Graduar los clips más oscuros/fríos para que coincidan con la paleta, fundido de 8 fotogramas dentro y fuera. Los créditos son obligatorios para cada fuente. Cada clip muestra un pequeño crédito en pantalla en la parte inferior izquierda.eeee