CommunityCodierung & Entwicklunggithub.com

Chronicle · Ink (Ink Scroll)

Verwandle ein Thema in einen faktengeprüften 2–3-minütigen Wissensfilm, dessen Bilder von selbst geschriebenem Code gezeichnet werden. Für die Lebensgeschichte jeder Stadt fliegt der Stil `model` aus dem Globus in die echte Stadt in 3D (jedes OpenStreetMap-Gebäude in seiner Höhe) und spielt ihre Geschichte als Licht, Epoche für Epoche, mit erzählsynchronen Effekten (Flüsse, Mauern, Feuer, Verbindungen, Wiederaufbau) ab – alles ohne KI-Bildgenerierung.

Was ist Chronicle · Ink (Ink Scroll)?

Chronicle·Ink (Ink Scroll) ist ein Skill, der es einem textbasierten KI-Agenten ermöglicht, einen vollständigen, faktengeprüften Wissensfilm zu einem beliebigen Thema zu erstellen – und zwar ausschließlich durch das Schreiben von Code für jede Szene, ohne auf KI-Modelle zur Bild-, Sprach- oder Musikgenerierung zurückzugreifen. Der Skill arbeitet nach dem Prinzip: Der Agent ist das gesamte Filmteam – Regisseur, Forscher, Faktenprüfer, Drehbuchautor, Künstler, Komponist und Editor – und nutzt nur ein textbasiertes LLM sowie externe Tools wie Websuche und FFmpeg. Der Workflow ist stark strukturiert: Zuerst wird das Thema auf eine Wikidata-QID festgelegt, dann werden Fakten aus mehreren unabhängigen Quellen (z. B. Wikipedia, Britannica) recherchiert und durch den Faktenprüfer verifiziert, bevor sie in das Drehbuch einfließen. Die visuelle Umsetzung erfolgt über drei verschiedene Stilpakete: `ink` (chinesische Tuscherolle), `roman` (Pergament-Atlas) und `model` (weißes Stadtmodell in 3D für Stadtgeschichten). Jede Szene wird als JavaScript-Code geschrieben, der mit Canvas 2D und einem bereitgestellten Zeichenkit (Tinte, Pinsel, Berge, Wasser, Text, Karten usw.) jedes Einzelbild determiniertisch zeichnet (kein Math.random). Musik und Soundeffekte werden ebenfalls durch Code (SFX-Kit) synthetisiert; eine optionale Sprachausgabe kann über SandBase Speech Model hinzugefügt werden, wenn der Nutzer explizit zustimmt. Der Skill läuft auf Node.js 22+ und benötigt FFmpeg/ffprobe sowie Chrome (für HyperFrames). Er wird über eine CLI gesteuert: `new-project.mjs` erstellt ein neues Filmprojekt, `chronicle.mjs all` führt den gesamten Workflow aus. Der Agent arbeitet in einem iterativen „Director’s Loop“ und rendert Filmsegmente nacheinander, wobei jedes Segment vor dem nächsten überprüft und korrigiert wird. Das Ergebnis ist eine MP4-Datei mit Untertiteln, einem Kontaktbogen, einem Prüfbericht und Metadaten zur KI-Erstellung. Der Skill ist für Cursor, Codex und andere textbasierte KI-Agenten konzipiert, wobei die Kosten nur aus den LLM-Token des Agents bestehen – keine externen API-Aufrufe für Bilder oder Videos.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/toufiqfarhan0/ai-city-remix-workflows/tree/main/chronicle-ink/chronicle-ink

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht Chronicle · Ink (Ink Scroll)?

Du (der Agent, der dies liest) bist die gesamte Filmcrew. Der Skill stellt dir eine gestufte CLI, eine Fakten-Engine, ein codesynthetisiertes Serienthema mit einer exakten Taktkarte, ein prozedurales SFX-Kit, ein Tusche-Zeichenkit und einen HyperFrames-Renderer zur Verfügung. Du schreibst die Behauptungen, die Einstellungsliste mit einzeiligen Bildunterschriften, den Szenencode und die Überprüfungen. Nichts ruft ein Bild, eine Stimme, Musik, Vision oder ein LLM-Modell auf; die einzigen Kosten sind deine eigenen Token.

Harte Regel: Text-LLM plus Tools nur. Das gesamte Schreiben, Recherchieren, Faktenprüfen, Szenenschreiben und Überprüfen wird von dem Text-LLM durchgeführt, das diesen Skill ausführt (z. B. MiniMax M3.1 Flash über SandBase oder jedes andere Agent-Modell). Du darfst Tools aufrufen: Websuche und -abruf, die SandBase-Daten-APIs, die untenstehenden Befehle, FFmpeg. Du darfst niemals ein multimodales Generierungsmodell aufrufen: kein Bild-, Video-, TTS/Sprach-, Musik- oder Vision-Modell und keine KI-generierten Bild- oder Audiodateien. Jeder Frame wird von dem von dir geschriebenen Szenencode gezeichnet, jeder Ton wird von der Engine synthetisiert. Kontaktbögen werden als Zahlen und von dir selbst gerenderte Frames überprüft, nicht von einem Vision-Modell. Ein Film, der ein multimodales Modell verwendet hat, ist kein Chronicle-Ink-Film.

Opt-in-Ausnahmen: Musik und Erzählung. Nur wenn der Benutzer explizit darum bittet, darf das Thema durch eine Audiodatei in music/ ersetzt werden, die von music/track.json beschrieben wird: entweder eine offen lizenzierte Aufnahme (Public Domain, CC0, CC BY 3.0/4.0; niemals NC, ND oder SA) oder eine instrumentale, die von einem SandBase-Musikmodell generiert wurde (z. B. minimax/music/2.6 mit is_instrumental: true, nur über die sandbase-CLI oder -API). Die Bilder, Bildunterschriften, SFX und alle anderen Regeln bleiben wie oben; die Endkarte nennt dann den Titel und sagt nicht mehr, dass die Musik durch Code erstellt wurde. Siehe references/music-track.md. Ebenso kann ein Voice-Over hinzugefügt werden: ein Clip pro Bildunterschrift von einem SandBase-Sprachmodell, das genau die Bildunterschrift sagt (voice/voice.json, siehe references/voice.md).

Stilpakete

brief.style (oder new-project.mjs --style) wählt den Look; die Engine, Fakten und Prüfungen sind dieselben.

StilAussehenPaketVerwendung für
ink (Standard)Chinesische Tuscherolle, LXGW WenKai, „Ink Theme“assets/style-pack.jsonPersonen, Sehenswürdigkeiten, Tiere
romanPergament-Atlas, Cinzel, weiches D-Dorian-Themaassets/styles/roman/Städte, klassische Themen
modelWeißes Stadtmodell in dunklem Studio, Geschichte als Licht projiziert, Globus-Flug-in, Fotokarten, „Atlas Theme“assets/styles/model/Lebensgeschichten von Städten: lies style-model.md

Die Methode ist das öffentliche „Vibe-Wissensshowcase“-Rezept: Lege die Spezifikation fest → Schneide auf den Takt → Gib jedem Schlüsselaktion einen Sound → Rendere Segment für Segment und korrigiere jedes, bevor du fortfährst.

Spezifikation (Standard)

Längeseconds 120, 150 (Standard) oder 180; alle 25–35 s neu einhaken; 4–6 / 5–7 / 6–8 Wissenspunkte
Format16:9 1920×1080 bei 30 fps (Standard), 9:16 1080×1920 optional
Sprachebrief.lang = beliebiges BCP-47-Tag (Standard en; zh-CN erster Klasse). Ein Skript bedient viele Sprachen
Erzählungkeine Stimme: eine kurze Bildunterschrift pro Einstellung, die zeigt, was das Bild zeigt, gebunden an verifizierte Behauptungen, hervorgehobene Schlüsselwörter
Musikdas Serienthema des Stils (Ink: „Ink Theme“, D-Gong-Pentatonik, Guqin-/Xiao-ähnliche Stimmen), immer 88 BPM mit Abschnitten Intro · Verse · Build · Drop · Breakdown · Build2 · Drop2 · Outro; optional music/track.json (music-track.md)
Lautstärke−14 LUFS integriert, ≤ −1,5 dBTP (Two-Pass-Loudnorm)
Labels„AI-generated“-Badge 0–3 s, Endkarte mit dem AIGC-Hinweis, AIGC-Metadaten in der MP4

Erfordert Node 22+, FFmpeg/ffprobe und Chrome (HyperFrames 0.8.30 läuft über npx; Rendering verwendet immer den CPU-Pfad, sodass die Canvas-Ausgabe überall identisch ist). Führe node scripts/chronicle.mjs doctor aus.

Stadtfilme (Thema city, Struktur life)

Für den Anwendungsfall „Jede Stadt hat eine Lebensgeschichte“: Eine Stadt auf Wikidata (Koordinaten + Bevölkerung) wird als city gesperrt und verwendet die Lebensstruktur: Geburt (Fluss, Gründung, Name) → Wachstum (das bebaute Gebiet breitet sich auf der Karte aus) → erste Höhe → Narben (Plünderung, Feuer, Pest, Krieg) → Wiedergeburt → heute (gleiche Karte, damals und heute) → Echo (optional die eigene Zeile des Autors „ich und diese Stadt“). Lies narrative-city.md.

Die Karte ist echte Geografie, kein Modellbild:

  1. Schreibe geo/places.json im Projekt (Zentrum und Orte nach Wikidata-QID, historische Gebiete als ungefähre Radien) und führe node <skill>/scripts/geo.mjs --project <p> aus. Es liest Koordinaten von Wikidata und Flüsse, Wasser, Küste, Schienen und heutige Hauptstraßen von OpenStreetMap (schlüssellose öffentliche Lesevorgänge) in geo/basemap.json.
  2. Ink-Stil: Kopiere assets/style/exemplars/city-map.js in scenes/ und steuere jede Karteneinstellung über ihre Parameter (Ansicht, Gebiete, Orte, Straßen, Jahresstempel, Narbe). Szenen lesen die Daten als s.geo und zeichnen sie mit s.kit.cityMap(); jeder Frame trägt dann „© OpenStreetMap contributors (ODbL)“. |
  3. Historische Ausdehnungen sind Näherungswerte: cityMap kennzeichnet sie immer mit „AI 示意 / AI illustration“. Jahresstempel und Kartenbeschriftungen dürfen nur Daten und Namen anzeigen, die in den Behauptungen oder einer Tier-1-Quelle enthalten sind.
  4. Model-Stil: Füge einen chronology-Block (Kamera, Epochen, Ausdehnungen, Mauern, Ereignisse, Sehenswürdigkeiten) zu geo/places.json hinzu, rufe Sehenswürdigkeitsfotos mit node <skill>/scripts/photos.mjs --project <p> ab und verwende die einzelne city-3d-Szene (echte Gebäude und Höhen in WebGL, ein durchgehender Kamerapfad). Siehe style-model.md und das Schritt-für-Schritt-city-film-recipe.md (wie die Proben aus Rom, New York und Barcelona erstellt wurden).

Seiten, die diese Maschine nicht erreichen kann (Wikipedia ist oft blockiert): Rufe sie mit deinem eigenen Tool ab und speichere den Text als sources/<n>-<name>.txt im Projekt (source: <url> in der ersten Zeile). Jedes spätere all liest diesen Ordner; Dateinamen halten die Quellen-IDs stabil.

Schnellstart

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 führt aus: Recherche → Fakten → Skript → Zeitplan → Musik → Szenen → Rendern → Prüfen → Bericht und stoppt, wenn immer du etwas schreiben musst (status: awaiting_…). Lies AGENT_TASK.md im Projekt, schreibe die angeforderte Datei, führe all erneut aus. Projekte müssen außerhalb des Skill-Ordners liegen.

Crew-Rollen

RolleDu tustBefehlLiestSchreibt
RegisseurBesitzt die Spezifikation, führt die Segment-Schleife aus, entscheidet, wann ein Segment fertig istall, render --segmentbrief.json, Kontaktbögenwork/review.json
ForscherSucht ohne Einschränkungen (deine eigenen Suchwerkzeuge); gibt die nützlichen Seiten weiterresearch --add-source <url> / --source-file <file>Wikidata (QID-Sperre), Wikipedia, Tier-1-Seitenwork/research/
FaktenprüferExtrahiert atomare Behauptungen mit wörtlichen Auszügen; beantwortet die Implikation für jede Bildunterschriftfacts, scriptQuellenausschnitte, entail.request.jsonwork/facts/claims.agent.json, work/script/entail.agent.json
DrehbuchautorSchreibt die Einstellungsliste auf die Abschnitte des Themasscriptscript.request.json (Plan, Behauptungen, Regeln)script.json
KunstSchreibt Szenencode mit dem Tusche-Kit; überprüft Frames selbstscenesZeitplan, references/style-pack.md, Beispielescenes/<name>.js
KomponistNichts zu komponieren: das Thema ist festgelegt; du wählst SFX-Stufen pro Aktionmusicbrief.secondswork/music/theme.wav, beatmap.json
EditorRendert Segmente und den endgültigen FilmrenderSzenen, Thema, SFX-Hinweiseout/segments/, out/film.mp4
QAFührt die Prüfungen durch, liest das Verbindungsblatt, korrigiert oder wiederholtcheck, reportFilm, Zeitplan, Taktkarte, Überprüfungwork/check.json, out/report.*
Karten-AnimatorSchreibt geo/places.json, führt den Geo-Befehl aus, steuert city-map-Einstellungennode scripts/geo.mjsWikidata P625, OpenStreetMapgeo/basemap.json

Felder der Einstellungsliste (script.json, Schema chronicle-script/2)

bars (1–4 ganze Takte eines Abschnitts, also jeder Schnitt auf einem Downbeat) · size (weit / mittel / nah / Detail) · camera (halten, hereinzoomen, herauszoomen, nach links schwenken, nach rechts schwenken, heben, parallax) · transition (Schnitt, Tuscheverlauf, Scroll-Pan, Siegelstempel) · scene + params · description · motion · sfx ({ beat, kind, tier, dur_beats }) · kind + claims (+ hedge) · caption.<lang>.text + em (Schlüsselwörter) · kp · rehook. Vollständige Form und Regeln: work/script/script.request.json und pipeline.md.

Fakten zuerst

  1. research sperrt das Thema auf eine Wikidata-QID, liest Wikipedia und Tier-1-Seiten (CBDB, Britannica, UNESCO, GBIF, Museen) direkt mit schlüssellosen öffentlichen Lesevorgängen. Suche überall, wo du möchtest, aber eine Tatsache gelangt nur in den Film, nachdem facts sie abgeglichen hat: mindestens 2 unabhängige Herausgeber stimmen überein, mindestens einer Tier 1 → verified; eine Quelle → single-source (nur abgesicherte Bildunterschriften, ≤ 2, niemals in Intro oder Drops); Konflikte → disputed („ein Bericht“). Klatschseiten sind Hinweise, niemals Beweise.
  2. Wenn diese Maschine eine Seite nicht erreichen kann, lies sie mit deinem eigenen Abrufwerkzeug und speichere den Text wörtlich in einer Datei, deren erste Zeile source: <url> ist; übergebe sie mit --source-file.
  3. Jede Bildunterschrift, Karte, Titel- und Endkartenzeile bindet Anspruchs-IDs; Zahlen, Daten und Namen in einer Zeile müssen in ihren Ansprüchen enthalten sein; Zitate benötigen einen verifizierten Zitatanpruch. Dann beantwortest du die Implikation ehrlich nur aus den Anspruchstexten. Siehe factcheck.md.

Geschichte auf das Thema

Der Plan (work/script/plan.json) gibt die Abschnitte des Themas in Takten (150 s: Intro 4 · Verse 12 · Build 4 · Drop 8 · Breakdown 8 · Build2 4 · Drop2 8 · Outro 7; 120/180 s wiederholen oder kürzen Abschnitte an Taktgrenzen), die Re-Hook-Takte und den Wissenspunktbereich. Ordne die Geschichte den Abschnitten zu: Haken im Intro, Ursprünge im Verse, die Wende im Build, der erste Höhepunkt auf dem Drop, Kosten im Breakdown, Spannung in Build2, der entscheidende Moment auf Drop2, ein Echo im Outro. Verschiedene Themen haben unterschiedliches Tempo: narrative-person.md, narrative-landmark.md, narrative-animal.md.

Bildunterschriften: CJK ≤ 16 Zeichen pro Zeile, andere Schriften ≤ 9 Wörter / 42 Zeichen pro Zeile, ≤ 2 Zeilen, niemals innerhalb einer Zahl oder eines Datums unterbrochen, RTL von rechts nach links angeordnet. Eine Bildunterschrift muss in ihrer Einstellung lesbar sein (CJK 7 Zeichen/s, andere 3,3 Wörter/s). Die Glyphenprüfung schlägt mit glyph_missing fehl, anstatt Tofu zu rendern.

Szenen (das Risiko Nr. 1 für die Qualität)

Schreibe scenes/<name>.js pro Szenenname: scene('<name>', function (g, s) { … }), zeichne einen vollständigen Frame für die Zeit s.t mit Canvas 2D und s.kit (Papier, Pinselstriche, Waschungen, Tuscheverlauf, Berge, Wasser, Boot, Pavillon, Schriftrolle, Bambus, Mond, Tintenstein, Pinsel, Siegel, Pflaume, Gänse, verschleierte Silhouette, Text-Enthüllung, Kartenroute, Zeitleiste, Count-up, 2.5D layer() Parallaxe, Komposition frame()). Beginne mit assets/style/exemplars/. Regeln, durchgesetzt durch einen statischen Scan und zur Laufzeit: deterministisch in s.t (s.kit.rng(seed), niemals Math.random/Datum/Timer), kein Netzwerk, kein DOM oder Speicher. Timing jeder Schlüsselaktion auf ihrem Hinweis (s.cue('seal', 0)), damit der SFX auf dem Frame landet, auf dem sie passiert. Zeichne niemals ein realistisches Gesicht. Tun / Nicht tun Liste: style-pack.md.

Regie-Schleife (Segment für Segment)

node <skill>/scripts/chronicle.mjs scenes --project <p>             # Scan + Projekt
node <skill>/scripts/chronicle.mjs render --project <p> --segment s1 # Öffnung ~11 s zuerst
# Betrachte out/segments/s1/sheet.jpg und keyframes/*.jpg gegen die Tun/Nicht tun-Liste, korrigiere, wiederhole
node <skill>/scripts/chronicle.mjs render --project <p> --segment s2 # dann s3, s4, s5
node <skill>/scripts/chronicle.mjs all --project <p>                 # Endgültiger deterministischer Voll-Render + Prüfung + Bericht

Segmente: s1 Intro · s2 Verse · s3 Build + Drop · s4 Breakdown + Build2 · s5 Drop2 + Outro (oder --segment <start>-<end>). Maximal 3 Überprüfungsrunden pro Segment; zeichne jede Runde in work/review.json auf:

{ "schema": "chronicle-review/1", "segments": [{ "id": "s1", "rounds": [{ "sheet": "out/segments/s1/sheet.jpg",
  "findings": ["Titel überschneidet den Mond"], "fixes": ["Mond nach rechts verschoben"], "open_blocking": [] }] }] }

check schlägt bei visual_review fehl, wenn ein Segment keine Runde hat oder immer noch blockierende Befunde hat. Für unbeaufsichtigte Läufe rendert all den gesamten Film direkt; die Überprüfungsanforderung wird trotzdem im Bericht angezeigt.

Ausgabe

out/film.mp4, out/captions.vtt, out/sheet.jpg, out/joins.jpg, out/report.json, out/report.en.html, out/report.zh-CN.html (zweisprachig, unabhängig von der Filmsprache). check misst LUFS und True Peak, Schnitte und Abschnitte auf Downbeats und jeden SFX-Einsatz innerhalb eines Frames seiner Aktion; es kann nicht beurteilen, ob der Mix gut klingt – sage, dass immer noch eine Person zuhören muss.

Grenzen

  • Keine Porträts lebender Personen; Karten zeigen niemals nationale oder provinzielle Grenzen; das AIGC-Feldschema von GB 45438 bleibt verified: false, bis es gegen den Standardtext überprüft wurde (compliance.md).
  • Drei Stilpakete, jeweils ein Thema (oder ein Opt-in-Track). Jahreskarten: unterlasse count (ein Jahr, das von 0 hochzählt, liest sich wie ein falsches Datum).
  • Stadtkarten zeigen keine nationalen oder provinziellen Grenzen; die OpenStreetMap-Ebenen werden auf die Stadt beschnitten.
  • Faktenlexika (Zahlen, Daten, Absicherungen) existieren für Englisch und Chinesisch; andere Bildunterschriftssprachen verwenden die englischen Regeln.
  • Referenz: pipeline.md, music.md, sources-allowlist.md, third-party-notices.md.

Verwandte Skills