漫剧(小说 / 网文 / 漫画改编)· 四站式流水线(novel-video-pipeline)
Overview
Convierte una historia textual (novela web, cómic, guion original, cuento ilustrado, etc.) de forma estable en un paquete de prompts para storyboard + imágenes de referencia visual + audio/música CC0 listo para alimentar modelos de generación de video, manteniéndose siempre dentro del límite de no reproducir imágenes protegidas por derechos de autor de terceros. Por defecto, está orientada a la producción de manhua-drama (horizontal 16:9 / series de varios episodios), pero también se puede cambiar a sub-tipos como manhua-drama infantil, videos cortos individuales, etc. La línea de producción se basa en el ritmo de los manhua-drama más populares actuales ("gancho fuerte + tirón emocional + giro + punto de satisfacción + suspenso entre episodios"), pero solo toma prestado su esqueleto metodológico; los personajes, la trama y el estilo artístico son siempre originales.
La línea de producción consta de cuatro estaciones de trabajo en secuencia, cada una produce un JSON / directorio de recursos acordado, y la siguiente estación consume el producto de la anterior. El orden central de producción: primero construir la base de activos (S2), luego escribir los prompts del storyboard (S3) — el storyboard solo organiza los activos según el lenguaje de la cámara, asegurando la consistencia de los personajes y la continuidad del espacio de la escena.
S1 改编剧本 ──script.json──▶ S2 资产库 ──character_manifest + scene_manifest (+ visual_manifest)──▶ S3 分镜提示词 ──storyboard.json(引用资产+ref_images锚定)──▶ S4 音频 ──audio_manifest──▶ S5 合成 ──成片
- S1 Adaptación del guion: Comprime el texto largo/original en un "esqueleto de valor narrativo o pedagógico + tabla de ritmos", genera
script.json(title / logline / characters / scenes / beats). - S2 Base de activos (construir primero): Lee el guion completo, establece activos de personajes en tres vistas (
character_manifest.json: visual_lock + vistas frontal/lateral/trasera + paquete de imágenes de anclaje + fixed_prompt) y activos de escena en múltiples vistas (scene_manifest.json: axis_of_action + vistas: establishing, ots a→b, reverse, insert), y acompaña con la descarga de imágenes de referencia visual de dominio público / CC0 (visual_manifest.json). Aplica el cortafuegos IP (palabras negativas). Esta estación produce la "base de activos" que S3 usará como referencia. - S3 Prompts del storyboard (basado en la base de activos): Expande cada beat en tomas (shot), cada shot referencia
character_ref(personaje+vista) yscene_ref(escena+vista), toma la descripción fija de la base de activos, combina la biblioteca de movimientos de cámara (camera-movements.json) y las preconfiguraciones de la plataforma para crear el prompt, inyectanegative_prompt, y generastoryboard.json. - S4 Audio: Empareja música de fondo / efectos de sonido CC0 para cada toma, genera
audio_manifest.json. - S5 Composición (cierre al video final): Toma el
storyboard.jsonde S3 (que contieneref_imagesde anclaje) y elaudio_manifest.jsonde S4 para cerrar el video: genera imágenes / videos de imagen a video toma por toma (usandoref_imagespara fijar la cara) → alineación de audio → edición y montaje (segúnduration_syaspect_ratio) → exportación a plataforma → verificación final de consistencia. Ver detalles enreferences/s5-composite.mdyscripts/build_ffmpeg_concat.py.
When To Use(触发)
- El usuario proporciona una historia/novela/novela web/cómic/guion y quiere "convertirlo en un manhua-drama / video corto / storyboard / animación".
- El usuario quiere "adaptar un guion, escribir prompts de storyboard, generar un guion de video, emparejar estilo artístico, emparejar música".
- El usuario necesita la salida de cualquier estación individual (por ejemplo, solo los prompts del storyboard, o solo las imágenes de referencia de dominio público).
- El usuario tiene un requisito estricto de que el material sea "libre de derechos de autor / utilizable comercialmente / sin riesgo de IP".
工作流(Workflow)
El flujo completo se refiere a la idea de orquestación de soluciones open source populares, pero el código es propio y los activos son autónomos:
- ViMax (MIT, ~392 commits, pipeline de orquestación S1→S4) → Toma prestada su segmentación en fases "historia→storyboard→video" y los contratos de los productos.
- seedance-prompt-skill / ai-shortfilm-prompts (MIT) → Toma prestada su organización de plantillas de prompts en formato SKILL como base para S3.
- ArcReel (AGPL) → Solo se aprende la arquitectura, no se copia el código (AGPL es viral, no se permite fusionar en esta skill de estilo MIT). Ver detalles en
references/architecture-licenses.md.
第 0 步 · 接收需求
Confirmar cuatro puntos: ① Historia fuente (novela web / cómic / guion original / publicación o ruta); ② Plataforma objetivo (por defecto, manhua-drama horizontal para Bilibili / YouTube, ver assets/s3/platform-presets.json para bilibili; para vertical en Douyin / WeChat Video usar douyin); ③ Estilo artístico (manhua chino / acuarela / realista / ukiyo-e / ilustración infantil…); ④ Sub-tipo y audiencia (por defecto, manhua-drama horizontal 16:9, con ritmo de éxitos actuales pero original; si es para niños, se fuerza adicionalmente el cortafuegos IP + se excluye contenido maduro).
第 1 站 · S1 改编剧本
- Cargar
assets/s1/story-structure.md(plantilla de estructura de tres actos / ritmos) +assets/s1/adaptation-method.md(metodología de compresión: conservar esqueleto de valor, eliminar redundancia, curva emocional). - Rellenar opcionalmente
assets/s1/beat-sheet.md(tabla de ritmos). - Consultar los ejemplos de adaptación
assets/s1/example-romeo-juliet.mdyexample-journey-to-west.md. - Generar
script.json, campos según §S1 del contrato enreferences/workflow.md.
第 2 站 · S2 资产库(先建,后写分镜)
- Leer todos los beats / characters / scenes de S1, establecer activos de personajes: cargar
assets/s2/character-design.md, para cada personaje principal generarcharacter_manifest.json(visual_lock + fixed_prompt + vistas frontal/lateral/trasera + paquete de anclaje ref_pack + reglas de consistencia). - Establecer activos de escena: cargar
assets/s2/scene-multiview.md, para cada escena principal generarscene_manifest.json(geography + axis_of_action + views{establishing, ots_a, ots_b, reverse, insert}). - Descargar/generar imágenes de referencia visual de dominio público / CC0
visual_manifest.json(múltiples estilos: manhua chino / acuarela / realista / ilustración infantil / arte de dominio público Met…), aplicar cortafuegos IP. - Aplicar cortafuegos IP:
assets/s2/negative-ip.json+assets/s2/negative-ip-firewall.md. - Puerta de licencia: Solo se acepta
Public Domain/CC0. Los activos de personajes/escenas son siempre originales, prohibido copiar personajes con el mismo nombre y configuración de exitosos (ver §6 del cortafuegos IP).
第 3 站 · S3 分镜提示词(基于资产库写)
-
Cargar
assets/s3/template-library.json(biblioteca de plantillas de storyboard: tipo de plano / encuadre / emoción) +assets/s3/camera-movements.json(biblioteca de movimientos de cámara: 40+ movimientos + mapeo beat→movimiento + sintaxis de plataforma) +assets/s3/platform-presets.json(sintaxis de prompts de cada plataforma, relación de aspecto, límite de duración) +assets/s3/tag-stats.json(estadísticas de frecuencia de etiquetas) +assets/s3/negative-quality.md(palabras negativas de calidad) +assets/s2/negative-ip.json(cortafuegos IP). -
Cada beat → al menos una toma; cada toma debe llevar
character_refyscene_ref(referenciando la base de activos de S2), y tomar la descripción del personaje fija delfixed_promptde los activos; tomar 1 movimiento de cámara principal delcamera-movements.json(subject_aware_map recomienda según el tipo de beat); debe llevarnegative_prompt(cortafuegos IP + palabras negativas de calidad concatenadas). -
Generar
storyboard.json:shots[{shot_id, beat_ref, character_ref[], scene_ref, ref_images[] (opcional·enlace directo a imágenes de anclaje, ver más abajo "Anclaje de imágenes de referencia"), camera_movement, shot_size, speed (opcional·modificador de velocidad slow_motion etc., ver speed_modifiers en camera-movements.json), prompt, prompt_readable, negative_prompt, platform, aspect_ratio, duration_s, attribution}]. Para tomas de cambio de poder usarcamera_movement: low_angle/high_angle+speed: "slow_motion"(escritura verassets/s2/scene-multiview.md§三 (补) 权力轴).Anclaje de imágenes de referencia (ref_images, clave para la consistencia entre tomas):
ref_imageses una lista de enlaces directos a imágenes de anclaje para cada toma, más estables que el textofixed_prompt(alinear con @引用 de Jimeng / Runway Gen-4 de una sola imagen para fijar cara). Cada elemento es una cadena, con dos formatos acordados: ① Token de referencia de activochar:<char_id>:<clave_ref_pack o clave_three_view>/scene:<scene_id>:<view>(extraído automáticamente por el script decharacter_manifest.ref_pack, y el generador lo resuelve a una ruta de imagen real); ② Ruta de imagen directa / URL (por ejemplo,/assets/char_shen_zhao_face.png). Se recomienda 2–3 imágenes por personaje (primer plano frontal/lateral/cuerpo completo), límite 9 en Jimeng, 1 en Runway para fijar.build_storyboard.pyextrae automáticamente elref_packdel personaje comoref_images; también se puede alimentar directamente al modelo de imagen a video en S5 como referencia para fijar cara/vestuario. -
Los datos con licencia CC BY 4.0 deben llevar attribution (los activos de esta biblioteca son PD/CC0, sin firma por defecto; si se introducen datos externos CC BY, se debe rellenar attribution).
-
Aceleración con andamio (opcional): Primero construir S1
script.json+ S2character_manifest.json/scene_manifest.json, ejecutarpython scripts/build_storyboard.py --project <DIR> --platform bilibilipara generar automáticamente un borrador destoryboard.json(rellena automáticamentecharacter_ref/scene_refpor beat, selecciona 1 movimiento de cámara principal desubject_aware_map, selecciona encuadre según tipo de beat, concatenanegative_promptcubriendo todos los tokens IP), luego refinar manualmente el ángulo de cámara / emoción / diálogo / ritmo. Este script es la implementación automática del orden "activos primero", y su salida pasa directamentevalidate_pipeline.py.
第 4 站 · S4 音频
- Cargar
assets/s4/audio-manifest.json(lista de audio CC0 ya descargada, con categorías de BGM / efectos de sonido / emoción: ambient / cinematic / playful / tense / romantic / lullaby etc.). - Emparejar según la emoción de la toma: bajo de suspense → segmento de giro, piano suave → segmento cálido, whoosh → transición, lullaby → segmento de sueño, cartoon bounce → segmento animado.
- Generar
audio_manifest.json:items[{file, license, source, duration_ms}], solo CC0.
第 5 站 · S5 合成(闭环到成片)
- Cargar
references/s5-composite.md(SOP de composición S5: cierre en cinco pasos + matriz de herramientas + lista de verificación de consistencia final). 1.5 Resolver imágenes de anclaje: Ejecutarpython scripts/resolve_ref_images.py --project <DIR>, expandir los tokensref_images(char:<id>:<key>/scene:<id>:<view>) de cada toma a rutas de imagen reales, generarstoryboard.resolved.json(mantener tokens no resueltos como están y advertir). - Generar imágenes / imagen a video toma por toma: Usar
ref_imagesdestoryboard.resolved.json(imágenes reales resueltas) como referencia para fijar cara/vestuario, junto confixed_prompt+camera_movement+lens/stagesdecamera-movements.jsonpara alimentar a Jimeng @引用 / Runway Gen-4 / Kling / Seedance y generar cada clip. - Alineación de audio: Seleccionar BGM de
audio_manifest.json(CC0) según la emoción del beat, recortar efectos de sonido segúnduration_s. - Edición y montaje: Ejecutar
python scripts/build_ffmpeg_concat.py --project <DIR> --clips-dir <DIR>/clipspara generar la lista de concatenación y el comando, exportar a 1080p segúnaspect_ratio(horizontal 16:9). - Verificación final de consistencia: Revisar la lista de verificación §4 (personajes/escenas/eje de acción/eje de poder/duración/cortafuegos IP/audio/proporción) antes de publicar.
第 6 步 · 门禁校验(必做)
Ejecutar scripts/validate_pipeline.py --project <DIR> --platform bilibili [--strict] [--content-rating {normal,child}], verificar los contratos de las cuatro estaciones + cinco compuertas de calidad: el negative_prompt de cada toma de S3 debe cubrir todos los tokens IP bloqueados en assets/s2/negative-ip.json (necesidad estricta de proteger imágenes protegidas de terceros, falla si falta en modo strict); la duración debe estar dentro del conjunto legal de la plataforma correspondiente en platform-presets.json, la relación de aspecto debe coincidir (por defecto 16:9 para manhua-drama horizontal); la duración del audio de S4 0.3–180s (conservar efectos de sonido muy cortos reales). Con --strict, las advertencias también se consideran fallo. Solo después de pasar se puede proceder a la composición de video.
Clasificación de contenido (importante · por defecto sin restricción de tema): La puerta de control por defecto usa --content-rating normal — no hace ninguna restricción de clasificación de contenido, se pueden producir normalmente temas para adultos como peleas / violencia / suspenso / oscuro, solo se mantiene el cortafuegos IP y los contratos de activos. Solo para líneas de producción infantiles se añade --content-rating child (o el alias anterior --child): fuerza que S1 incluya ritmos de "cierre de valor", S3 cubra tokens negativos de seguridad infantil (violence/gore/horror/blood/mature/nudity/weapon…), escanea beats para contenido maduro (falla en strict). Es decir: --child es un "interruptor de seguridad infantil" puramente opcional; si no se pasa, el contenido del manhua-drama es completamente libre y no se infantiliza.
拉取脚本(零 IP 风险)
Dos scripts que solo usan biblioteca estándar + curl del sistema, no requieren pip install:
# S2 视觉资产:OBI 公共领域多画风插画(含童书/国漫风)+ Openverse CC0 图 + Met 公版美术
python scripts/fetch_visual_assets.py --out <DIR> --sources obi,openverse,met
# S4 音频:Openverse CC0(免 key);填 PIXABAY/FREESOUND key 可启用扩充通道
python scripts/fetch_audio.py --out <DIR>
- Compuertas de calidad incorporadas: licencia (PD/CC0), calidad de imagen (lado largo ≥ 1000 y lado corto ≥ 600, archivo ≥ 50KB), deduplicación (SHA256 entre ejecuciones), fuente (solo fuentes institucionales), sensibilidad (Openverse
mature=truesiempre excluido, requisito estricto en todas las plataformas). - OBI usa motor
curl(--retry 5 --retry-all-errors -k) para evitar el fallo SSL esporádico deurllibde Python en este entorno.
五道质量闸门(全站通用)
- Puerta de licencia: S2/S4 solo aceptan
Public Domain/CC0; la introducción de CC BY 4.0 debe llevar attribution. - Puerta de calidad de imagen: Imagen con lado largo ≥ 1000 y lado corto ≥ 600; audio con duración 0.3–180s, archivo ≥ 100KB.
- Puerta de deduplicación: SHA256 persistente entre ejecuciones, imágenes/audio duplicados se saltan automáticamente.
- Puerta de fuente: Solo fuentes institucionales / de dominio público (OBI, Openverse, Met, Freesound CC0…); se rechazan fuentes desconocidas.
- Puerta de sensibilidad: Todo el contenido excluye
mature(refuerzo adicional para infantil); S2/S3 inyectan forzosamente palabras negativas del cortafuegos IP para bloquear imágenes protegidas conocidas; para IP de manhua-drama / novelas web populares, se puede tomar prestada su estructura de tema / emoción / punto de satisfacción (capa metodológica), pero está prohibido copiar completamente personaje por personaje, escena por escena, o escenas emblemáticas (plagio completo).
IP 防火墙(借鉴不照搬)
- Palabras negativas constantes en
assets/s2/negative-ip.json, cubren Peppa Pig, Disney, Marvel, Sanrio, Numberblocks, My Little Pony y otros imágenes protegidas por derechos de autor de terceros — estos son límites duros, no se pueden reproducir independientemente de si se toman prestadas o no (la puerta de control verificará forzosamente la cobertura de tokens). - Disciplina específica para manhua-drama (tomar prestado, no copiar): El "tipo de tema, estructura emocional, paradigma de punto de satisfacción, lenguaje de cámara, ritmo" de los manhua-drama / novelas web populares pertenecen a la capa metodológica, no son protegibles por derechos de autor, pueden usarse como nutriente creativo, se fomenta tomar prestado; pero está prohibido el plagio completo — es decir, no copiar personaje por personaje (mismo nombre y configuración), no copiar la composición de escenas emblemáticas escena por escena, no reproducir directamente el estilo artístico característico / combinación de colores icónicos, no transportar diálogos originales. Incluso si el usuario nombra un éxito popular, solo se extrae su "esqueleto metodológico reutilizable" no su "expresión", se convierte en una descripción original ("protagonista masculino de pelo negro con fuerte destino + protagonista femenina de rojo enfrentándose"), luego se envía al modelo de imagen / video, y se superpone una doble capa de negative prompt para proteger las imágenes protegidas de terceros reales.
- Esta skill no incrusta ningún texto protegido por derechos de autor, solo estadísticas de paradigmas de estructura / escritura; todos los ejemplos son de dominio público o material propio del usuario.
Resources
assets/s1/: Plantillas de estructura de historia, metodología de compresión de adaptación, tabla de ritmos rellenable, formato de guion, dos ejemplos de adaptación.assets/s2/: Banco de palabras negativasnegative-ip.json+ explicación del cortafuegos IPnegative-ip-firewall.md+ metodología de activos de personajecharacter-design.md+ metodología de activos de escenascene-multiview.md.assets/s3/: Biblioteca de plantillas de storyboardtemplate-library.json, biblioteca de movimientos de cámaracamera-movements.json, preconfiguraciones de plataformaplatform-presets.json, estadísticas de etiquetastag-stats.json, palabras negativas de calidadnegative-quality.md.assets/s4/: Lista de audio CC0 ya descargadaaudio-manifest.json.scripts/:fetch_visual_assets.py(descarga de imágenes S2),fetch_audio.py(descarga de audio S4),build_storyboard.py(generación automática de andamio de storyboard S1+S2 → S3, soporta extracción automática de anclajeref_images/ selección automática depower_dynamic/ presupuesto de toma--target-duration/ cierre de sugerencias de auto-crecimiento--no-growth),resolve_ref_images.py(S5 resuelve tokensref_imagesa rutas de imagen reales, generastoryboard.resolved.json),build_ffmpeg_concat.py(S5 genera lista de concatenación FFmpeg + comando desde storyboard.json),validate_pipeline.py(puerta de control entre estaciones, por defecto--content-rating normalsin restricción de contenido;--content-rating child/--childactiva puerta estricta infantil),collect.py(extremo de recolección de auto-crecimiento: retroalimenta el producto de una ejecución + puntuación humana + registros de fallos al servidor de memoria),load_learnings.py(extremo de retroalimentación de auto-crecimiento: obtienelearnings.jsondel servidor de memoria y lo guarda en caché local, para quebuild_storyboard.pylea sugerencias de patrones de fallo de alta frecuencia).memory_server/:server.py(servicio de memoria sin dependencias, 4 tablas SQLite + autenticación Bearer + limitación de velocidad),growth.py(agregación →snapshot/learnings.json+ retroalimentación a priors),.env.example,README.md(implementación Caddy HTTPS / systemd / cron).references/:architecture-licenses.md(préstamo de soluciones open source y límites de licencia),workflow.md(contratos detallados de las cuatro estaciones y uso),case-studies.md(préstamo de lenguaje de cámara / storyboard de manhua-drama / videos cortos populares, literatura metodológica, no copia de IP),benchmark.md(comparación de evaluación: NVP vs ViMax/seedance/ai-shortfilm/ArcReel etc. matriz de puntuación + autoevaluación empírica),s5-composite.md(SOP de composición S5: cierre en cinco pasos + matriz de herramientas + lista de verificación de consistencia final).
注意事项
- Las bibliotecas de imágenes/audio grandes no se incrustan en la skill (se mantiene portabilidad); se descargan con scripts en tiempo de ejecución, o se apunta a tu propio directorio de material CC0 (por ejemplo,
./assets/characters,S4-音频库/samples/etc., lotes locales limpios). - Esta skill es una metodología de orquestación + activos autónomos, no depende de código externo como ViMax/ArcReel para funcionar.
- Después de obtener la clave BHL / token NYPL, se puede añadir manualmente en
fetch_visual_assets.pylos canalesfetch_bhl()/fetch_nypl()(OBI ya verificado sin clave).
自我生长(可选 · 数据闭环)
Permite que la skill crezca por sí misma con el uso: después de cada ejecución de la línea de producción, retroalimenta indicadores objetivos / puntuación humana / registros de fallos a la biblioteca de memoria, que después de la agregación retroalimenta "sugerencias de patrones de fallo de alta frecuencia / puntuación / señales de estilo" en la skill, para evitarlos por adelantado la próxima generación. Biblioteca estándar pura, sin dependencias, desplegable de forma independiente en un servidor pequeño, desacoplado del cuerpo de la skill. Implementación completa en memory_server/README.md.
¿Usar en una sola máquina? No es necesario desplegar. Sin configurar
NVP_MEMORY_URL,collect.py/load_learnings.pyse conectarán automáticamente al SQLite dentro de la skill (memory_server/data/nvp_memory.db) y se agregarán automáticamente después de la recolección, con configuración cero para un ciclo completo. Solo es necesario iniciarserver.pypara "resumen de múltiples máquinas / colaboración múltiple / retroalimentación remota" (ver más abajo "Inicio del servicio" y README §2).
Ciclo cerrado en tres pasos:
- Recolección (después de ejecutar la línea de producción):
python scripts/collect.py --project <DIR> --platform bilibililee automáticamente indicadores como beats / shots / tasa de resolución / duración descript.json/storyboard.json/storyboard.resolved.json, y escribe en la biblioteca de memoria (por defecto SQLite local; si se configuraNVP_MEMORY_URL, hace POST al servicio). Se puede añadir puntuación humana--feedback 5 overall "Ritmo muy bueno", o registros de fallos--failures fails.json. La máquina sin conexión usa--mirror ./mirror.json --dry-runpara generar un espejo, y luegocollect.py --sync ./mirror.jsonlo sincroniza con el servidor. Se puede añadir--localpara forzar local,--remotepara forzar servicio. - Agregación (automática local / servidor programado): En modo local, la agregación es automática después de la recolección; en modo HTTP, usar cron para ejecutar cada hora
python memory_server/growth.py, que agrega las 4 tablas SQLite ensnapshot/learnings.json, y hace upsert de conocimiento estable en la tablapriors. - Retroalimentación (antes de la próxima generación):
python scripts/load_learnings.pyleelearnings.jsony lo guarda en caché local en.cache/learnings.json(por defecto lee el snapshot local; si se configura URL, lo obtiene remotamente;--localfuerza local,--no-fetchsolo lee caché);build_storyboard.pylo lee automáticamente e imprime "sugerencias de auto-crecimiento" durante la generación (patrones de fallo de alta frecuencia → evitación temprana, por ejemplo, imágenes de referencia no resueltas, falta de toma de eje de poder), también se puede usar--no-growthpara desactivar.
Inicio del servicio: python memory_server/server.py --no-auth (prueba local) o python memory_server/server.py (público, necesita variable de entorno NVP_API_TOKEN / --token; Caddy como proxy inverso para TLS). Endpoints: GET /health, POST /ingest, GET /query, GET /snapshot, GET /export.