diff --git a/drehbuecher/folge01-kennenlernen/de.md b/drehbuecher/folge01-kennenlernen/de.md
index bf78892..9aa4a39 100644
--- a/drehbuecher/folge01-kennenlernen/de.md
+++ b/drehbuecher/folge01-kennenlernen/de.md
@@ -183,30 +183,38 @@ Pino pflückt sie, ganz genau!
Für Spanisch und Französisch übersetze ich das Lied nicht Wort für Wort. Ich dichte es neu, damit es sich in jeder Sprache reimt. Die Melodie bleibt gleich. Musik: eigene Melodie oder mit einem bezahlten Suno-Plan, sonst ist die kommerzielle Nutzung nicht erlaubt.
-## Bildliste und Credits
+## Umsetzung in Remotion
-Die Folge ist durchgehend animiert und besteht aus 54 Clips à 5 Sekunden. Dafür brauchen wir 16 Startbilder. Aus jedem Startbild erzeugt Kling 3.0 bei Higgsfield 3–6 Clips mit ruhiger, gleichmäßiger Bewegung.
+Stand 02.11.2026: Folge 1 entsteht neu wie Folge 2 in Remotion (`remotion/src/folge01/`, Baukasten), damit alle Folgen gleich aussehen. Die frühere Higgsfield-Fassung (54 Clips) liegt weiter in `Pino-Kanal\clips\folge01\`, wird aber nicht mehr verwendet. Sprechtexte stehen in `remotion/src/folge01/texte/de.json`, `es.json`, `fr.json`.
-| Nr. | Startbild | Szene | Clips | Wiederverwendbar |
-| --- | --- | --- | --- | --- |
-| 1 | Aufgeschlagenes Bilderbuch mit Serientitel | 1 | 3 | ja, jede Folge |
-| 2 | Noas Garten im Herbst, Totale mit Apfelbaum | 2 | 2 | ja, Hintergrund |
-| 3 | Noa springt in den Laubhaufen | 2 | 2 | |
-| 4 | Pino taucht aus dem Laub auf, Stacheln hoch | 2 | 3 | |
-| 5 | Noa hockt sich hin, Pinos Stacheln gehen runter | 2 | 3 | |
-| 6 | Pino schaut zum Apfel hoch | 3 | 3 | |
-| 7 | Pino hüpft auf Zehenspitzen | 3 | 3 | |
-| 8 | Noa streckt den Arm zum untersten Ast | 3 | 3 | |
-| 9 | Zwei gefleckte Beine neben dem Baum | 4 | 3 | |
-| 10 | Lulus Kopf kommt von oben ins Bild | 4 | 4 | ja, Running Gag |
-| 11 | Lulu reicht Pino den Apfel | 4 | 3 | |
-| 12 | Kleine blaue Blume am Zaun | 5 | 4 | |
-| 13 | Lulu beugt sich, wackelt, Schal verheddert | 5 | 6 | |
-| 14 | Noa hält die Blume hoch, Lulu riecht daran | 6 | 4 | |
-| 15 | Alle drei nebeneinander, wippen zum Lied | 6 | 4 | ja, Lied |
-| 16 | Abend unter dem Apfelbaum, Pino gähnt | 7 | 4 | |
-| | **Gesamt** | | **54** | |
+**Schon vorhanden**
-**Rechnung:** 54 Clips × 1,5–2 Versuche × 7–10 Credits = ca. 570–1.080 Credits bei Higgsfield. Dazu kommen die 16 Startbilder mit wenigen Credits. Die Figurenblätter entstehen einmalig vorher.
+| Was | Wo | Szene |
+| --- | --- | --- |
+| Bilderbuch-Intro und -Outro | `baukasten/buch.tsx` | 1, 7 |
+| Gehen (alle drei), Noa hockt, Noa winkt | `*_C1_gehen-schleife`, `noa_C5`/`NoaHocke`, `noa_A_arm-hoch-winken` | 2–6 |
+| Pino als Stachelkugel (Angst), staunend, lachend, schaut hoch, auf Hinterbeinen | `pino_A_kugel`, `pino_A4`, `pino_A3`, `pino_B_blick-nach-oben`, `pino_A_hinterbeine` | 2–4 |
+| Noa erschrocken, staunend, traurig, zeigt, Arme hoch, sitzt | `noa_B2`, `noa_A4`, `noa_B1`, `noa_B_zeigen`, `noa_A_arme-hoch`, `noa_B_sitzt` | 2–7 |
+| Lulu frisst Apfel, Hals runter, traurig, liegt | `lulu_A_apfel`, `lulu_C9_hals-runter`/`lulu_A_hals-unten`, `lulu_B1`, `lulu_B_liegt` | 4–7 |
+| Lulus Kopf kommt von oben | Kamerafahrt wie Folge 2, Szene 3 | 4 |
+| Kichern, Hüpfen, Gähnen, Erschrecken | Bewegungen aus Folge 2 (`helfer.tsx`) | 2–7 |
+| Blätter, Blätterregen, große Rufe | `baukasten/natur.tsx` | 2, 3 |
+| Lied-Refrain mit wippenden Figuren | wie `folge02/lied.tsx`, hier mit Strophe | 6 |
-**Ton:** etwa 3 Minuten Sprechtext, dazu Lied und Pausen.
+**Neu zu bauen (Code, kostet nichts)**
+
+| Was | Szene | Hinweis |
+| --- | --- | --- |
+| Herbstgarten am Morgen: goldenes Licht, Apfelbaum mit buntem Laub, ein roter Apfel ganz oben, Zaun | 2–6 | Variante von `GartenSVG`, ohne Holzstapel (der kommt erst in Folge 2) |
+| Derselbe Garten im Abendlicht | 7 | warmes Orange, längere Schatten |
+| Laubhaufen als eigenes Teil, kann wackeln und aufspritzen | 2 | vor dem Hintergrund, damit Pino darin sitzen kann |
+| Roter Apfel und kleine blaue Blume als Teile | 3–7 | wandern zwischen den Figuren (Lulu → Pino, Pino → Noa) |
+
+**Vereinfacht gegenüber dem Drehbuch**
+
+- Szene 5: Lulus Schal wickelt sich nicht um die Beine. Lulu wackelt beim Herunterbeugen, Pino und Noa kichern wie in Folge 2.
+- Szene 6: Pino „pflückt“ die Blume, indem sie an seiner Pfote erscheint; Noa hält sie mit `noa_A_arme-hoch` hoch.
+
+Keine neuen Posen nötig. Schöner wären später: Pino hält etwas in den Pfoten, Lulu riecht mit geschlossenen Augen.
+
+**Ton:** etwa 3 Minuten Sprechtext, dazu das Lied (Refrain, Strophe, Refrain), über `werkzeuge/stimmen.mts` (ElevenLabs).
diff --git a/remotion/public/orte/garten_herbst.webp b/remotion/public/orte/garten_herbst.webp
new file mode 100644
index 0000000..4931a68
Binary files /dev/null and b/remotion/public/orte/garten_herbst.webp differ
diff --git a/remotion/public/orte/garten_herbst_abend.webp b/remotion/public/orte/garten_herbst_abend.webp
new file mode 100644
index 0000000..2a000f6
Binary files /dev/null and b/remotion/public/orte/garten_herbst_abend.webp differ
diff --git a/remotion/src/Root.tsx b/remotion/src/Root.tsx
index a334bd9..53844e2 100644
--- a/remotion/src/Root.tsx
+++ b/remotion/src/Root.tsx
@@ -6,6 +6,7 @@ import {VerformTest} from './szenen/VerformTest';
import {FolgenKompositionen} from './baukasten/folge';
import {NEST_BILD} from './baukasten/natur';
import {NestStill, ORTE, OrtStill} from './baukasten/orte';
+import {F01} from './folge01/Folge01';
import {F02} from './folge02/Folge02';
import {Banner, BannerRahmen, Profilbild} from './kanal/KanalBilder';
@@ -18,6 +19,7 @@ export const Root: React.FC = () => (
+
@@ -26,7 +28,7 @@ export const Root: React.FC = () => (
))}
{Object.keys(ORTE).map((name) => (
-
+
))}
>
);
diff --git a/remotion/src/baukasten/figur.tsx b/remotion/src/baukasten/figur.tsx
index a5818f8..76f2128 100644
--- a/remotion/src/baukasten/figur.tsx
+++ b/remotion/src/baukasten/figur.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import {Freeze, Img, OffthreadVideo, staticFile, useCurrentFrame, useVideoConfig} from 'remotion';
+import {Freeze, Img, OffthreadVideo, getStaticFiles, staticFile, useCurrentFrame, useVideoConfig} from 'remotion';
import {CLIPS, FIGUREN, POSEN} from './posen';
// Figuren aus der Bibliothek (freigestellte Standbilder und Clips).
@@ -107,13 +107,21 @@ type ClipProps = Omit & {
ersatz?: string; // Standbild, falls der Clip fehlt
};
+// Clips liegen nicht im Git; fehlt die Datei auf diesem Rechner, nimmt die
+// Figur Standbilder (beim Gehen die vier Geh-Bilder im Wechsel).
+const VORHANDEN = new Set(getStaticFiles().map((d) => d.name));
+
export const ClipFigur: React.FC = ({name, start, hoehe, tempo = 1, schleife = false, bis, rueckwaerts = false, ersatz, ...lage}) => {
const frame = useCurrentFrame();
const {fps} = useVideoConfig();
const c = CLIPS[name];
- if (!c) {
+ if (!c || !VORHANDEN.has(c.datei)) {
// Clip noch nicht freigestellt: Standbild der Figur als Ersatz
const figurName = name.split('_')[0] as FigurName;
+ if (name.endsWith('_C1_gehen-schleife')) {
+ const bild = 1 + (Math.floor(((frame - start) * tempo * 6) / fps) % 4);
+ return ;
+ }
return ;
}
const figur = c.figur as FigurName;
diff --git a/remotion/src/baukasten/natur.tsx b/remotion/src/baukasten/natur.tsx
index b52573a..3f83532 100644
--- a/remotion/src/baukasten/natur.tsx
+++ b/remotion/src/baukasten/natur.tsx
@@ -285,3 +285,49 @@ export const Ruf: React.FC<{text: string; x: number; y: number; start: number; d
);
};
+
+// Folge 1: roter Apfel (Mitte bei x, y; ca. 56 px breit bei s = 1)
+export const Apfel: React.FC<{x: number; y: number; s?: number; r?: number}> = ({x, y, s = 1, r = 0}) => (
+
+);
+
+// Folge 1: kleine blaue Blume; (x, y) = Fuß des Stiels
+export const Blume: React.FC<{x: number; y: number; s?: number; r?: number}> = ({x, y, s = 1, r = 0}) => (
+
+);
+
+// Folge 1: Laubhaufen (Fuß bei x, y; ca. 340 × 140 px bei s = 1).
+// `wackeln` 0 … 1 lässt ihn zittern, `flach` 0 … 1 drückt ihn zusammen (Noa springt hinein).
+export const Laubhaufen: React.FC<{x: number; y: number; s?: number; wackeln?: number; flach?: number}> = ({x, y, s = 1, wackeln = 0, flach = 0}) => {
+ const frame = useCurrentFrame();
+ const zitter = wackeln * Math.sin(frame * 1.3) * 3;
+ return (
+
+ );
+};
diff --git a/remotion/src/baukasten/orte.tsx b/remotion/src/baukasten/orte.tsx
index 8b09b61..39a85f1 100644
--- a/remotion/src/baukasten/orte.tsx
+++ b/remotion/src/baukasten/orte.tsx
@@ -83,7 +83,23 @@ const Ast: React.FC<{x: number; y: number; w: number; l: number; d: number; tief
);
};
-const Apfelbaum: React.FC<{x: number; y: number; s?: number; farbe: string; blaetter?: boolean}> = ({x, y, s = 1, farbe, blaetter = true}) => (
+// Volle Herbstkrone aus Farbtupfern (Folge 1); Mitte bei (40, -500) im Baum-Koordinatensystem
+const Krone: React.FC<{abend?: boolean}> = ({abend}) => {
+ const farben = abend ? ['#c9763a', '#d99a45', '#b2552e', '#a8682e', '#8f4a2a', '#8a8a48'] : ['#d98a3a', '#e0b04a', '#c8642c', '#b7792f', '#a8452a', '#9aa04f'];
+ return (
+
+ {new Array(190).fill(0).map((_, i) => {
+ const w = random('kw' + i) * Math.PI * 2;
+ const r = Math.sqrt(random('kr' + i));
+ const cx = 40 + Math.cos(w) * r * 330;
+ const cy = -500 + Math.sin(w) * r * 230;
+ return ;
+ })}
+
+ );
+};
+
+const Apfelbaum: React.FC<{x: number; y: number; s?: number; farbe: string; blaetter?: boolean; krone?: 'morgen' | 'abend'}> = ({x, y, s = 1, farbe, blaetter = true, krone}) => (
@@ -91,7 +107,8 @@ const Apfelbaum: React.FC<{x: number; y: number; s?: number; farbe: string; blae
- {blaetter &&
+ {krone && }
+ {blaetter && !krone &&
new Array(9).fill(0).map((_, i) => {
const bx = -260 + random('bl' + i) * 520;
const by = -560 + random('bly' + i) * 240;
@@ -204,6 +221,61 @@ export const GartenSVG: React.FC<{nacht?: boolean}> = ({nacht = false}) => (
);
+// Folge 1: Noas Garten im goldenen Herbst (Morgen) bzw. im Abendlicht.
+// Ohne Holzstapel (der kommt erst in Folge 2); Apfel, Blume und Laubhaufen sind eigene Teile.
+export const GartenHerbstSVG: React.FC<{abend?: boolean}> = ({abend = false}) => (
+
+);
+
// Blick von oben über den Zaun: kahle Baumkronen, weites Land, grauer Himmel.
export const ObenSVG: React.FC = () => (