Animation: eigener Bereich unter dem Canvas, getrennt vom Bildexport

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>
This commit is contained in:
dejanandClaude Opus 5 committed 2026-08-25 17:58:29 +02:00
1 parent ce87a7fb57
commit c7c05a85cc
14 files changed
+3295 -247

No files matched your search

+5 -2
View File
@@ -128,8 +128,11 @@ node video/bauen.mjs bauchbinde satz # nur passende Schlüssel
Ein paar Entscheidungen, die dahinterstehen:
- **Bildsequenz statt Video mit Alphakanal.** Ein Video mit echter
Transparenz wäre ProRes 4444, und dafür braucht es ffmpeg. Das ist hier
nicht installiert, und eine Bildsequenz kann Premiere genauso importieren.
Transparenz wäre ProRes 4444. Als das hier entstand, war kein ffmpeg auf der
Maschine; inzwischen schon (siehe `animation.mjs` im Wurzelverzeichnis).
Geblieben ist die Bildsequenz trotzdem: Premiere importiert sie genauso, sie
behält die Transparenz ohne Codec-Frage, und jedes Einzelbild lässt sich
ansehen. Ein ProRes-Ausgang wäre jetzt möglich, ist aber kein Gewinn.
- **Node statt Python**, anders als sonst im Repo. Gebraucht wird eine
Steuerverbindung zu Chrome, und die hat Node ohne Zusatzpaket an Bord.
Chrome pro Einzelbild neu zu starten wäre die Alternative gewesen — bei rund
+5 -3
View File
@@ -14,9 +14,11 @@
* Seite Schrift und Marken per fetch holt und das lokale Dateiprotokoll das
* verbietet.
*
* Kein ffmpeg noetig. Ein Video mit echtem Alphakanal waere ProRes 4444 und
* damit ein Encoder, den dieser Rechner nicht hat; eine Bildsequenz kann
* Premiere genauso importieren und behaelt die Transparenz.
* Kein ffmpeg noetig. Ein Video mit echtem Alphakanal waere ProRes 4444; eine
* Bildsequenz kann Premiere genauso importieren, behaelt die Transparenz ohne
* Codec-Frage und laesst sich Bild fuer Bild ansehen. (ffmpeg liegt inzwischen
* auf der Maschine -- animation.mjs im Wurzelverzeichnis benutzt es fuer die
* MP4s der Posts. Hier braucht es das trotzdem nicht.)
*/
import { spawn } from "node:child_process";