⚙️ Configuración de la API
Tu API key de Anthropic se guarda solo en este navegador (localStorage). Nunca se envía a ningún otro sitio.
🔗 Cadenas de modelos — si uno rechaza, se prueba el siguiente
Un modelo por línea, con el formato proveedor:modelo. Se prueban en orden y se salta solo al siguiente cuando uno falla o bloquea. Deja el campo vacío para volver a la lista por defecto. Los proveedores cambian los nombres de sus modelos cada pocos meses: si uno deja de existir, edítalo aquí sin tocar la app.
No todas las imágenes van a la misma cadena. Las que llevan cuerpo (antes, después, mixta, la modelo) van a la de CUERPO, que son los modelos que de verdad hacen el después con glúteos y busto grandes. Las que no llevan cuerpo (producto, envase, fondo, b-roll) van a la BARATA, que cuesta 1 centavo en vez de 2,6 y da igual de bien un fondo. La de IMÁGENES de abajo es la de respaldo, para lo que no cae claramente en ninguna. Mira 🧠 → 🤖 ¿Qué IA usa cada cosa? para ver la tabla medida con tu propio dinero.
💵 Lo que cuesta cada cosa
Pon aquí lo que te cobra cada proveedor y la app te dice, antes de pulsar, cuánto vale esa generación — y lleva la cuenta de cada proyecto y del mes. Los números que trae son órdenes de magnitud para empezar: pon los tuyos reales, que los precios cambian.
🧠 Cerebro compartido entre equipos
Lo que la app aprende —tus reglas de estilo y qué anuncios funcionaron— se queda en este computador. Aquí se pone en un sitio común para que todos tus equipos aprendan de todos. Solo se comparte lo destilado: las reglas y los resultados, nunca tus llaves ni tus proyectos.
🔗 Un solo proxy para los tres proveedores (opcional)
WaveSpeed, APImart y OpenAI cada uno puede necesitar su propio Cloudflare Worker como proxy CORS — pero puedes usar el MISMO Worker para los tres si lo actualizas a la versión "genérica" de la FAQ (busca "un solo proxy para todo"). Llena este campo y listo, ya no hace falta llenar el proxy individual de cada proveedor más abajo. Si ya tenías el Worker de WaveSpeed funcionando y no quieres tocarlo, déjalo vacío y sigue usando los proxies individuales de abajo como antes — nada se rompe.
🌊 WaveSpeedAI — generación real de imagen/video
Con esto, cada prompt tiene un botón "Generar" que crea la imagen/video de verdad, sin que tengas que copiar y pegar en otra plataforma. Usa modelos mainstream (no la línea "spicy"/explícita) — menos estrictos con contenido de fitness/skincare/salud legítimo que las apps de consumo, pero no sin política alguna.
Enrutamiento automático de imagen — sin que toques nada: el character sheet (la referencia maestra de identidad) va directo al modelo de máxima calidad (Nano Banana Pro, $0.070/img) porque un error ahí se propaga a todo lo demás. Todo lo demás va al modelo económico (Nano Banana 2 Edit Fast, $0.045/img — 36% más barato, 90-95% de la misma calidad). Si el económico bloquea algo por un patrón que huele a moderación, escala solo al modelo alterno — nunca ante fallas de red o de tiempo, solo ante bloqueos reales.
last_image, tail_image), cámbialo aquí. Con una sola referencia este campo no se manda.
🎙️ Videos con diálogo — lip-sync perfecto
Para diálogo, LA FRAGUA ya NO genera voz nativa dentro del video (no garantiza sincronía). En su lugar: 1) convierte el texto a voz, 2) le pega esa voz a la foto de tu modelo con un modelo de lip-sync dedicado — y le envía además las acciones exactas del guion (no solo la voz), para que la persona haga lo que dice el prompt y no solo mueva los labios.
El TTS necesita saber cuál voz usar, no solo el texto. Si dejas vacío "voice_id de ElevenLabs", LA FRAGUA ya elige sola una voz colombiana de ElevenLabs (mujer u hombre según lo que diga el guion en cada toma) — misma voz para todas las tomas del mismo personaje. Si pones un voice_id fijo ahí, esa gana siempre, para todas las tomas. Orden completo: 1) tu voice_id de ElevenLabs si lo pusiste; 2) automática colombiana por género (nueva); 3) clonar un audio de referencia real; 4) un voice_id fijo preestablecido; 5) diseñar una voz automática por descripción (la más incierta).
🔄 Recuperación automática
Si "Generar" se agota esperando pero la tarea sí quedó creada, LA FRAGUA la sigue revisando SOLA (cada 25s) y la carga apenas esté lista — no hace falta pegar ningún ID ni tener acceso a tu cuenta de WaveSpeed. Esto también funciona para cualquier persona a la que le compartas este archivo: el guion y lo ya generado quedan guardados en este navegador, así que recargar la página no borra nada ni deja nada a medio camino.
🧩 APImart — proveedor alterno (GPT-Image-2 + Gemini Omni Flash)
Motor alterno al de WaveSpeed. Cambia cuál usan TODOS los botones "🌊 Generar" con el interruptor arriba a la derecha (junto a Configuración) — no hay que tocar nada aquí para cambiar de uno a otro, solo para poner tu API key la primera vez. Ambos comparten las mismas referencias (state.assets): si generaste el modelo con uno, el otro sigue usando esa misma cara, nunca inventa otra persona.
Diferencia clave en video con diálogo: con WaveSpeed, la voz sale de ElevenLabs (control fino de acento colombiano) y el lip-sync es un paso aparte. Con APImart, Gemini Omni Flash genera voz + acciones + labios en un solo paso a partir del prompt — sigue mejor las acciones del guion, pero el acento colombiano queda a criterio del modelo (se le pide explícitamente en el prompt, sin garantía tipo voice_id). Úsalo como respaldo cuando WaveSpeed no siga bien las acciones.
https://tu-proxy.workers.dev) — nunca la base oficial de APImart ni nada terminado en /v1, LA FRAGUA ya le agrega la ruta completa sola. Instrucciones en la FAQ de más abajo.
🎨 OpenAI / ChatGPT — SOLO para imágenes de ejemplo en la caja de herramientas
Esto NUNCA se usa para generar contenido final de anuncios — solo aparece como botón adicional "🎨 Ejemplo con ChatGPT" en las tarjetas de la caja de herramientas (character sheet, ángulos, vestuario, fondo, etc.), tal como pediste, para no arriesgar que redes sociales detecten el contenido publicitario como hecho con IA de OpenAI.
⚠️ A pedido tuyo, tu API key SÍ quedó puesta por defecto dentro de este archivo. Recuerda: si este archivo termina en un sitio público (ej. subido a Netlify sin restricción), cualquiera podría verla con clic derecho → "ver código fuente". Si en algún momento quieres quitarla del código y que cada quien la pegue en su propio navegador, dime y la saco.
https://api.openai.com. Mismo código de la FAQ, solo cambiando el destino.
Datos del producto
Con esto la IA construye personaje, tono y dolores correctos desde el inicio.
🧍 …o constrúyelo con tus hojas 3×3
La cara la fija una hoja de rostros; el cuerpo, una hoja de cuerpos. La misma receta de dos pasadas que en 👗 Modelos, pero sin salir de aquí — y el resultado queda puesto como avatar de todas las tomas.
¿Ya tienes guion, o lo forjamos aquí?
Elige el modo — esto cambia lo que la IA hace con tus palabras.
Clasificación de funnel
Setup prompts — antes de animar nada
Usa esto primero, en tu herramienta de imagen, para tener las fotos base del modelo y el producto.
Tomas de video
Cada toma dura máximo 10 segundos. Edita el diálogo si quieres — la app avisa si una acción se desincroniza.
🛡️ Riesgo de filtro (audio/contenido de tu plataforma de video)
Busca patrones que suelen disparar los filtros automáticos de Kling/Higgsfield/Veo/etc. (ej: enumerar carencias corporales) y propone alternativas con la misma intensidad, no versiones aguadas.
🧰 Caja de herramientas — biblioteca completa
Prompts fijos de la biblioteca de AvatarHype Academy. No necesitan IA — se generan al instante.
🧬 Motor 6C — prompts de avatar con look de foto real
Coge una imagen de tu modelo, la desarma en seis capas —personaje, cámara, ropa, contexto, luz y anclajes— y la vuelve a montar como prompt. Lo que hace que funcione no es lo que dice, sino lo que tiene prohibido decir: nombrar "render" o "hiperrealista" empuja al modelo justo al look de plástico que queremos evitar, así que habla en lenguaje de foto de teléfono.
Cambiar solo una cosa
Mantiene la misma persona, la misma cámara y la misma luz palabra por palabra, y reescribe únicamente la capa que elijas. Es la forma de sacar una serie coherente en vez de una foto suelta.
🎙️ Voz en off / B-roll — el avatar no habla
Clips donde el personaje actúa una escena sin hablar (no talking) para que narres tú por encima en edición. Usa los datos del producto de arriba.
🎭 Replicar video con mi modelo
Pega la URL de un video y las fotos de tu modelo. El prompt de reemplazo de identidad se escribe solo — no tienes que redactar nada en inglés. Usa Seedance video-edit, que sustituye a la persona conservando movimiento, cámara, luz, escena y tiempos.
Alternativa: WAN 2.2 Animate — el método anterior
Más barato y rápido, pero copia el movimiento sin el bloqueo de identidad de Seedance: el parecido con tu modelo es menor.
Producto, mercado y estilo
Este pipeline vende con datos duros y storytelling reflexivo — no con neuromarketing agresivo.
📦 Tu producto, dibujado en este estilo
Esto va antes que nada: si el producto aparece en la escena 3, de poco sirve prepararlo en el paso 8. Pon la foto real de tu envase y se dibuja en el estilo elegido — Pixar, Simpson, South Park, anime, fruta. La imagen que salga se usa como referencia en todas las escenas donde aparezca, así el envase es el mismo en todas y no uno inventado distinto cada vez.
El camino largo
💡 O empieza por una idea
El camino largo saca datos duros y construye desde ahí. Este es el corto: historias del tipo que se comparte en TikTok — «mi marido me dejó por una flaca…» — con su gancho, su antagonista y su vuelco final. Toca una y se guarda como tu ángulo; dale a otras tantas veces como quieras hasta que salte la buena.
Producto y análisis
La imagen para el scroll y entrega el argumento; el titular, el texto y el botón los pone el propio anuncio de Meta. Por eso aquí nunca se mete un botón de marca dentro de la imagen: delata el anuncio y mata la ilusión nativa, que es justo lo que hace convertir a estos formatos.
🔁 Variaciones de un creativo
Los estáticos que de verdad venden siguen una fórmula de tres pasos: el título (99 de cada 100 personas lo leen primero y ahí deciden si siguen o hacen scroll), la prueba visual (no un solo "después", sino la transformación por etapas en el tiempo) y el cierre (una razón para comprar hoy: descuento visible, escasez o regalo). Pon aquí un creativo que ya tengas y saca variaciones que cambien una sola variable cada una, que es lo único que permite leer después qué fue lo que funcionó.
De dónde partimos
⚡ Creativo ANTES/DESPUÉS de un clic
👗 Tus modelos
Aquí vive tu catálogo, separado por carpetas, y desde aquí se crean modelos nuevos. Una hoja es una foto de contacto con varios ángulos de la MISMA persona (las 3×3 que ya usas). La hoja de rostros dice quién es; la de cuerpo dice cómo es de cuerpo. Se combinan.
🗂️ El catálogo
✨ Crear un modelo
Elige una cara, un cuerpo y una pose. Sale UNA foto suelta —nunca la rejilla— con la cara de la primera hoja y el cuerpo de la segunda. El ajuste del lado (antes o después) se aplica solo, en una segunda pasada sobre la foto ya hecha: pedirlo todo de golpe devuelve las dos fotos iguales.
Estas dos son la medida: la foto del ancla se hace copiando las proporciones de la hoja 3×3 que elijas aquí, no inventándolas. Y como todas las escenas y todos los videos salen del ancla, esa medida es la que llevan después — aunque el video sea animado, el cuerpo es el que elegiste.
📦 Biblioteca de productos
Guarda aquí cada producto una sola vez. Después, en cualquier modo, lo eliges del desplegable y se rellenan solos los campos de ese modo. En la app de escritorio la biblioteca viaja con la carpeta portable.
📸 Banco de fotos antes / después de este producto
Guarda aquí las fotos reales de antes y de después de tus clientes o modelos. Quedan pegadas al producto y se usan como referencia para los creativos de antes/después — no hay que volver a buscarlas. Puedes pegar una URL o elegir el archivo de tu PC.
Ningún campo es obligatorio, pero cuantos más rellenes menos tendrás que escribir después: Qué es alimenta el modo animado y las creatividades, ángulo y cliente ideal alimentan el UGC, y las fotos se adjuntan solas como referencia al generar imágenes.
▸ ❓ Qué hacer en cada momento
pulsa para desplegarUn prompt legítimo se bloqueó — ¿qué hago? real
Normalmente no tienes que hacer nada: si el modelo económico bloquea algo por un patrón que huele a moderación, LA FRAGUA escala sola al modelo alterno (GPT Image 2, que tiene su propia moderación, distinta, no ausente) — verás el mensaje de estado cambiar mientras lo hace. Solo si los dos modelos fallan aparece el error real, y ahí sí queda un botón manual "🔁 Reintentar con modelo alterno" por si quieres forzar otro intento. Si ambos siguen bloqueando, probablemente el contenido sí cruza una línea real, no un falso positivo.
¿Cómo logro que la voz suene humana y colombiana de verdad? real
Un voice_id preestablecido genérico o el diseño automático por descripción NO garantizan un acento colombiano específico — suelen salir en español neutro. Dos formas que sí lo garantizan: (1) déjalo simplemente automático — si el campo "🎤 voice_id de ElevenLabs" está vacío, LA FRAGUA detecta sola si cada toma es de un personaje hombre o mujer (según el guion) y elige una voz colombiana real de ElevenLabs para cada uno, manteniendo la misma en todas sus tomas; también puedes hacer clic en el campo para ver la lista completa (~34 voces, paisa/bogotana/Medellín/neutra) y forzar una específica; (2) sin ElevenLabs, usa "🎙️ Clonar voz real" con un audio corto (10-20s) de alguien hablando español colombiano — puede ser tu propia voz. Ambas copian una voz de verdad en vez de sintetizarla desde una descripción de texto.
Me da error "field 'voice_id' is required" al generar una toma real
El TTS necesita saber CUÁL voz usar, no solo el texto. Lo mejor es usar "🎙️ Clonar voz real" (ver pregunta anterior). Si no tienes un audio a mano, la alternativa rápida: ve a el playground de minimax/speech-02-turbo en WaveSpeed, copia el nombre de una voz preestablecida, y pégalo en "voice_id FIJO". Si dejas todo vacío, LA FRAGUA intenta diseñar una voz automática por descripción — es el respaldo menos confiable de los tres.
¿Por qué el character sheet usa un modelo distinto? real
Porque es la única imagen que define la identidad exacta que se va a repetir en todo lo demás — un error ahí (una cara ligeramente distinta) se nota en cada toma después. Por eso va directo al modelo de máxima calidad sin pasar primero por el económico, aunque cueste un poco más. Es la única generación donde vale la pena ese costo extra.
¿Qué hace "✨ Autocompletar"? real
Escribe solo el nombre del producto y presiona el botón. Si es un producto con el que ya trabajamos antes (GLADIADOR, Flexacil, Multi Collagen, Mega Red, etc.), llena los 4 campos al instante sin gastar IA. Si es un producto nuevo, busca información real en la web y llena los campos con el mismo tono directo — revisa siempre el resultado, porque una búsqueda puede no encontrar el producto exacto.
¿Qué es el botón "🌊 Generar" en cada prompt? real
Genera la imagen o video de verdad con WaveSpeedAI, sin que copies nada a otra plataforma (configúralo primero en ⚙️ Configuración). La primera imagen que generes del avatar y del producto se guarda sola como referencia, y los siguientes prompts que digan "usa esta imagen" la usan automáticamente. Si generas algo que te guste más como referencia, usa el botón "📌 Usar como avatar/producto de referencia" bajo el resultado para forzarlo.
¿Por qué me da "Failed to fetch" al generar? real
WaveSpeed no permite que una página web le hable directo desde el navegador (CORS) — necesitas un pequeño "puente" gratis. Toma 2 minutos:
1. Ve a workers.cloudflare.com y crea una cuenta gratis.
2. "Create Worker" → borra el código de ejemplo → pega este:
export default {
async fetch(request) {
const url = new URL(request.url);
const target = 'https://api.wavespeed.ai' + url.pathname + url.search;
const cors = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Headers': 'Authorization, Content-Type'
};
if (request.method === 'OPTIONS') {
return new Response(null, { headers: cors });
}
const init = {
method: request.method,
headers: {
'Authorization': request.headers.get('Authorization') || '',
'Content-Type': 'application/json'
}
};
if (request.method === 'POST') {
init.body = await request.text();
}
const resp = await fetch(target, init);
const body = await resp.text();
return new Response(body, {
status: resp.status,
headers: { 'Content-Type': 'application/json', ...cors }
});
}
};
3. "Deploy" → copia la URL que te dan (algo como https://tu-proxy.tu-usuario.workers.dev).
4. Pégala en LA FRAGUA → ⚙️ Configuración → "URL de tu proxy CORS" → Guardar. Listo, "Generar" ya debería funcionar.
¿Qué es el interruptor 🌊 WaveSpeed / 🧩 APImart arriba? real
Elige qué proveedor genera imagen/video cada vez que le das a "🌊 Generar" — en cualquier prompt, en cualquier toma. Cambialo cuando quieras y vuelve a darle "Generar" al mismo prompt; usa exactamente la misma referencia de tu modelo/producto que ya tenías (nunca inventa una persona distinta), así hayas generado esa referencia con el otro proveedor. Con WaveSpeed, el diálogo usa una voz de ElevenLabs (acento colombiano elegido con precisión) más un modelo de lip-sync aparte. Con APImart, Gemini Omni Flash genera voz + acciones + labios en un solo paso a partir del guion — sigue mejor las acciones si WaveSpeed te falla en eso, pero el acento colombiano queda a criterio del modelo (se le pide en el prompt, sin garantía tipo voice_id). Úsalo como respaldo, no como reemplazo automático.
Me da "Failed to fetch" al generar con APImart real
Es el mismo tipo de bloqueo CORS que con WaveSpeed, pero necesita su PROPIO proxy — el de WaveSpeed apunta a otro servidor y no sirve aquí. Repite los mismos pasos de arriba, pero con este código (solo cambia el destino):
export default {
async fetch(request) {
const url = new URL(request.url);
const target = 'https://api.apimart.ai' + url.pathname + url.search;
const cors = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Headers': 'Authorization, Content-Type'
};
if (request.method === 'OPTIONS') {
return new Response(null, { headers: cors });
}
const init = {
method: request.method,
headers: {
'Authorization': request.headers.get('Authorization') || '',
'Content-Type': 'application/json'
}
};
if (request.method === 'POST') {
init.body = await request.text();
}
const resp = await fetch(target, init);
const body = await resp.text();
return new Response(body, {
status: resp.status,
headers: { 'Content-Type': 'application/json', ...cors }
});
}
};
Despliega este como un Worker NUEVO (no reemplaces el de WaveSpeed) y pega su URL en ⚙️ Configuración → "URL de tu proxy CORS para APImart" → Guardar configuración de APImart.
Me da "Failed to fetch" al generar con OpenAI/ChatGPT real
Mismo bloqueo CORS, pero OpenAI necesita un Worker con una diferencia importante: el botón "🎨 Ejemplo con ChatGPT" a veces sube imágenes de referencia como archivo binario (multipart), no solo texto — el Worker de WaveSpeed/APImart de arriba dañaría esas imágenes si lo reusas aquí porque lee el cuerpo como texto. Usa este, que reenvía todo en binario y respeta el tipo de contenido original:
export default {
async fetch(request) {
const url = new URL(request.url);
const target = 'https://api.openai.com' + url.pathname + url.search;
const cors = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Headers': 'Authorization, Content-Type'
};
if (request.method === 'OPTIONS') {
return new Response(null, { headers: cors });
}
const init = {
method: request.method,
headers: { 'Authorization': request.headers.get('Authorization') || '' }
};
const ct = request.headers.get('Content-Type');
if (ct) init.headers['Content-Type'] = ct; // preserva el boundary del multipart — NO forzar siempre a JSON
if (request.method === 'POST') {
init.body = await request.arrayBuffer(); // binario, no texto — para que no se dañen las imágenes de referencia
}
const resp = await fetch(target, init);
const body = await resp.arrayBuffer();
return new Response(body, {
status: resp.status,
headers: { 'Content-Type': resp.headers.get('Content-Type') || 'application/json', ...cors }
});
}
};
Despliega este como un Worker NUEVO (distinto a los de WaveSpeed y APImart) y pega su URL en ⚙️ Configuración → "URL de tu proxy CORS para OpenAI" → Guardar configuración de OpenAI.
¿Cómo uso un solo proxy para todo, en vez de uno por cada proveedor? real
Ninguna API puede dejar de pedir CORS por decisión tuya o mía — eso lo decide cada proveedor en su propio servidor (WaveSpeed, APImart y OpenAI simplemente no lo activaron, a diferencia de Anthropic). Lo que SÍ se puede reducir es tener que crear un Worker nuevo por cada uno. Reemplaza el código de tu Worker YA desplegado (o crea uno solo) por este, que reenvía a cualquiera de los tres según lo que LA FRAGUA le pida en la ruta:
export default {
async fetch(request) {
const url = new URL(request.url);
const parts = url.pathname.split('/').filter(Boolean);
const targetHost = parts.shift(); // ej: "api.wavespeed.ai", "api.apimart.ai" o "api.openai.com"
const cors = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Headers': 'Authorization, Content-Type'
};
if (request.method === 'OPTIONS') {
return new Response(null, { headers: cors });
}
if (!targetHost) {
return new Response('Falta el host destino en la ruta', { status: 400, headers: cors });
}
const target = 'https://' + targetHost + '/' + parts.join('/') + url.search;
const init = {
method: request.method,
headers: { 'Authorization': request.headers.get('Authorization') || '' }
};
const ct = request.headers.get('Content-Type');
if (ct) init.headers['Content-Type'] = ct;
if (request.method === 'POST') {
init.body = await request.arrayBuffer();
}
const resp = await fetch(target, init);
const body = await resp.arrayBuffer();
return new Response(body, {
status: resp.status,
headers: { 'Content-Type': resp.headers.get('Content-Type') || 'application/json', ...cors }
});
}
};
Pégalo en tu Worker de Cloudflare (puedes reemplazar el que ya tenías de WaveSpeed — su URL no cambia) → copia esa URL → ⚙️ Configuración → arriba de todo, "URL del proxy universal" → Guardar. Con eso queda listo para los tres proveedores a la vez; no hace falta tocar los campos de proxy individuales.
¿Cómo se genera el video con diálogo? real
En dos pasos automáticos: primero convierte el texto a voz (TTS), luego pega esa voz a la foto de tu modelo con InfiniteTalk, un modelo de lip-sync dedicado (no genera audio nativo dentro del video, que no garantiza sincronía). Esto da labios, dientes y movimiento de cabeza mucho más reales. Si el resultado no te convence, ajusta el modelo de lip-sync en Configuración — hay alternativas como Kling AI Avatar.
¿Qué es "Replicar video con mi modelo"? real
Pega la URL de cualquier video (una acción, un anuncio, un movimiento que te guste) y la foto de tu modelo — la IA genera un video nuevo con tu modelo replicando esa escena. Modo "Reemplazar" mantiene el fondo/cámara del video original; modo "Animar" solo copia el movimiento.
Ya llené los datos del producto — ¿ahora qué? real
Elige el Modo A o B en el paso 2. Si no tienes guion, deja el Modo A. Luego presiona "Forjar contenido completo".
¿En qué orden uso lo que se generó? real
1) Copia los setup prompts y genera las imágenes base. 2) Copia el prompt completo de cada toma y pégalo en tu herramienta de video. 3) Usa la caja "qué hace el personaje" para explicarle a tu editor qué debe pasar en pantalla.
Edité el diálogo y algo se puso en rojo real
Significa que una acción apuntaba a una palabra que ya no está en el texto. Presiona "Re-sincronizar" en esa toma y la IA la ajusta sin tocar el resto.
¿Qué es la Caja de herramientas y cuándo la uso? real
Son los prompts fijos de la biblioteca (ángulos, character sheet, moda, skincare, mockup de app). No necesitan IA — elige del selector y copia. Úsalos en cualquier momento, no dependen de haber "forjado" el contenido principal.
¿Qué es "voz en off / b-roll"? real
Clips donde el personaje actúa (camina, aplica el producto, se despierta) pero no habla. Tú grabas o generas la narración por separado y la montas encima en edición. Útil para TOFU sin depender de un guion hablado.
¿Por qué el modo animado no suena agresivo? animado
Porque este pipeline vende distinto: con datos duros y una reflexión tipo "amigo que sabe algo interesante", no tocando inseguridades. Prohíbe palabras como "revolucionario" y hooks que hablen directo al cliente. Es literalmente lo opuesto a la regla de "no ablandar" del modo real — por diseño.
¿Qué son los pasos marcados como "puente"? animado
Tu documento original tenía huecos (los prompts 3, 5, 7 y 8 no estaban en lo que pegaste). Construí un paso equivalente para que el flujo no se rompa, pero está marcado claramente para que sepas que no es el prompt oficial de tu sistema — si lo consigues, puedes usarlo en su lugar y saltarte ese paso aquí.
El paso 2 (insights) — ¿de dónde saca los datos? animado
Solo de lo que tú pegas en la caja de texto. La IA tiene instrucción explícita de no inventar cifras — si un insight no tiene dato duro en tu texto, lo marca como "necesita refuerzo" en vez de inventarlo.