- Format-Schalter 4:5 / 1:1 in Post 9, Stand auf 1:1 (Meta nimmt ein
Carousel mit Video als Anzeige nur quadratisch), Video in 1:1
- animation.mjs baut das Format der Seite, Datei mit -1x1
- Variante 2/3: Kundengeschichte nach dem weclapp-Karussell, hell und dunkel
- Variante 4/5: Zahlen-Karussell nach HERO Insights mit KfW- und
Bitkom-Zahlen, Noah als Teaser, hell und dunkel
- post9-varianten.html zeigt alle Varianten untereinander
- Menüs und Übersicht um die Varianten ergänzt, Regel zu 1:1 in rules.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ae/oe/ue gilt hinter einem Vokal nicht mehr als fehlender Umlaut, Mailadressen
und Domains sind ausgenommen, Geviertstriche werden gemeldet. Das Menue nennt
Post 8 und Post 9.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Auf einer Slide stand "Sanitaer" und "Klima / Lueftung". Beides kam
woertlich aus dem Klickdummy, wo es schludrig eingetippt ist, und beides
las sich im fertigen Beitrag wie ein Fehler -- weil es einer ist.
Gefunden hat es niemand beim Bauen, sondern jemand, der auf den fertigen
Post geschaut hat.
Ein reines Muster genuegt als Pruefung nicht: Deutsch schreibt "neue",
"Dauer" und "Michael" voellig zu Recht mit ae/oe/ue. Nachgezaehlt ueber
den gezeichneten Text aller sieben Projekte sind es aber nur acht solche
Woerter, alle davon richtig oder gewollt (die Kanal-Handles). Also
Muster plus kurze Ausnahmeliste -- null Fehlalarme, "Sanitaer" faellt
trotzdem auf.
Bei ss ist es umgekehrt: 15 Treffer im gezeichneten Text, alle richtig
(dass, Schluss, Netzanschluss). Deshalb dort eine Liste der wenigen
Woerter, die ein scharfes s brauchen, statt eines Musters.
Geprueft wird an zwei Stellen, weil es zwei Wege zum fertigen Bild gibt:
renderSlide() bricht ab, bevor ein PNG entsteht
animation.mjs an 24 Stellen ueber den Ablauf
Der zweite Punkt war ein eigener Fehler: der erste Anlauf prueft nur den
Anfangszustand und fand nichts, weil die falschen Woerter dort erst ab
t = 0,4 erscheinen. Der Text einer Animation aendert sich mit der Zeit,
die Pruefung muss es auch.
Beide Tore sind mit absichtlich wieder eingebautem "Sanitaer" scheitern
gesehen worden. Eine Pruefung, die man nie hat scheitern sehen, ist
keine -- der erste Test lief durch, weil mein Testskript htmlToImage
direkt aufruft und renderSlide dabei umgeht.
Regel und Begruendung stehen in rules.md 4, die Falle in 8.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U7RZ6ZpLD8Dp84Rtt4KHfv
Jedes Projekt hat jetzt unter dem Canvas einen Bereich "Animation", im selben
Fenster. Er zeigt jede Animation als echtes Blatt in Vorschau, mit Zeitregler,
Abspielen und "MP4 exportieren".
Eine Animation ist keine Slide. Sie steht in ANIMS und nicht in SLIDES, liegt
also nicht im Streifen, taucht in der Slide-Auswahl nicht auf und wird vom
Bildexport nicht angefasst. Im Carousel ist sie ein eigenes Element, und ob
sie mitkommt, entscheidet sich beim Posten. Ein erster Anlauf machte sie zur
sechsten Slide; damit war sie in der Zaehlung und im ZIP mit drin.
Der Export laeuft ueber den neuen Endpunkt POST /anim in serve.py. Er startet
animation.mjs in einem eigenen Faden, die Seite fragt den Stand ueber
GET /anim?id= ab und zeigt Fortschritt und Pfad. Ein Browser kann kein MP4
schreiben, und eine offene Anfrage ueber zwei Minuten geht nicht -- zumal sich
animation.mjs waehrenddessen selbst Seiten von diesem Server holt.
Aufgenommen wird im neuen Modus ?nur=anim&k=<key>: dort zeigt die Seite allein
das Blatt der Animation, in 1080 x 1350 an 0,0. Damit entfaellt jede
Ausschnittsrechnung und mit ihr die Falle, dass ein zu schmales Fenster ein
leeres Bild liefert.
Als erstes Beispiel post6-animChat, fuenf Sekunden: die Antwort wird Zeichen
fuer Zeichen getippt, abgeschickt, waechst als Blase in den Verlauf, die
Aufgabenkarte klappt auf, die Systemzeile bestaetigt, alles blendet zurueck
auf den Anfang. Getippt wird VERLAUF[3].text, also die Nachricht, die im
Werkzeug an dieser Stelle ohnehin folgt.
H.264 High, yuv420p, 1080 x 1350, 30 fps, stumme AAC-Spur, +faststart: das
nimmt Instagram fuer ein animiertes Element im Carousel an. GIF nicht, das
landet als Standbild. Ein Video im Carousel wird auch kein Reel, das passiert
nur bei einem einzeln geposteten Video.
Nebenbei:
- post4, post5 und post6 trugen im Panel noch den Kopf ihrer Vorlage.
- video/README.md und video/bauen.mjs behaupteten, ffmpeg sei hier nicht
installiert. Stimmt seit 9.0.1 nicht mehr; die Bildsequenz bleibt dort
trotzdem, mit Begruendung.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>