Vídeo promocional (promo-video)
Solo haces dos cosas: seleccionar tomas y rellenar texto. No escribas código, no modifiques ningún archivo en template/, scripts/ o industries/, y no escribas coordenadas, fotogramas ni valores de color.
A continuación, <SKILL> = el directorio donde se encuentra este archivo. Ejecuta los comandos con Node 22 / Python 3.10. Si eres un hablante de inglés o necesitas un vídeo en inglés → lee <SKILL>/SKILL.en.md.
Flujo de trabajo
- Define la industria y el idioma.
meta.industry:software(por defecto) /food(alimentación) /ecommerce(comercio electrónico) /education(educación) /beauty(belleza) /travel(viajes). Si eliges la industria incorrecta, las tomas disponibles y las reglas de cumplimiento serán incorrectas.meta.lang:zh(por defecto) /en. Si el vídeo necesita subtítulos en inglés y el usuario es de habla inglesa, escribeen(consulta el paso 5 para más detalles).- Si la industria no es software → primero lee
<SKILL>/industries/<industry>/recipe.md(para proyectos en inglés, leerecipe.en.md): allí encontrarás las combinaciones de tomas recomendadas para esa industria, elbrief-template.md(qué preguntas debe incluir el resumen de esta industria), ytest-brief.md/expected.md(ejemplos de infracciones de cumplimiento). Saltarte este paso hará que fácilmente escribas contenido que será bloqueado.
- Lee el resumen. Comprende las secciones según la
brief-template.mdcorrespondiente; si faltan el "nombre del producto / propuesta de venta en una frase / escenario del problema / acción principal / 2–4 puntos clave de venta", pregunta primero, no inventes datos ni funciones.meta.productescribe exactamente el nombre del producto del resumen. En todo el vídeo (hook, endCard) usa solo este nombre. Labrandde la endCard debe ser idéntica a este nombre.meta.action: obligatorio. Una frase que describa "lo que el usuario hace → lo que el producto proporciona" (ej: "toma foto del recibo → rellena automáticamente el importe y la categoría"), sin mostrar la imagen. El texto de las tomas de demostración (chat/phone/mockApp/photoShot) debe reflejar esta acción, la validación lo comprobará.- Si el resumen tiene contenido en "método de obtención", escríbelo exactamente en
meta.cta, y lactade la endCard lo copia; si el resumen dice "ninguno", no escribas nada en ninguno de los dos lugares. No inventes frases como "busca XX en la tienda de aplicaciones". - No escribas en los puntos de venta o en la endCard funciones que no aparezcan en el resumen.
- Si el resumen tiene contenido en "números y fuentes", copia cada uno en
meta.facts, con el formato[{"id":"f1","text":"texto original…"}](no es un array de cadenas simples). Cualquier número con unidad en la pantalla (duración, porcentaje, múltiplo, número de personas, cantidad de dinero) debe poder encontrarse aquí con el mismo número; si no hay fuente, se reporta como error, no como advertencia; si realmente no se dieron datos, escribe una afirmación cualitativa, no inventes números. Elparams.refs: ["f1"]de una toma puede asociar una afirmación (ej: "hecho al momento") con un hecho, para que lo verifiquen las reglas de la industria. - Para la misma acción en todo el vídeo, usa solo un número: si el counter escribe "3 minutos", en ningún otro lugar escribas "en segundos" o "3 segundos"; si el hook escribe "medio día", el valor anterior del counter también debe ser "medio día". La validación lo bloqueará. Los
statyitemsde la misma columna encomparetampoco pueden contradecirse (ej: columna izquierda que escribe "5 minutos" y "tres días"). - Si quieres anular el rango de duración predeterminado de 15 a 45 segundos (por ejemplo, si la estructura recomendada de la industria necesita más de 27 segundos), escribe
meta.durationRange: [15, 60]como un array de dos elementos. - Si se necesita un aviso persistente en la parte inferior (ej: "actividad por tiempo limitado, consulta la página de detalles del cupón"), escribe
meta.notices: un array de cadenas, máximo 3, que se combinarán en una sola línea y se mostrarán en la parte inferior.
- Crea el directorio:
promo/<nombre del producto en inglés>/, y escribe el storyboard enpromo/<nombre del producto en inglés>/storyboard.json. Copia las capturas de pantalla, grabaciones de pantalla o logotipos proporcionados por el usuario en el mismo directorio. - Selecciona el tema (
meta.theme):- Emocional, social, vida cotidiana →
warm-emotion - Desarrolladores, IA, herramientas técnicas →
tech-dark - Salud, aprendizaje, contabilidad, herramientas ligeras →
fresh-light - Oficina, B2B, productividad →
business-blue - Festivos, promociones, novedades →
festival-red - Alto nivel, minimalista, diseño →
mono-premiumSi hay un color de marca, escribemeta.brandColor(#RRGGBB); solo cambiará el color de acento.
- Emocional, social, vida cotidiana →
- Selecciona 5–9 tomas (la descripción de las tomas está en
<SKILL>/shots.md, con una tabla de las 18 tomas al principio).hookdebe ser la primera toma (2–3 segundos),endCarddebe ser la última (4 segundos). Debe haber al menos una toma que demuestre la acción principal (elmeta.actiondel paso 2); la validación lo comprobará:chatescribe messages + panel (pregunta → respuesta); omockAppescribe input (entrada/pregunta del usuario) + resultado (stat del dashboard, items del editor, done); si hay capturas de pantalla, usaphone.meta.industrydetermina qué tomas están disponibles (consultaindustries/<industry>/rules.jsonparaenabledShots, o directamente elrecipe.md); seleccionar una toma no permitida dará error en la validación. Las 7 tomas específicas de la industria (software no las tiene activadas por defecto):photoShotfoto/vídeo corto real (plato, producto, obra, habitación, área común, cocina)priceCardtarjeta de precios;storeCardtarjeta de tienda/mapa/reserva;reviewCardreseña real de cliente (transcripción textual, no se puede reescribir de forma más exagerada)factSheettabla de especificaciones/lista de contenido/plan de estudios/información de examen/tarjeta de colores;credCardtarjeta de credenciales/honoresbeforeAftercontrol deslizante de antes y después (solo disponible para belleza, requiereconsent:true+retouched:false) Elige las tomas intermedias según el tipo de producto, no uses una plantilla fija; la tarjeta de característicasfeaturesno es obligatoria. Dos requisitos estrictos (la validación lo recordará):- Al menos una toma intermedia de {compare, steps, phone, meter};
- No uses quickList y counter al mismo tiempo (si usas ambos, el vídeo se convierte en la plantilla repetitiva de hook → quickList → mockApp → counter → endCard).
Para la industria de software, combinaciones opcionales (elige una y luego adáptala al producto; para otras industrias, sigue directamente la estructura recomendada en
industries/<industry>/recipe.md): - Emocional/social para el consumidor (chat, emocional, compañía): hook(bubble) → chat demo (escribe 2–3 frases de subtítulos) → meter o compare que hablen del "impacto de esta frase" → quickList → endCard
- Mejora de productividad con herramientas (escritura, contabilidad, publicación, edición): hook(stat) → compare "antes vs ahora" → mockApp editor/form demo "entrada → resultado" → steps de cómo usarlo → endCard; o hook → quickList de los problemas → mockApp → steps → endCard
- Datos/oficina B2B (informes, reuniones, CRM): hook(icon) → phone con captura anotada o mockApp dashboard con input "pregunta → salida de datos" → compare o meter de resultados → steps → endCard; solo usa counter si el resumen proporciona duraciones numéricas (y entonces no uses quickList)
La duración total ideal es de 20 a 30 segundos (permitido 15–45, o el rango personalizado de
meta.durationRange). No uses el mismo tipo de toma consecutivamente. La diferencia demoodentre dos tomas consecutivas no debe superar 0.5 (inserta una toma de transición intermedia), de lo contrario, el fondo cambiará de forma brusca.
- Escribe los subtítulos (
captionde cada toma): una frase por toma, en letra grande estilo Douyin, dirigida al espectador, no una descripción de la animación (❌ "las tarjetas salen una por una, habla de lo que puede hacer" es una descripción de la toma, no un subtítulo).- En chino: máximo 2 líneas, usa
\npara el salto de línea; cada línea ≤12 caracteres chinos (letras y números cuentan como la mitad). Cuandometa.lang: "en", los subtítulos en inglés se convierten según el recuento de caracteres latinos (aproximadamente 1.8 veces el límite chino); consultadocs/shots/<type>.en.mdpara números concretos. - Usa
{}para rodear las 2–5 palabras más importantes, que se mostrarán en el color de acento; máximo 1 uso por subtítulo. - El
captiondel hook es el título de portada; escribe el problema del usuario o una pregunta contraintuitiva. - La endCard no lleva
caption; el eslogan se escribe enparams.slogan. - Un mismo subtítulo no puede parar más de 5 segundos. Para tomas de más de 5 segundos (ej. chat de 8–10 segundos), escribe
captioncomo un array de 2–3 frases, distribuyendo el tiempo de la toma de manera uniforme:"caption": ["No te apresures a enviar,\nlo que la otra persona necesita es {tu atención}", "Elige una, escríbela en el cuadro,\nenvía o {decide tú}"] - Los subtítulos deben hablar de la situación del usuario o del cambio que aporta el producto, y deben conectar con las tomas anteriores y posteriores; cómo se mueve la pantalla es cosa del componente, no hace falta escribirlo. Las palabras entre comillas «» en los subtítulos deben haber aparecido en la pantalla de esta toma o de una anterior (la validación lo comprobará).
- Si en los subtítulos se escribe una cantidad ("estas 4 frases", "tres respuestas"), debe coincidir con el número de elementos de esta toma (la validación lo comprobará).
- No uses frases genéricas ("tres cosas, {esto…}", "estos tres pasos", "estos momentos, ¿tú también…"), ni copies los subtítulos y parámetros de
examples,shots.mdospec; la validación lo recordará y te dará una estructura que puedas rellenar directamente; los ejemplos solo sirven para ver el formato. - No uses palabras repetidas ("planificar planificar"), no elimines caracteres de las palabras para cumplir con el límite ("problema" escrito como "proba"), no escribas errores ortográficos ("a ver" en lugar de "haber"), si te pasas del límite, cambia toda la frase por otra expresión.
- No escribas lenguaje absoluto ("todo resuelto", "claramente", "totalmente seguro", "100%"): es difícil que el producto lo cumpla; la validación lo recordará; cámbialo por una expresión más mesurada.
- Para el salto de línea, escribe solo una barra invertida
\n; si necesitas comillas en los subtítulos, usa «», no las comillas dobles inglesas".
- En chino: máximo 2 líneas, usa
- Escribe
mood(0–1): problema/tensión 0.8–1, punto de inflexión 0.5, producto y puntos de venta 0–0.3, endCard 0. Tanto el color de fondo como la música de fondo lo siguen. - Escribe storyboard.json, con el formato del ejemplo completo al final del documento. La duración se escribe con
dur(segundos), en múltiplos de 0.5. El archivo debe estar codificado en UTF-8. En Windows en chino, la codificación predeterminada es GBK: usa un editor/herramienta de escritura de archivos que escriba directamente en UTF-8; si usas PowerShell, usa[IO.File]::WriteAllText($p, $json, [Text.UTF8Encoding]::new($false)); si usas Python, usaopen(p, "w", encoding="utf-8"). No usesecho >niOut-File(versión 5.1) para escribir caracteres chinos. Enchat,panel.repliesson las sugerencias del producto que "yo" le envía a la otra persona; escríbelas desde la perspectiva de "yo" (yo digo que tengo que trabajar horas extra, la respuesta sugerida no puede ser "no trabajes horas extra más, quédate conmigo" — ese es el tono de la otra persona); si haypanel, no escribastyping. - Valida, corrige cada error hasta que pase:
El formato del error es "Toma N (tipo) campo: problema → cómo solucionarlo". Sigue las instrucciones de "cómo solucionarlo". Los resultados se dividen en tres categorías:node <SKILL>/scripts/validate.mjs promo/<nombre del producto>/storyboard.json- Errores: deben corregirse; si no se corrigen, no se genera el vídeo.
- Advertencias: intenta corregirlas (calidad del texto, estructura que no se parezca demasiado a una plantilla); si no se pueden corregir, el vídeo se puede generar, pero en la entrega debes poder explicar al usuario por qué no se corrigieron.
- Necesita revisión humana: cuestiones que la validación no puede determinar (ej. "¿esta reseña es realmente palabra por palabra?", "¿esta credencial proviene realmente del resumen?"); no modifiques el storyboard, enuméralas tal cual para el usuario y deja que él las confirme.
- Genera el vídeo (aproximadamente 2 minutos, la música de fondo se genera automáticamente):
node <SKILL>/scripts/make.mjs promo/<nombre del producto>/storyboard.json --out promo/<nombre del producto>--outes obligatorio (para pruebas, usa--round <número de ronda>, el resultado se unifica entests/<número de ronda>/<nombre del producto>/; varios vídeos de la misma ronda usan el mismo nombre de ronda, no generes directorios con marcas de tiempo por tu cuenta). Resultados:video.mp4,sheet.png(un fotograma por segundo en un mosaico),check/(fotograma 0 + fotogramas a tamaño completo antes del final de cada toma),report.txt(informe de diseño de texto: si se rompen palabras, si se sale del ancho),layout.json. Si solo quieres ver rápidamente algunos fotogramas: añade--stills 0,3.5,8(segundos), solo genera esos fotogramas individuales, no el vídeo completo. - Primero revisa el final de
report.txt"autocomprobación de la máquina", "informe de diseño de texto", "autocomprobación del diseño" (make.mjs lo hace automáticamente: comprueba barras invertidas, nombres de producto, método de obtención, duración de la parada de los subtítulos, si el icono de la endCard y la letra pequeña de exención de responsabilidad se tocan, si hay líneas con palabras rotas o que exceden el ancho; durante el renderizado, mide la posición de cada bloque de texto y comprueba si el texto está recortado por una tarjeta, si dos bloques de texto se superponen, o si el texto sale de x150–930). Si hay ✗, corrige primero (un ✗ en el diseño suele deberse a que se ha escrito demasiado en algún campo: elimina entradas o acorta el texto); luego revisasheet.pngycheck/con la siguiente lista de verificación. Si hay problemas, modifica storyboard.json y vuelve al paso 9. - Entrega: entrega la ruta de
video.mp4ysheet.pngal usuario, junto con la "Lista de verificación previa a la publicación" (a continuación). Enumera los elementos de "Necesita revisión humana" del paso 9 textualmente, pídele al usuario que los confirme uno por uno. No tomes decisiones en su lugar.
Lista de verificación (revisa el mosaico, escribe una conclusión para cada elemento, no marques simplemente)
- El fotograma 0 ya tiene un título grande + imagen principal, no está en blanco ni a medio cargar; la portada no tiene caracteres extraños como
\no barras invertidas. - Cada toma tiene un protagonista que se mueve (puntero, números, tarjetas, burbujas de chat), no es una imagen estática; no es un "acercamiento y alejamiento de una imagen" para rellenar.
- Los subtítulos no tapan el sujeto, no se cortan, no hay palabras rotas (una palabra dividida en dos líneas); los subtítulos y la imagen hablan de lo mismo, la historia de las tomas consecutivas tiene continuidad.
- Los subtítulos son palabras dirigidas al espectador, no descripciones de la toma (no aparecen frases como "las tarjetas salen una por una" que describen la acción de la imagen).
- La acción principal realmente se ha representado (se ve "entrada/pregunta → resultado"), no es solo un panel ya hecho.
- El color de fondo cambia con la emoción: los problemas tienden al rojo, los puntos de venta y la endCard a tonos fríos.
- El nombre del producto en la endCard coincide con
meta.product; el método de obtención es el texto original del resumen o no aparece; no hay URLs ni códigos QR. - Los números deben ser coherentes: verifica los números de antes y después en las comparaciones (30 minutos frente a 5 segundos, la conclusión no debe ser "ahorra 25 minutos"); los números de la pantalla deben tener su fuente en
meta.facts. - No hay errores ortográficos, ni palabras inventadas para cumplir con el límite de caracteres ("subida automática" no puede escribirse como "autosubida"), ni lenguaje absoluto.
- Las tomas específicas de la industria se usan correctamente:
beforeAftersolo en belleza;reviewCardcita textualmente, sin reescribir de forma exagerada.
Lista de verificación previa a la publicación (entrégala al usuario, no la revises solo para ti)
- Enumera todos los elementos de "Necesita revisión humana": la lista
humandel resultado de la validación del paso 9, pásala textualmente al usuario, no decidas por él "debería estar bien". Comunes: si la cita dereviewCard/credCardes palabra por palabra con el resumen, si las reglas de la plataforma se han actualizado, si las credenciales de la industria están completas. - ¿
meta.industryestá bien elegido? (Si no, las tomas disponibles y las reglas de cumplimiento serán incorrectas). - Si hay personas reales, reseñas de clientes o fotos de antes y después, ¿se ha obtenido el consentimiento por escrito de las partes involucradas? (Campos como
consent/retouchedsolo son requisitos de validación; obtener el consentimiento real es responsabilidad del usuario, la validación no puede verificarlo). - La plataforma donde se publicará el vídeo (Douyin/WeChat Video Channels/Xiaohongshu/Extranjero) ¿coincide con
meta.platform? ¿Se han confirmado las reglas específicas de la plataforma (ej. que el carrito de compras no puede mostrar subtítulos de precios)? - Para proyectos bilingües chino/inglés: ¿los subtítulos en inglés los ha revisado un hablante nativo? La máquina solo verifica el recuento de caracteres y las palabras sensibles, no detecta expresiones extrañas.
Reglas estrictas (la validación las bloqueará)
- La primera toma debe ser
hook;endCarddebe ir al final. - La duración total debe estar entre 15 y 45 segundos (o el rango personalizado de
meta.durationRange); cada tipo de toma tiene su propio rango de duración (consultashots.md). - Cada campo tiene un límite de caracteres; si se supera, cambia toda la frase por una más corta; no elimines caracteres de las palabras para cumplir el límite, ni los cambies por inglés (cuando
meta.lang: "en", el inglés tiene su propio límite de caracteres, consulta la descripción de cada campo). - Solo puedes usar los campos, valores opcionales y nombres de iconos que aparecen en
shots.md; los campos mal escritos o adicionales darán error. - Al menos una toma debe demostrar
meta.action(consulta el paso 5); un mismo subtítulo no puede parar más de 5 segundos. - La
brandde la endCard =meta.product; lactade la endCard =meta.cta(si el resumen no lo proporciona, no se escribe en ninguno de los dos). - El texto de la pantalla no puede contener barras invertidas (si se escribe
\\nen JSON, se mostrará literalmente en la pantalla). - En la pantalla no pueden aparecer: URLs, códigos QR, "escanear código", @cuentas, "XX número: nombre", "sigue/busca XX número". Las palabras de la propia categoría del producto (ej. una herramienta que hace el diseño de una "cuenta oficial de WeChat") no se consideran captación de tráfico: añade la palabra a
meta.allowWords, no cambies el nombre del producto para pasar la validación. - No uses palabras extremas de la Ley de Publicidad: más, primero, único, primer, primera opción, exclusivo, top, absoluto, 100%, en toda la red, muy por delante… ("más reciente/último/primer paso" no cuentan). Si hay una base real, escríbela en
meta.allowWords. - Los números con unidad (duración/porcentaje/múltiplo/número de personas/cantidad de dinero) deben poder encontrarse con el mismo número en
meta.facts; si no están, se considera invención y se reporta como error. - Las reglas de la industria tienen tres niveles: block bloquea siempre (ej. afirmaciones de eficacia en estética médica, precio tachado sin base, reseña real sin indicar el mes); warn advierte pero no bloquea; human la validación no puede determinarlo, se enumera al usuario en la entrega (consulta el punto 1 de la "Lista de verificación previa a la publicación" anterior).
- Las rutas de los archivos multimedia son relativas al directorio de storyboard.json; los archivos deben existir. Las capturas de pantalla admiten png/jpg/webp, las grabaciones de pantalla admiten mp4.
Prohibiciones
- No modifiques ningún archivo en
template/,scripts/oindustries/; no escribas coordenadas, píxeles, números de fotograma, valores de color ni CSS. - No inventes datos ni fuentes que el usuario no haya proporcionado; los números en la pantalla deben encontrarse en
meta.facts; si no hay fuente, escribe "datos de ejemplo, consulta la realidad". - No aparezcan nombres, logotipos o colores distintivos de aplicaciones de terceros (ej. burbuja verde de una aplicación de chat); usa términos como "la otra persona", "compañero", "cliente".
- No escribas nombres reales de personas, números de teléfono ni cuentas.
- No uses el campo
bgm(make.mjs lo rellena automáticamente). - No decidas por ti mismo sobre las zonas grises de cumplimiento de la industria (ej. "¿esta frase cuenta como terminología médica?"): si la validación lo bloquea, cámbialo; si la validación lo permite pero no estás seguro, escríbelo como "Necesita revisión humana" y entrégalo al usuario; no concluyas por tu cuenta que "debería estar bien".
Errores comunes y cómo solucionarlos
| Error | Solución |
|---|---|
| Fila N … caracteres, máximo 12 por línea | Acorta la frase o usa \n en una pausa semántica para dividirla en dos líneas. |
| Se usaron 2 énfasis con {} | Deja solo el énfasis más importante. |
| {} no están emparejados | Cada { debe tener su }, no puede haber saltos de línea. |
| Contiene la palabra extrema de la Ley de Publicidad «más» | Cámbiala por una afirmación comprobable: «el más rápido» → «resultados en 3 segundos». |
| La primera toma debe ser hook | Añade un hook al principio. |
| La endCard no puede tener subtítulos | Elimina el caption, escribe el texto grande en params.slogan. |
| Hay un campo que no se reconoce | Consulta los «campos disponibles» en el error, corrige la ortografía (por ejemplo, en mockApp usa kind, no variant). |
| No hay ningún icono llamado «xx» | Elige de la lista de iconos al principio de shots.md. |
| La duración total … debe estar entre 15 y 45 segundos | Añade/elimina tomas o cambia dur. |
| No se encuentra el archivo multimedia | Comprueba la ruta, relativa al directorio de storyboard.json. |
| Error al analizar JSON: fila N | Mira esa fila: falta una coma, hay una coma final, o los subtítulos contienen comillas dobles inglesas (cámbialas por «»). |
| Esta frase debe parar en pantalla N segundos | Escribe caption como un array de 2–3 frases, o divide esta toma en dos. |
| No hay ninguna toma que demuestre la acción principal | Añade chat (pregunta → respuesta del panel) o mockApp (input + resultado). |
| El nombre del producto en la endCard no coincide con meta.product | Cambia brand para que sea idéntico a meta.product. |
| Se ha escrito cta, pero meta.cta está vacío | Si el resumen tiene un método de obtención, escríbelo en meta.cta y luego cópialo; si no, elimina cta. |
Contiene la barra invertida literal \n | En JSON, los saltos de línea se escriben con una sola barra invertida. |
| Contiene el nombre de la plataforma «cuenta oficial» (advertencia) | Si es una palabra de la categoría del producto: añádela a meta.allowWords; si es captación de tráfico: elimínala. |
| Falta el campo obligatorio meta.action | Escribe una frase: «lo que el usuario hace → lo que el producto proporciona». |
| El número no tiene fuente en meta.facts | Si el resumen proporcionó este número, cópialo textualmente en meta.facts (con formato {"id":"f1","text":"…"}); si no lo proporcionó, cambia el número concreto por una afirmación cualitativa. |
| Los subtítulos contienen palabras de descripción de la toma (ej. «las tarjetas salen una por una») | Esto es un subtítulo para el espectador, no una descripción para el editor; cámbialo por una frase desde la perspectiva del usuario. |
| «a ver» es un error ortográfico, debería ser «haber» | Cámbialo por «haber» («nave espacial» no cuenta). |
| «claramente» es una promesa absoluta | Cámbialo por una expresión más mesurada, como «la información clave se ve». |
| La industria «XX» no tiene disponible la toma «YY» | Cambia a una toma disponible para esta industria, o comprueba si meta.industry se ha elegido incorrectamente. |
| [B-xxx] Infracción de las reglas de cumplimiento de la industria | Sigue las instrucciones de «cómo solucionarlo» en el mensaje de error; solo considera añadir a meta.allowWords si hay una base real (esto solo funciona para el nivel warn, el nivel block debe eliminarse). |
Cuando no hay capturas de pantalla reales
Usa preferentemente la toma mockApp (se anima). Si es necesario mostrar "toca aquí en el móvil", primero renderiza mockApp como una captura de pantalla de ejemplo y luego úsala en phone:
cd <SKILL>/template
npx remotion still src/index.ts Screen <ruta absoluta del directorio del storyboard>/screen.png --frame=145 --props=<ruta absoluta del directorio del storyboard>/screen-props.json
screen-props.json debe escribir {"type":"mockApp","theme":"<tema>","dur":5,"params":{...params del mockApp...}}; consulta <SKILL>/examples/_src/screen-props.json. Luego, en la toma phone, escribe "src": "screen.png" y en meta.disclaimer escribe "Imagen de demostración, contenido simulado".
Más ejemplos (estructuras diferentes, elige según el «tipo de producto», no copies los subtítulos)
<SKILL>/examples/jev.json: Emocional para el consumidor, industria software (demo de chat con 2 frases de subtítulos → dashboard → transiciones rápidas → endCard; método de obtención «descarga la versión Android en la web oficial»)<SKILL>/examples/ledger.json: Mejora de productividad con herramientas, industria software (transiciones rápidas de problemas → comparativa → mockApp de foto de recibo con resultado → estadística → endCard; el resumen no proporcionó método de obtención, la endCard no lleva cta)<SKILL>/examples/meeting.json: Oficina B2B, industria software (captura anotada → interfaz simulada → estadística → pasos → endCard; método de obtención «solicita prueba gratuita en la web oficial»)<SKILL>/examples/en-focus.json: Ejemplo en inglés conmeta.lang: "en"(aplicación ficticia, muestra cómo escribir subtítulos en inglés)- Los ejemplos de cumplimiento para otras industrias (food/ecommerce/education/beauty/travel) están en
industries/<industry>/test-brief.md+expected.md:test-briefes un resumen de ejemplo,expectedexplica qué partes del storyboard basado en este resumen serán bloqueadas y por qué. Se recomienda leer estos dos archivos antes de crear el primer vídeo de una nueva industria.
Ejemplo completo (examples/ledger.json, pasa la validación directamente)
{
"meta": {
"title": "Vídeo promocional de Contabilidad sin preocupaciones (problema → producto → 3 puntos de venta → endCard)",
"product": "Contabilidad sin preocupaciones",
"theme": "fresh-light",
"disclaimer": "Imagen de demostración, datos de ejemplo",
"action": "Toma foto del recibo → rellena automáticamente el importe y la categoría",
"facts": [
{"id": "f1", "text": "Los usuarios de prueba ahorraron aproximadamente 1260 yuanes más este mes que el anterior (datos de ejemplo)"},
{"id": "f2", "text": "Entradas de ejemplo del libro de contabilidad de demostración: comida para llevar ¥860, té con leche/café ¥326, suscripción automática olvidada ¥98, taxi nocturno ¥410 (datos de ejemplo)"},
{"id": "f3", "text": "Una entrada manual tarda unos 5 minutos; usar este producto para tomar una foto y registrar una entrada tarda unos 10 segundos (datos de ejemplo)"},
{"id": "f4", "text": "Resultado de reconocimiento de demostración: almuerzo ¥38.5, presupuesto de comidas de este mes usado al 62% (datos de ejemplo)"}
]
},
"shots": [
{
"type": "hook",
"dur": 2.5,
"caption": "Acaba de llegar el sueldo,\ny a fin de mes ya {no queda nada}",
"mood": 0.85,
"params": {"visual": "stat", "text": "¥ 0.00", "sub": "¿En qué se fue este mes?", "badge": "Toma foto del recibo y ya está", "tone": "bad"}
},
{
"type": "quickList",
"dur": 3.5,
"caption": "¿Dónde se fue el dinero?\n{No recuerdo ni una}",
"mood": 0.8,
"params": {
"title": "Destino desconocido este mes",
"items": [
{"text": "Comida para llevar", "tag": "¥860", "tone": "bad", "icon": "bell"},
{"text": "Té con leche/café", "tag": "¥326", "tone": "warn", "icon": "heart"},
{"text": "Suscripción automática olvidada", "tag": "¥98", "tone": "bad", "icon": "calendar"},
{"text": "Taxi nocturno", "tag": "¥410", "tone": "warn", "icon": "clock"}
]
}
},
{
"type": "compare",
"dur": 4.5,
"caption": "Para esto de la contabilidad,\n{deja de esforzarte}",
"mood": 0.45,
"params": {
"mode": "lr",
"left": {"title": "Contabilidad manual", "items": ["Cada entrada se escribe a mano", "La categoría se adivina", "Al final se abandona"], "tone": "bad", "icon": "doc", "stat": "5 minutos", "level": 8},
"right": {"title": "Contabilidad sin preocupaciones", "items": ["Toma foto y reconoce automáticamente", "Categoriza automáticamente", "Resumen con un clic a fin de mes"], "tone": "good", "icon": "bolt", "stat": "10 segundos", "level": 2},
"meterLabel": "Grado de dificultad",
"verdict": "Registrar una entrada solo lleva diez segundos"
}
},
{
"type": "mockApp",
"dur": 4.5,
"caption": "Toma foto del recibo,\n{importe y categoría listos}",
"mood": 0.25,
"params": {
"kind": "editor",
"title": "Registrar entrada",
"source": "Datos de demostración, no son facturas reales de usuarios",
"input": "Toma foto: recibo del almuerzo",
"button": "Reconocer",
"items": [
{"text": "Almuerzo ¥38.5"},
{"text": "Comerciante: Restaurante de abajo"},
{"text": "Categoría: Comidas (automática)"},
{"text": "Comidas de este mes usadas al 62%"}
],
"highlight": 3,
"done": "Registrado"
},
"note": "Demostración de la acción principal: el usuario toma foto del recibo → el producto proporciona el importe, el comerciante y la categoría"
},
{
"type": "counter",
"dur": 3,
"caption": "A fin de mes, mira,\n{¡todavía hay saldo!}",
"mood": 0.1,
"params": {"to": 1260, "prefix": "¥", "label": "Ahorrado este mes más que el anterior", "sub": "Datos de ejemplo, pueden variar", "icon": "money", "tone": "good"}
},
{
"type": "endCard",
"dur": 4,
"mood": 0,
"params": {
"brand": "Contabilidad sin preocupaciones",
"slogan": "Cada gasto,\n{lo tienes claro}",
"points": ["Toma foto del recibo y contabiliza automáticamente", "El libro solo está en tu móvil"],
"icon": "money"
}
}
]
}