¿Qué hace Zhati: Ensayos Visuales de Relaciones?
Este es un flujo de trabajo reutilizable extraído del video final «¿Por qué algunas personas buenas se quedan con las personas equivocadas?». El objetivo no es replicar el mismo texto, sino que cada nuevo episodio mantenga el mismo método de producción:
Una historia de relación con un objeto concreto + tipografía Song grande + textura de cine/grabación real/foto + narración moderada + portada 3:4.
Lo fijo es el método, no el material
Fijo: gramática narrativa de 16 beats, estándares de fuente/paleta/movimiento/sonido, portada 3:4, reglas estrictas de fuentes y ética, QA.
Variable: texto, narración, música, películas/grabaciones del cliente/productos/fotos/stock autorizado, retratos, fondo de portada, texto de publicación.
La IA puede buscar videos de fondo por sí misma: cuando el cliente no tiene material, usa scripts/stock_search.py para buscar en Mixkit/Coverr/Pexels/Pixabay, selecciona 3 candidatos, descarga con scripts/fetch_stock.py, elimina la pista de audio, estandariza y escribe el manifest. Consulta references/stock-sources.md para más detalles.
El «Séptimo cielo», Freud, Aristóteles y Kant de la versión maestra son solo implementaciones de referencia, no materiales obligatorios para cada episodio. Si el cliente tiene una tienda real, usa el material del cliente; si el cliente quiere ejemplos de la historia del cine, cambia a 2–3 películas de dominio público; si el cliente no tiene material, haz solo texto/gráficos. No fuerces una película o un rostro solo por «coherencia de serie».
Para más detalles, consulta references/client-brief.md y references/asset-strategy.md.
Primero decide si es aplicable
Aplicable:
- Temas emocionales en chino: relaciones hombre-mujer, amor, intimidad, límites, autoestima, dar y recibir, ruptura y reconciliación.
- Historias de clientes de marcas/instituciones que quieran hablar de «relaciones, límites, respeto, compañía» y que sean adecuadas para una expresión tipo ensayo.
- Usuario quiere un ensayo visual apaisado de 2:40–3:40, con narración, subtítulos y estilo cinematográfico.
- Usuario dice explícitamente «como el estilo de Buenas personas, personas equivocadas», «usa la plantilla anterior», «hazlo en serie».
No aplicable:
- Lanzamiento de producto puro / ventas directas / montajes rápidos / explicaciones de funciones; otros formatos son más adecuados.
- El usuario solicita fragmentos de películas aún protegidas por derechos de autor como «Casablanca», «Deseando amar», etc., sin autorización. Primero explica el riesgo, luego cambia a películas de dominio público o pide al cliente que proporcione material autorizado.
- El usuario quiere un video vertical 9:16. Esta plantilla es 16:9 para el video + portada 3:4; el vertical requiere un diseño nuevo, no se puede simplemente recortar.
Especificaciones del producto final (por defecto)
| Elemento | Por defecto |
|---|---|
| Video | 1920×1080 / 30fps / 2:40–3:40 |
| Relación de aspecto | 16:9 |
| Idioma | Narración en chino simplificado + subtítulos quemados + SRT |
| Portada | 1080×1440 (3:4), PNG + JPG |
| Sonido | Narración + música original + sonido de lluvia, aproximadamente −15 LUFS, pico verdadero ≤ −1.5 dBFS |
| Subtítulos | Quemados en el video, también archivo .srt separado |
| Entrega | MP4, SRT, portada 3:4, texto de publicación, fuentes de material, proyecto editable |
| Confirmación del cliente | Brief → Primer still → Final (tres puntos de confirmación) |
Ubicación de la versión maestra (implementación de referencia)
Versión maestra de referencia (no distribuida con el repositorio; solo como referencia de activos/estructura):
- En desarrollo local:
~/Desktop/自媒体/good-people-wrong-person - En otras máquinas: usa
--refpara apuntar a tu propio proyecto maestro
El nuevo episodio no debe usar por defecto los materiales de la versión maestra. --ref solo sirve para obtener vendor/, fuentes, texturas y una pista de audio de marcador de posición; las películas, retratos, imágenes fijas, texto y sonido deben cambiarse según el brief del cliente.
La versión maestra contiene:
index.html: composición huashu-motion completa del video de 201.37 segundos.cover/cover.html: archivo fuente de la portada 3:4 de 1080×1440.assets/movies/: fragmentos verificados, sin audio, con fotogramas completos de «El séptimo cielo» (1927).assets/portraits/: retratos de dominio público de Freud, Aristóteles y Kant.assets/stills/,assets/textures/,assets/fonts/,vendor/.assets/score.wav: mezcla final de narración + música + lluvia del episodio anterior. Debe reemplazarse en el nuevo episodio, no se puede reutilizar.output/: entregables del episodio anterior, solo como referencia, no copiar.
Si la versión maestra no existe: usa templates/index.template.html y templates/cover-3x4.template.html para recuperar el código; los fragmentos de películas y retratos deben obtenerse y verificarse nuevamente según references/rights-and-ethics.md.
Cómo empezar un nuevo episodio
SKILL="$HOME/.agents/skills/zhati-relationship-film"
$SKILL/scripts/new_episode.sh my-episode-slug --base "$HOME/relationship-films"
El script:
- Crea un nuevo proyecto en
$BASE_DIR/my-episode-slug(por defecto$HOME/relationship-films, se puede cambiar con--base); - Copia el código de plantilla más reciente del skill (
index.html,cover/cover.html), luego copiavendor/, fuentes, texturas y un conjunto de materiales de inicio desde la versión maestra; - Copia
assets/score.wavde la versión maestra como pista de audio de marcador de posición (para que la página se pueda ejecutar); - Genera las plantillas de
BRIEF.md,文稿.txt,字幕.srt,treatment.md,素材来源.md,发布文案.md,assets.manifest.json; - Crea
assets/imported/e imprime los siguientes pasos y las ranuras de texto/material que deben reemplazarse.
Luego sigue el flujo de trabajo a continuación. No te saltes el paso de escribir una nueva narración y nuevos subtítulos.
Flujo de trabajo
0. Lee el brief del cliente, define contenido + material
Primero lee references/client-brief.md y condensa los requisitos del cliente en un plan de contenido de 10 líneas:
Audiencia / Plataforma / Duración / Tema en una frase / Pregunta gancho / Dos conceptos / Perspectiva ideológica o psicológica / Giro ético / Una frase pequeña / Modo de material y fuentes
Luego lee references/beat-sheet.md y coloca el tema en los 16 beats narrativos. El modo de material debe decidirse antes de escribir la narración: grabación real del cliente / película de dominio público / stock autorizado / fotos / solo texto / mixto. No escribas 3 minutos completos y luego preguntes al cliente por el material.
Estructura por defecto:
- Gancho (una pregunta)
- Historia concreta (lluvia/paraguas; se puede cambiar por otro objeto concreto, pero debe haber un objeto que atraviese toda la historia)
- Limitación tipo «esto es una historia ficticia»
- Distinción entre dos conceptos (bondad vs adecuación, o el par de conceptos de este episodio)
- Perspectiva filosófica A (amistad/reciprocidad/respeto, etc.)
- La limitación de una persona («el esfuerzo de una persona no puede completar por sí solo la relación de dos personas»)
- Pregunta de giro emocional (¿por qué, a pesar del dolor, esperas la próxima vez?)
- Perspectiva psicológica (repetición/patrón; usa «una forma de entender», no un diagnóstico)
- Reconocimiento de patrones (esforzarse para obtener aprobación)
- Indiferencia y autodesconfianza
- Giro ético (el daño no es culpa tuya; la responsabilidad es del que daña)
- Limitación y excepción (engaño, cambio, ver después de convivir)
- Autorreflexión (dos preguntas; espejo/reflejo)
- Perspectiva filosófica B (autorrespeto)
- Una frase muy pequeña (acción ejecutable)
- Práctica y cierre (conserva la ternura, pero también deja espacio para ti)
- Créditos/fuentes finales
Si el nuevo tema no necesita dos filósofos, puedes quedarte solo con uno; si no necesita perspectiva psicológica, puedes comprimir los puntos 8–9 en un solo párrafo. No inventes citas ni diagnósticos solo para llenar la estructura.
1. Escribe la nueva narración
- Objetivo: 950–1150 caracteres chinos, a velocidad normal aproximadamente 3 minutos; si el usuario ya ha dado el texto, primero edita «hasta que se pueda respirar», sin cambiar la postura.
- Mantén las expresiones limitantes: una forma de entender / no es una explicación para todos / la responsabilidad del daño no se puede transferir a la víctima.
- El final debe tener una «pequeña acción» o «pequeña frase» que se pueda recordar, por ejemplo «yo también tengo frío, yo también necesito este paraguas».
- Escríbelo en
文稿.txt, una línea por párrafo, para facilitar la generación de subtítulos.
2. Genera la nueva narración y la nueva línea de tiempo
Prioriza el uso del clon de voz local del usuario (consulta el skill macos-local-voice), no subas grabaciones de referencia. Si no hay voz disponible, pregunta explícitamente al usuario: grabación propia / clon local / voz del sistema / sin voz.
Resultados:
- Una narración completa
assets/voice.wav(48kHz, preferiblemente 24-bit); - Tiempos de inicio y fin por frase (JSON o CSV), con precisión de 0.01s;
- Un nuevo array
CUES([start, end, text]).
No reutilices la narración de 194 segundos de la versión maestra. La línea de tiempo de la versión maestra solo sirve para entender el ritmo, no es el audio del nuevo episodio.
3. Música y mezcla
- Mantén la dirección de «piano/cuerdas/ambiente ligero + sonido de lluvia», no uses canciones con derechos de autor existentes.
- Objetivo de mezcla: narración clara, música alrededor de −28 a −32 LUFS, total aproximadamente −15 LUFS, pico verdadero ≤ −1.5 dBFS.
- Genera
assets/score.wav, reemplaza la pista de marcador de posición; la etiqueta<audio id="score" ...>en la página se mantiene, pero hay que cambiar la duración. - Esta plantilla usa
id="score"en lugar deom-sound, por lo que al renderizar hay que añadir--silent, de lo contrarioom renderintentará reconstruir la pista de audio. Consulta la sección «Sonido» enreferences/visual-system.md.
4. Re-sincronización
Este es el paso que más se subestima. Todos los tiempos de la versión maestra están codificados; al cambiar la narración, cada escena debe re-sincronizarse.
Según la proporción de references/beat-sheet.md, asigna nuevas duraciones a las 16 escenas, luego:
- Primero modifica el array
CUES, eldata-durationdel nodo raíz,DURen JS,<audio data-duration>. - Cada escena toma como ancla «el inicio de la primera frase de narración de ese segmento»; el final de la escena está delimitado por el inicio de la primera frase del siguiente segmento.
- Los tiempos de animación dentro de la escena se escalan proporcionalmente con «nueva duración / duración antigua»; no solo muevas el inicio, o la segunda mitad se desviará.
- También hay que recalcular
data-start/data-duration/data-media-start/data-playback-ratede las ventanas de video; asegúrate de que el fragmento no termine antes de que se desvanezca. Los fragmentos de la versión maestra ya tienen fotogramas completos, pero si cambias la fuente, hay que volver a completar los fotogramas. - Después de cada cambio en una escena, usa
om stillpara verstart+0.5s,start+2s,end-0.5s, y confirma que no haya residuos de texto antiguo, colisiones de texto o fotogramas vacíos.
Para la lista de reemplazo específica, consulta references/text-slots.md; para el método de sincronización, consulta references/retiming.md.
5. Reemplaza el texto, no el ADN visual
Debes reemplazar una por una las ranuras de texto en index.html (consulta references/text-slots.md), incluyendo:
- Variable del título
filmTitle, las dos líneas del gancho; - Las cuatro líneas grandes de la historia del paraguas;
- La limitación «historia ficticia»;
- Las etiquetas de los dos fotogramas de bondad/adecuación;
- Los párrafos y orígenes de Aristóteles/Freud/Kant;
- Las escenas de frío, giro, responsabilidad, espejo, autorreflexión, acción, final, créditos;
- Cada frase de subtítulos en
CUES.
Mantén:
- La paleta de colores, la combinación de Song/PingFang/EB Garamond;
- El fondo de película, lluvia, paraguas, granulado, viñetas, destellos blancos, líneas de vino tinto;
- Los márgenes izquierdo y derecho 16:9 y la banda de subtítulos inferior;
- El ritmo de «un plano, un evento», no metas todo el texto en la misma pantalla.
No conserves el texto antiguo de la versión maestra. Si en el nuevo episodio aparecen pensadores distintos de «Aristóteles/Freud/Kant», debes verificar nuevamente la fuente y marcar en la imagen «interpretación/aplicación», no falsifiques citas directas.
6. Reemplazo de material (según el cliente, obligatorio)
La versión maestra usa «El séptimo cielo» (1927), pero esto es solo una implementación de referencia. Según references/asset-strategy.md, elige el modo:
- Grabación real del cliente/fotos/productos/tienda: prioridad; especifica autorización/consentimiento de imagen; mantén los rostros reales, sin suavizado excesivo; los productos solo como «objeto en la relación», no como publicidad dura.
- Película de dominio público: puedes seguir usando «El séptimo cielo» o cambiar a 1–3 películas de dominio público; elimina el audio, completa fotogramas, extrae fotogramas fijos, etiqueta cada una.
- Stock gratuito buscado por la IA: si el cliente no tiene material, primero busca 3 candidatos y muéstraselos al cliente; una vez confirmado, usa
scripts/fetch_stock.pypara descargar/estandarizar. No descargues de YouTube/streaming/películas con derechos; no eludas marcas de agua/muros de pago. La fuente, licencia y crédito se escriben en el manifest. - Stock autorizado: conserva la licencia/orden de compra; no uses previsualizaciones con marca de agua.
- Fotos/archivos/retratos: indica si es foto/estatua/pintura; dominio público o autorizado por el cliente; no uses IA para hacer pasar por personajes históricos.
- Solo texto/gráficos: si no hay footage, deja que las letras y los espacios en blanco sean la imagen; no fuerces una película.
- Mixto: máximo 2–3 fuentes; una gradación, una tipografía, crédito por fuente.
Después del reemplazo, debes:
- Cambiar el
srccorrespondiente adata-asset-slot; - Recalcular las ventanas de video con
ffprobe; - Volver a extraer fotogramas fijos;
- Modificar
#credit,#credits .cols,素材来源.md; - Ejecutar
python3 scripts/asset_report.py --manifest assets.manifest.json --project ..
No uses fragmentos de películas aún protegidas por derechos de autor como «Casablanca», «Vacaciones en Roma», «Deseando amar», a menos que el cliente proporcione una autorización por escrito explícita.
7. Revisión, renderizado, visionado
cd "$HOME/relationship-films/my-episode-slug"
om check . --samples 6
om render . --silent --fps 30 --workers 4 --video extract
om qa out/<new-file>.mp4
El renderizado tarda aproximadamente 25–35 minutos (1080p/30fps/4 workers, escala de 201 segundos). No uses 720p para simular 1080p.
Si om en la máquina es un script envoltorio (por ejemplo, que configura el entorno Node/Chrome), apunta OM a él; scripts/ intentará $OM, om, ~/.agents/skills/huashu-motion/bin/om en ese orden.
Debe pasar:
om check0 errores;om qasin saltos de fotograma único;- Revisión de fotogramas: gancho, cada límite de escena, giro, Freud, final, créditos;
- Visionado independiente en frío (busca un agente que no haya participado en la producción para que solo vea el producto final), al menos corrige los MUST-FIX;
ffprobeconfirma 1920×1080/30fps/duración correcta/AAC 48kHz estéreo;- Sin errores de decodificación en todo el video; nivel de sonido/pico dentro de lo especificado.
8. Portada y texto de publicación
- Portada: copia
cover/cover.html, reemplaza título, duración, gancho inferior, fuente; renderiza 1080×1440 PNG + JPG. Diseño de la plantilla: etiqueta pequeña arriba + título grande («persona equivocada» en ámbar) + paraguas/dos personas en el medio + una frase clave abajo + fuente. - Texto de publicación: según
references/publishing.md, genera versión larga/corta/versión Bilibili/comentario fijado/etiquetas; no reutilices directamente el texto del episodio anterior. - Los créditos finales y la marca de agua deben mantener las limitaciones necesarias como «imagen de película, no caso real», «perspectiva explicativa, no diagnóstico».
9. Entrega
my-episode-slug/output/
<slug>_1080p_30fps.mp4
<slug>_字幕.srt
<slug>_封面_3x4.png
<slug>_封面_3x4.jpg
<slug>_发布文案.md
素材来源.md
项目说明.md
Reglas estrictas (no se entrega si no se cumple)
- Nueva narración: el nuevo episodio debe tener una narración recién grabada/generada; no se puede usar el audio de 194 segundos de la versión maestra con los nuevos subtítulos.
- Nuevo texto: no puede quedar texto de la versión maestra en
index.html; revisa una por una conreferences/text-slots.md. - Copyright/material: todas las películas, material del cliente, stock, retratos, música y sonidos deben tener registro de fuente/autorización; cada fuente debe tener crédito; el título/año/indicación de «no es un caso real» debe estar en la imagen.
- Ética: no diagnosticar, no culpar a la víctima, no falsificar citas originales de filósofos, no tratar a los personajes de películas como casos reales.
- Imagen: sin texto recortado, sin palabras sueltas en una línea, sin texto que se superponga a los subtítulos; si en este episodio se sigue usando la metáfora del paraguas, ambos personajes deben estar bajo el paraguas al final.
- Sonido: narración clara, sin recorte, sin silencios inesperados; el renderizado con
--silentconserva la pista de audio personalizada. - Visionado: los MUST-FIX del visionado independiente en frío deben estar corregidos, o debe quedar registro de por qué se mantienen.
Lo que NO se debe hacer
- No reutilices directamente el texto antiguo, los subtítulos antiguos ni la narración antigua de la versión maestra.
- No consideres «El séptimo cielo»/Freud/Aristóteles/Kant como material fijo; no los fuerces si el cliente no los necesita.
- No conviertas todas las escenas en la misma imagen + el mismo texto; la gramática de las escenas de la versión maestra tiene variaciones.
- No uses degradados azul-violeta, neón, fondos estrellados con aspecto de IA.
- No recortes directamente el video 16:9 para la portada 3:4; usa
cover/cover.htmlpara rediseñarla. - No escribas las palabras de filósofos/expertos como «citas célebres» con comillas; usa «discutió que/una forma de entender».
- No uses películas con derechos, rostros de clientes, conversaciones de chat o productos no públicos sin autorización del cliente.
- No descargues fondos de YouTube/Bilibili/streaming/películas con derechos; no eludas marcas de agua, muros de pago o restricciones regionales; usa solo stock gratuito/autorizado explícitamente.
- No uses etiquetas diagnósticas como «personalidad de víctima», «adicción al amor» en los títulos; usa preguntas, no juicios.
Mapa de archivos
references/client-brief.md: brief del cliente, matriz de contenido, puntos de confirmación.references/asset-strategy.md: grabación del cliente/dominio público/stock/fotos/solo texto/mixto, unificación de múltiples fuentes, ranuras de material, manifest.references/stock-sources.md: búsqueda, licencia, descarga y crédito de Mixkit/Coverr/Pexels/Pixabay/Commons.references/beat-sheet.md: estructura de 16 beats, proporción, eventos de imagen, función del texto.references/visual-system.md: paleta de colores, fuentes, planos, paraguas/lluvia, sonido, portada.references/text-slots.md: lista de reemplazo ítem por ítem.references/retiming.md: método de reajuste de la línea de tiempo con la nueva narración.references/rights-and-ethics.md: fuentes de películas/retratos/sonido/ética.references/publishing.md: título, texto largo, texto corto, introducción de Bilibili, comentario fijado, etiquetas.templates/index.template.html: composición de la versión maestra.templates/cover-3x4.template.html: portada 3:4.templates/assets.manifest.example.json: plantilla del manifest de materiales.scripts/new_episode.sh: crear nuevo proyecto.scripts/prepare_media.sh: completar fotogramas, extraer fotogramas fijos, verificar fuente.scripts/render.sh: envoltorio de renderizado con--silent.scripts/render_cover.sh: renderizarcover/cover.htmla 1080×1440 PNG/JPG.scripts/verify.sh: check/qa/ffprobe/decodificación/nivel de sonido.scripts/asset_report.py: verificar archivos/derechos/crédito/escenas del manifest de materiales.scripts/stock_search.py: buscar stock gratuito en línea, generar candidatos/página/licencia.scripts/fetch_stock.py: descargar, eliminar audio, estandarizar a 1920×1080/30fps y actualizar manifest.