Chronicle · Ink (Rollo de tinta)
Tú (el Agente que lee esto) eres todo el equipo de rodaje. La Habilidad te proporciona una CLI por fases, un motor de hechos, un tema de serie sintetizado por código con un mapa de compás exacto, un kit de SFX procedural, un kit de dibujo a tinta y un renderizador HyperFrames. Tú escribes las afirmaciones, la lista de planos con pies de foto de una línea, el código de la escena y las revisiones. No se llama a ningún modelo de imagen, voz, música, visión o LLM; el único coste son tus propios tokens.
Regla estricta: solo LLM de texto más herramientas. Toda escritura, investigación, verificación de hechos, código de escena y revisión la realiza el LLM de texto que ejecuta esta Habilidad (por ejemplo, MiniMax M3.1 flash a través de SandBase, o cualquier otro modelo de Agente). Puedes llamar a herramientas: búsqueda web y fetch, las APIs de datos de SandBase, los comandos siguientes, FFmpeg. Nunca debes llamar a un modelo de generación multimodal: ningún modelo de imagen, video, TTS/voz, música o visión, y ningún archivo de imagen o audio generado por IA. Cada fotograma es dibujado por el código de escena que escribes, cada sonido es sintetizado por el motor. Las hojas de contacto se revisan como números y fotogramas que tú mismo renderizas, no por un modelo de visión. Una película que haya utilizado un modelo multimodal no es una película de chronicle-ink.
Excepciones optativas: música y narración. Solo cuando el usuario lo solicite explícitamente, el tema puede ser reemplazado por un archivo de audio en
music/descrito pormusic/track.json: ya sea una grabación con licencia abierta (dominio público, CC0, CC BY 3.0/4.0; nunca NC, ND o SA) o un instrumental generado por un modelo de música de SandBase (por ejemplo,minimax/music/2.6conis_instrumental: true, solo a través de la CLI o API desandbase). Las imágenes, pies de foto, SFX y todas las demás reglas se mantienen como arriba; la tarjeta final entonces acredita la pista y ya no dice que la música fue hecha por código. Verreferences/music-track.md. Del mismo modo, se puede añadir una voz en off: un clip por pie de foto de un modelo de habla de SandBase, que diga exactamente el pie de foto (voice/voice.json, verreferences/voice.md).
Paquetes de estilo
brief.style (o new-project.mjs --style) elige el aspecto; el motor, los hechos y las comprobaciones son los mismos.
| Estilo | Aspecto | Paquete | Uso para |
|---|---|---|---|
ink (por defecto) | Rollo de tinta china, LXGW WenKai, "Ink Theme" | assets/style-pack.json | personas, monumentos, animales |
roman | Atlas de pergamino, Cinzel, tema suave en D-dorio | assets/styles/roman/ | ciudades, temas clásicos |
model | Modelo de ciudad blanca en un estudio oscuro, historia proyectada como luz, entrada desde el globo, tarjetas fotográficas, "Atlas Theme" | assets/styles/model/ | historias de vida de ciudades: leer style-model.md |
El método es la receta pública "Vibe knowledge showcase": establecer la especificación → cortar en el compás → poner un sonido en cada acción clave → renderizar segmento por segmento y corregir cada uno antes de pasar al siguiente.
Especificación (valores por defecto)
| Duración | seconds 120, 150 (por defecto) o 180; reenganche cada 25–35 s; 4–6 / 5–7 / 6–8 puntos de conocimiento |
| Formato | 16:9 1920×1080 a 30 fps (por defecto), 9:16 1080×1920 opcional |
| Idioma | brief.lang = cualquier etiqueta BCP-47 (por defecto en; zh-CN de primera clase). Un guión sirve para muchos idiomas |
| Narración | sin voz: un pie de foto corto por plano que muestre lo que la imagen enseña, vinculado a afirmaciones verificadas, palabras clave resaltadas |
| Música | el tema de la serie del estilo (ink: "Ink Theme", escala pentatónica gong en Re, voces tipo guqin/xiao), siempre 88 BPM con secciones intro · verso · build · drop · breakdown · build2 · drop2 · outro; opcional music/track.json (music-track.md) |
| Volumen | −14 LUFS integrado, ≤ −1.5 dBTP (loudnorm de dos pasos) |
| Etiquetas | Insignia "Generado por IA" 0–3 s, tarjeta final con la línea AIGC, metadatos AIGC en el MP4 |
Requiere Node 22+, FFmpeg/ffprobe y Chrome (HyperFrames 0.8.30 se ejecuta a través de npx; el renderizado siempre usa la ruta de CPU para que la salida del canvas sea idéntica en todas partes). Ejecuta node scripts/chronicle.mjs doctor.
Películas de ciudades (sujeto city, estructura life)
Para el caso de uso "cada ciudad tiene una historia de vida": una ciudad en Wikidata (coordenadas + población) se bloquea como city y utiliza la estructura de vida: nacimiento (río, fundación, nombre) → crecimiento (la zona urbanizada se extiende en el mapa) → primera altura → cicatrices (saqueo, incendio, plaga, guerra) → renacimiento → hoy (el mismo mapa, entonces y ahora) → eco (opcionalmente la línea propia del autor "yo y esta ciudad"). Leer narrative-city.md.
El mapa es geografía real, no una imagen de modelo:
- Escribe
geo/places.jsonen el proyecto (centro y lugares por QID de Wikidata, áreas históricas como radios aproximados) y ejecutanode <skill>/scripts/geo.mjs --project <p>. Lee coordenadas de Wikidata y ríos, agua, costa, ferrocarril y las carreteras principales actuales de OpenStreetMap (lecturas públicas sin clave) engeo/basemap.json. - Estilo ink: copia
assets/style/exemplars/city-map.jsenscenes/y maneja cada plano del mapa a través de sus parámetros (vista, áreas, lugares, carreteras, sello de año, cicatriz). Las escenas leen los datos comos.geoy los dibujan cons.kit.cityMap(); cada fotograma lleva entonces "© OpenStreetMap contributors (ODbL)". - Las extensiones históricas son aproximaciones:
cityMapsiempre las etiqueta "AI 示意 / AI illustration". Los sellos de año y las etiquetas del mapa solo pueden mostrar fechas y nombres que estén en las afirmaciones o en una fuente de nivel 1. - Estilo model: añade un bloque
chronology(cámara, eras, extensiones, murallas, eventos, monumentos) ageo/places.json, obtén fotografías de monumentos connode <skill>/scripts/photos.mjs --project <p>y utiliza la escena únicacity-3d(edificios reales y alturas en WebGL, una trayectoria de cámara continua). Ver style-model.md y la receta paso a paso city-film-recipe.md (cómo se hicieron las muestras de Roma, Nueva York y Barcelona).
Páginas a las que esta máquina no puede acceder (Wikipedia a menudo está bloqueada): recupéralas con tu propia herramienta y guarda el texto como sources/<n>-<name>.txt en el proyecto (source: <url> en la primera línea). Cada all posterior lee esa carpeta; los nombres de archivo mantienen estables los ids de las fuentes.
Inicio rápido
node <skill>/scripts/new-project.mjs --out /abs/films/su-shi --topic "苏轼" --film-lang en
node <skill>/scripts/chronicle.mjs all --project /abs/films/su-shi
all ejecuta investigación → hechos → guión → línea de tiempo → música → escenas → renderizado → comprobación → informe y se detiene cada vez que tienes que escribir algo (status: awaiting_…). Lee AGENT_TASK.md en el proyecto, escribe el archivo que pide, ejecuta all de nuevo. Los proyectos deben estar fuera de la carpeta de la Habilidad.
Roles del equipo
| Rol | Tú haces | Comando | Lee | Escribe |
|---|---|---|---|---|
| Director | Posee el resumen, ejecuta el bucle de segmentos, decide cuándo un segmento está terminado | all, render --segment | brief.json, hojas de contacto | work/review.json |
| Investigador | Busca sin límites (tus propias herramientas de búsqueda); pasa las páginas útiles | research --add-source <url> / --source-file <file> | Wikidata (bloqueo QID), Wikipedia, sitios de nivel 1 | work/research/ |
| Verificador de hechos | Extrae afirmaciones atómicas con citas textuales; responde a la implicación para cada pie de foto | facts, script | fragmentos de fuentes, entail.request.json | work/facts/claims.agent.json, work/script/entail.agent.json |
| Guionista | Escribe la lista de planos sobre las secciones del tema | script | script.request.json (plan, afirmaciones, reglas) | script.json |
| Arte | Escribe el código de la escena con el kit de tinta; auto-revisa los fotogramas | scenes | línea de tiempo, references/style-pack.md, ejemplos | scenes/<name>.js |
| Compositor | Nada que componer: el tema está fijo; eliges los niveles de SFX por acción | music | brief.seconds | work/music/theme.wav, beatmap.json |
| Editor | Renderiza segmentos y la película final | render | escenas, tema, señales de SFX | out/segments/, out/film.mp4 |
| QA | Ejecuta las comprobaciones, lee la hoja de uniones, corrige o vuelve a ejecutar | check, report | película, línea de tiempo, mapa de compás, revisión | work/check.json, out/report.* |
| Animador de mapas | Escribe geo/places.json, ejecuta el comando geo, maneja los planos city-map | node scripts/geo.mjs | Wikidata P625, OpenStreetMap | geo/basemap.json |
Campos de la lista de planos (script.json, esquema chronicle-script/2)
bars (1–4 compases enteros de una sección, para que cada corte sea en un tiempo fuerte) · size (general / medio / primer plano / detalle) · camera (fijo, zoom-in, zoom-out, paneo-izquierda, paneo-derecha, ascenso, paralaje) · transition (corte, sangrado-de-tinta, desplazamiento-de-rollo, sello) · scene + params · description · motion · sfx ({ beat, kind, tier, dur_beats }) · kind + claims (+ hedge) · caption.<lang>.text + em (palabras clave) · kp · rehook. Forma completa y reglas: work/script/script.request.json y pipeline.md.
Hechos primero
researchbloquea el tema a un QID de Wikidata, lee Wikipedia y sitios de nivel 1 (CBDB, Britannica, UNESCO, GBIF, museos) directamente con lecturas públicas sin clave. Busca donde quieras, pero un hecho solo entra en la película después de quefactslo verifique: al menos 2 editores independientes que coincidan, al menos uno de nivel 1 →verified; una fuente →single-source(solo pies de foto con matices, ≤ 2, nunca en intro o drops); conflictos →disputed("una versión"). Los sitios de rumores son pistas, nunca evidencia.- Si esta máquina no puede acceder a un sitio, léelo con tu propia herramienta de fetch y guarda el texto textualmente en un archivo cuya primera línea sea
source: <url>; pásalo con--source-file. - Cada pie de foto, tarjeta, título y línea de tarjeta final vincula ids de afirmaciones; los números, fechas y nombres en una línea deben estar en sus afirmaciones; las citas necesitan una afirmación de cita verificada. Luego respondes a la implicación honestamente solo a partir de los textos de las afirmaciones. Ver factcheck.md.
Historia sobre el tema
El plan (work/script/plan.json) da las secciones del tema en compases (150 s: intro 4 · verse 12 · build 4 · drop 8 · breakdown 8 · build2 4 · drop2 8 · outro 7; 120/180 s repiten o recortan secciones en los límites de compás), los compases de reenganche y el rango de puntos de conocimiento. Organiza la historia según las secciones: gancho en la intro, orígenes en el verso, el giro en el build, el primer punto álgido en el drop, costo en el breakdown, suspense en build2, el momento definitorio en drop2, un eco en el outro. Diferentes sujetos tienen diferente ritmo: narrative-person.md, narrative-landmark.md, narrative-animal.md.
Pies de foto: CJK ≤ 16 caracteres por línea, otros alfabetos ≤ 9 palabras / 42 caracteres por línea, ≤ 2 líneas, nunca divididos dentro de un número o fecha, RTL dispuesto de derecha a izquierda. Un pie de foto debe ser legible en su plano (CJK 7 caracteres/s, otros 3.3 palabras/s). La comprobación de glifos falla con glyph_missing en lugar de renderizar tofu.
Escenas (el riesgo #1 de calidad)
Escribe scenes/<name>.js por nombre de escena: scene('<name>', function (g, s) { … }), dibujando un fotograma completo para el tiempo s.t con Canvas 2D y s.kit (papel, pinceladas, lavados, sangrado de tinta, montañas, agua, barco, pabellón, rollo, bambú, luna, tintero, pincel, sello, ciruela, gansos, silueta con túnica, revelado de texto, ruta en mapa, línea de tiempo, cuenta ascendente, paralaje 2.5D layer(), composición frame()). Comienza desde assets/style/exemplars/. Reglas, aplicadas por un escaneo estático y en tiempo de ejecución: determinista en s.t (s.kit.rng(seed), nunca Math.random/Date/timers), sin red, sin DOM ni almacenamiento. Temporiza cada acción clave en su señal (s.cue('seal', 0)), para que el SFX caiga en el fotograma donde ocurre. Nunca dibujes una cara realista. Lista de hacer / no hacer: style-pack.md.
Bucle del director (segmento por segmento)
node <skill>/scripts/chronicle.mjs scenes --project <p> # escanear + proyectar
node <skill>/scripts/chronicle.mjs render --project <p> --segment s1 # apertura ~11 s primero
# mirar out/segments/s1/sheet.jpg y keyframes/*.jpg contra la lista de hacer/no hacer, corregir, repetir
node <skill>/scripts/chronicle.mjs render --project <p> --segment s2 # luego s3, s4, s5
node <skill>/scripts/chronicle.mjs all --project <p> # renderizado final determinista completo + comprobación + informe
Segmentos: s1 intro · s2 verse · s3 build + drop · s4 breakdown + build2 · s5 drop2 + outro (o --segment <inicio>-<fin>). Como máximo 3 rondas de revisión por segmento; registra cada ronda en work/review.json:
{ "schema": "chronicle-review/1", "segments": [{ "id": "s1", "rounds": [{ "sheet": "out/segments/s1/sheet.jpg",
"findings": ["el título se superpone con la luna"], "fixes": ["luna movida a la derecha"], "open_blocking": [] }] }] }
check falla visual_review cuando un segmento no tiene ronda o todavía tiene hallazgos bloqueantes. Para ejecuciones desatendidas all renderiza la película completa directamente; el requisito de revisión aún se muestra en el informe.
Salida
out/film.mp4, out/captions.vtt, out/sheet.jpg, out/joins.jpg, out/report.json, out/report.en.html, out/report.zh-CN.html (bilingüe cualquiera que sea el idioma de la película). check mide LUFS y pico verdadero, cortes y secciones en tiempos fuertes, y cada inicio de SFX dentro de un fotograma de su acción; no puede juzgar si la mezcla suena bien — di que una persona todavía tiene que escuchar.
Límites
- Sin retratos de personas vivas; los mapas nunca muestran fronteras nacionales o provinciales; el campo AIGC del GB 45438 permanece
verified: falsehasta que se verifique contra el texto estándar (compliance.md). - Tres paquetes de estilo, un tema cada uno (o una pista optativa). Tarjetas de año: omitir
count(un año que cuenta hacia arriba desde 0 se lee como una fecha incorrecta). - Los mapas de ciudades no muestran fronteras nacionales o provinciales; las capas de OpenStreetMap están recortadas a la ciudad.
- Léxicos de hechos (números, fechas, matices) existen para inglés y chino; otros idiomas de pies de foto usan las reglas del inglés.
- Referencia: pipeline.md, music.md, sources-allowlist.md, third-party-notices.md.