Wie Kimi K3 eigenständig einen digitalen Füllfederhalterstrich entwickelte
Wir wollten den richtungsabhängigen Füllfederhalter aus Freeform in Lulucat Notes. Die Spezifikation war ein Screenshot einer Handschrift. Zwei Modelle, eine entscheidende Frage und eine elliptische Feder später schreibt der Wasserstift, wie er soll. Kimi K3 erledigte Recherche, Code und Validierung auf Fireworks.

Gerendert von der Lulucat-Notes-Metal-Pipeline, um die es in diesem Beitrag geht.
Lulucat Notes hat einen einfachen Stift und einen Textmarker. Das nächste Werkzeug auf der Roadmap war ein Wasserstift — der richtungsabhängige Füllfederhalter, den man aus Apple Notes und Freeform kennt: Vertikale Striche werden dick, horizontale dünn. Die Spezifikation für dieses Werkzeug war kein Dokument. Sie war ein Screenshot: drei Zeilen Handschrift, die Wörter „pencilkit“, „无边记“ und „这种有方向的水笔能力“ — diese Fähigkeit des richtungsabhängigen Wasserstifts.
Wie schon bei der Metal-Pipeline zuvor wurde die Arbeit von Kimi K3 erledigt, dem offenen Modell von Moonshot, das auf Fireworks läuft: Messen, Modellieren, Code und Validierung. Der Mensch lieferte den Screenshot, beantwortete eine Frage und beurteilte das Gefühl auf einem echten iPad.
Die Spezifikation ist ein Screenshot
Ein statisches Bild kann nicht erklären, warum ein Strich dünn ist. Es kann nur zeigen, wie dünn er ist und wo. Der erste Schritt war also die Messung. Wir scannten den Screenshot Zeile für Zeile und Spalte für Spalte, verfolgten die Drift der Mittellinie jedes Strichs, um seine Richtung zu bestimmen, und wandelten die Scanbreite anschließend mit dem Sinus dieses Winkels in die tatsächliche Breite um:
| Strich | Richtung | Tatsächliche Breite |
|---|---|---|
| Oberlänge von „l“, „pencilkit“ | ≈ 78° | 27.3 px |
| Stamm von „k“, „pencilkit“ | ≈ 90° | 28 px |
| Nach links fallender Schwung von 力 | ≈ 66° | 25.7 px |
| Verbindungen der Schreibschrift | ≈ 8° | 11 px |
| Chinesische Horizontalstriche (横) | ≈ 0° | 6–11 px |
Das Verhältnis von dick zu dünn beträgt ≈ 2.5. Die Anpassung von
Version eins: Breite aus Richtung
Das erste Modell lag nahe. Für jeden Eingabepunkt eine Richtung berechnen, die Richtung über die angepasste Kurve auf eine Breite abbilden und das Ergebnis beim Erfassen in den Radius des Punktes einbacken. Die Richtung wurde kausal geschätzt — als exponentiell abklingender gewichteter Durchschnitt über die letzten paar Punkte des Bogens, berechnet im Raum des doppelten Winkels, damit eine Umkehr der Bewegung die Schätzung nicht aufhebt. Es werden nur vergangene Punkte verwendet, sodass Live-Strich und bestätigter Strich Byte für Byte übereinstimmen.
Der Builder bestand seinen Unit-Check: Synthetische horizontale, vertikale, 45°- und Umkehrpfade backten alle die theoretischen Breiten ein — 0.99, 2.52, 2.00 und 0.99 Punkte. Für das Rendering war überhaupt kein neuer Code nötig: Ein Strich mit eingebackenem Radius ist lediglich eine Kette runder Stempel, und unsere point-sprite pipeline zeichnete diese bereits.
Auf dem iPad brauchte der Mensch etwa zehn Sekunden, um ihn abzulehnen: „Das ist ein Kunststift, nicht der Wasserstift.“
Zwei Erklärungen für ein Bild
Warum fühlte es sich falsch an? Es gab zwei mögliche Erklärungen, und der Screenshot konnte sie nicht voneinander unterscheiden:
- Richtungssperre. Die Geometrie der Feder erzwingt dünne Horizontale und dicke Vertikale, unabhängig davon, was die Hand tut. Das war die Implementierung von Version eins.
- Druck und Geschwindigkeit. Der Stift ist druckgesteuert, und das Muster der Probe ist lediglich Handschriftdynamik: Abwärtsstriche werden ganz natürlich mit Druck geführt, Verbindungen ganz natürlich schnell und leicht.
Beide Erklärungen erzeugen einen Screenshot mit dünnen Horizontalen und dicken Vertikalen. Der Unterschied zeigt sich, wenn man stark auf einen horizontalen Strich drückt. Version eins hält ihn dünn. Ein druckabhängiger Stift macht ihn dick. Deshalb stellten wir dem Menschen eine Frage: Sollte ein stark gedrückter horizontaler Strich dicker werden?
„Nein. Horizontale bleiben dünn.“
Die Richtungssperre war bestätigt. Trotzdem war noch etwas falsch, denn auch Version eins war richtungsgesperrt.
Die Antwort lag in den Strichenden
Der nächste Hinweis befand sich oben an den Oberlängen. Das Hineinzoomen in die Stämme von „l“ und „k“ in der Probe zeigte zwei Dinge: Ein gerader Strich behält vom Anfang bis zum Ende dieselbe Breite, und die Strichenden sind flache diagonale Schnitte — die Form einer Meißelfeder beim Abheben. Keine runden Punkte. Keine druckbedingten Verjüngungen.

Das war die eigentliche Bedeutung von „Kunststiftgefühl“. Version eins modellierte das Aussehen der Probe — die Breite als Funktion der geschätzten Richtung —, aber nicht den Stift. Ein Richtungsschätzer ist ein Sensor: Bei verrauschtem Input zittert er, an Ecken hinkt er hinterher, und jedes Strichende wird zu einem Kreis. Eine echte Feder hat keines dieser Probleme, weil sie nichts berechnet. Die Breite ist Geometrie.
Version zwei: eine elliptische Feder
Das endgültige Modell hat überhaupt keinen Richtungsschätzer. Die Feder ist eine ausgerichtete Ellipse: lange Achse horizontal, kurze Achse fest. Stempel dieser Ellipse werden dicht entlang des Strichpfads platziert, und alles Weitere ergibt sich aus der Geometrie:
-
Ein horizontaler Strich bewegt sich an der offenen Kante entlang und kommt daher immer mit einer Breite von
heraus — eine konstant dünne Linie bei jedem Druck. Genau die bestätigte Spezifikation. -
Ein vertikaler Strich durchquert die gesamte lange Achse:
, das dicke Ende. -
Ein diagonaler Strich nimmt die Sehnenbreite der Ellipse senkrecht zur Bewegungsrichtung,
-
Strichenden sind elliptische Schnitte — die flachen, federförmigen Enden aus der Probe, ohne zusätzlichen Aufwand.
-
Der Druck skaliert nur die lange Achse,
, sodass Druck bei Abwärtsstrichen mehr Tintenvolumen liefert, einen horizontalen Strich aber niemals dicker machen kann.
Aus den Messungen der Probe behielten wir
Für das Rendering war ein neuer fragment shader nötig, sonst nichts. Das Vertex-Format — Position, Durchmesser, Farbe — trug bereits alle Informationen: Der Durchmesser ist die lange Achse, die kurze Achse ein uniform pro Durchlauf. Der Shader wertet ein Ellipsen-SDF mit derselben Halbpixel-Coverage-Rampe wie unsere runden Stempel aus. Dadurch bleibt es auf Pixelebene mit der Referenzimplementierung von Core Graphics (fillEllipse pro Stempel) vergleichbar. Die Validierung lief durch das übliche Gate: ein synthetisches Korpus mit zwei Füllfederhalterstrichen, auf beide Arten gerendert und Pixel für Pixel verglichen — null strukturelle Unterschiede; ein stichprobenartig geprüfter horizontaler Strich maß in beiden Renderern 12 px.

Version eins links, Version zwei rechts. Dieselbe handgeschriebene Eingabe, dieselbe Pipeline. Die Enden erzählen die Geschichte.
Auf dem iPad bestand der neue Stift sofort: „好,很好“ — gut. Sehr gut.
Den Fehlversuch behalten
Version eins landete nicht im Papierkorb. Es ist ein wirklich interessantes Werkzeug — nur kein Wasserstift. Also wurde es als erster Eintrag in einem neuen Menü für experimentelle Pinsel ausgeliefert, unter dem Namen, den der Mensch ihm gab: 漏水的圆珠笔, der auslaufende Kugelschreiber. Die Werkzeugleiste bekam eine Fläschchen-Schaltfläche, die eine Textliste mit Experimenten öffnet; den nächsten Eintrag hinzuzufügen kostet eine Zeile in einer registry. Ein abgelehntes Modell ist keine verschwendete Arbeit, wenn es als klar gekennzeichnetes Experiment ausgeliefert werden kann.
Ein Abend voller Schleifen
Der gesamte Ablauf — messen, modellieren, bauen, auf dem Gerät testen, fragen, neu modellieren, neu bauen, validieren — dauerte einen Abend. Kimi K3 auf Fireworks schrieb nicht nur Code; es übernahm die gesamte technische Seite der Schleife: die Mess-Scans zu entwickeln, die entscheidende Frage vorzuschlagen, statt ein zweites Mal zu raten, den eigenen Richtungsschätzer zu löschen, als sich die Beweislage änderte, und das pixel-diff harness zu erweitern, bevor die App angefasst wurde. Die Inferenzgeschwindigkeit von Fireworks hielt die Schleife interaktiv — lange Metal- und Swift-Diffs, Pixelanalyse-Skripte und Werkzeuge für das Korpus kamen schnell genug, dass der Engpass dort blieb, wo er hingehört: beim menschlichen Urteil.
Das Zusammenarbeitsmuster war dasselbe, über das wir im Beitrag zur Metal-Pipeline geschrieben hatten, und es bewährte sich erneut: Das Modell ist schnell und präzise; der Mensch verantwortet Geschmack und End-to-End-Verifikation. Ein einziger Satz gefühlsbasierter Rückmeldung — „Kunststift, nicht Wasserstift“ — genügte, damit das Modell den genauen Modellierungsfehler fand und durch ein einfacheres Design ersetzte.
Das richtige Modell erwies sich als kleiner als das falsche. Version zwei wurde mit weniger beweglichen Teilen als Version eins ausgeliefert — kein Schätzer, kein Glättungsfenster, kein angepasster Exponent. Die Feder berechnet die Breite nicht. Die Feder ist die Breite.