From 75b28a9cabe83fc77c674d40d4fe67abb3d98b47 Mon Sep 17 00:00:00 2001
From: Pascal Scholz
Date: Thu, 5 Nov 2026 19:35:15 +0000
Subject: [PATCH] =?UTF-8?q?Folge=202,=20Szene=204=20neu=20nach=20Pascals?=
=?UTF-8?q?=20R=C3=BCckmeldung:=20Noa=20z=C3=A4hlt=20Bl=C3=A4tter=20f?=
=?UTF-8?q?=C3=BCr=20Pinos=20Nest=20(Haufen=20statt=20Reihe),=20zu=20wenig?=
=?UTF-8?q?e,=20Lulu=20hilft,=20Bl=C3=A4tter=20wehen=20zum=20Nest;=20Refra?=
=?UTF-8?q?in=20gesungen=20(Suno=20wie=20Folge=201);=20Nies-Ger=C3=A4usch?=
=?UTF-8?q?=20vorgesehen?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-Authored-By: Claude Opus 5.5
---
drehbuecher/folge02-pino-ist-muede/de.md | 18 +++++-----
drehbuecher/folge02-pino-ist-muede/es.md | 14 ++++----
drehbuecher/folge02-pino-ist-muede/fr.md | 14 ++++----
remotion/src/baukasten/geraeusche.json | 3 +-
remotion/src/baukasten/natur.tsx | 4 +--
remotion/src/folge01/lied.tsx | 4 +--
remotion/src/folge02/Folge02.tsx | 14 ++++++--
remotion/src/folge02/lied.tsx | 42 ++++++++++++++++++------
remotion/src/folge02/stimmen/de.json | 21 +++++++-----
remotion/src/folge02/stimmen/es.json | 21 +++++++-----
remotion/src/folge02/stimmen/fr.json | 21 +++++++-----
remotion/src/folge02/szene4.tsx | 42 +++++++++++++++++-------
remotion/src/folge02/texte/de.json | 9 ++---
remotion/src/folge02/texte/es.json | 9 ++---
remotion/src/folge02/texte/fr.json | 9 ++---
15 files changed, 159 insertions(+), 86 deletions(-)
diff --git a/drehbuecher/folge02-pino-ist-muede/de.md b/drehbuecher/folge02-pino-ist-muede/de.md
index 4579fd9..70e5ab0 100644
--- a/drehbuecher/folge02-pino-ist-muede/de.md
+++ b/drehbuecher/folge02-pino-ist-muede/de.md
@@ -90,31 +90,33 @@ Pino gähnt den ganzen Tag, und Lulu und die Erzählstimme erklären den Winters
**ERZÄHLSTIMME:** Igel bauen sich für den Winter ein Nest. Aus ganz vielen Blättern, unter einer Hecke oder einem Holzstapel. Da ist es trocken und warm.
-**BILD:** Noa sammelt bunte Blätter und legt sie vor dem Holzstapel in eine Reihe. Pino schaut zu.
+**BILD:** Noa hockt sich vor den Holzstapel, dort wo das Nest hin soll. Sie schaut in die Kamera.
-**NOA:** Zählst du mit? Eins … zwei … drei … vier … fünf!
+**NOA:** Pino braucht ein Nest aus ganz vielen Blättern. Hilfst du mir beim Zählen? Eins … zwei … drei … vier … fünf!
-*Nach jeder Zahl eine kurze Pause zum Mitzählen.*
+*Nach jeder Zahl eine kurze Pause zum Mitzählen. Bei jeder Zahl wirft Noa ein Blatt auf den Nest-Haufen.*
+
+**NOA:** Hm. Das sind noch zu wenige.
**BILD:** Lulu streckt den Hals ganz hoch in den Apfelbaum und zupft mit dem Maul die letzten Blätter ab.
-**LULU:** Hier oben hängen noch welche! Die erreicht sonst keiner.
+**LULU:** Ich helfe euch! Hier oben hängen noch welche.
-**BILD:** Lulu kommt mit einem dicken Bündel Blätter herunter. Ihre Nase kitzelt, sie kneift die Augen zu … und niest. Die Blätter fliegen in alle Richtungen und regnen auf Noa und Pino herab.
+**BILD:** Lulu kommt mit einem dicken Bündel Blätter herunter. Ihre Nase kitzelt, sie kneift die Augen zu … und niest. Die Blätter fliegen in alle Richtungen, der Wind trägt sie bis zum Nest.
*Hatschi! Rascheln, alle lachen.*
**LULU:** Oh! Entschuldigung!
-**NOA** *(lacht)***:** Macht nichts. Jetzt haben wir noch mehr Blätter.
+**NOA** *(lacht)***:** Macht nichts! Jetzt haben wir ganz viele Blätter.
**BILD:** Zu dritt schieben sie die Blätter unter den Holzstapel. Pino rollt sie mit der Nase zurecht. Ein rundes, kuscheliges Nest entsteht. Pino schaut heraus, nur Nase und Augen.
-**ERZÄHLSTIMME:** Ein Igelnest braucht ganz viele Blätter. Wenn ihr im Garten einen Laubhaufen liegen lasst, schenkt ihr einem Igel vielleicht ein Winterbettchen.
+**ERZÄHLSTIMME:** Jetzt ist das Nest schön weich und warm. Wenn ihr im Garten einen Laubhaufen liegen lasst, schenkt ihr einem Igel vielleicht ein Winterbettchen.
**BILD:** Die drei nebeneinander, die Figuren wippen im Takt. Clips 47–50 aus Folge 1.
-*Refrain „Einer klein und einer groß“, einmal.*
+*Refrain „Einer klein und einer groß“, einmal, gesungen (Suno-Lied aus Folge 1).*
## Szene 5: Pino will nicht schlafen (3:10–3:45)
diff --git a/drehbuecher/folge02-pino-ist-muede/es.md b/drehbuecher/folge02-pino-ist-muede/es.md
index db3867f..5f04f19 100644
--- a/drehbuecher/folge02-pino-ist-muede/es.md
+++ b/drehbuecher/folge02-pino-ist-muede/es.md
@@ -54,21 +54,23 @@ Spanische Sprechfassung für ElevenLabs, Entwurf vom 26.10.2026. Neutrales Spani
**NARRACIÓN:** Para el invierno, los erizos se hacen un nido. Con muchísimas hojas, debajo de un seto o de un montón de leña. Allí está seco y calentito.
-**NOA:** ¿Cuentas conmigo? Uno… dos… tres… cuatro… ¡cinco!
+**NOA:** Pino necesita un nido con muchísimas hojas. ¿Me ayudas a contar? Uno… dos… tres… cuatro… ¡cinco!
-*Después de cada número, una pausa corta para contar.*
+*Después de cada número, una pausa corta para contar. Con cada número, Noa echa una hoja al montón del nido.*
-**LULU:** ¡Aquí arriba quedan algunas! Nadie más llega hasta aquí.
+**NOA:** Mmm. Todavía son muy pocas.
+
+**LULU:** ¡Yo los ayudo! Aquí arriba quedan algunas.
*¡Achís! Crujido de hojas, todos se ríen.*
**LULU:** ¡Uy! ¡Perdón!
-**NOA** *(se ríe)*: No pasa nada. Así tenemos todavía más hojas.
+**NOA** *(se ríe)*: ¡No pasa nada! Ahora tenemos muchísimas hojas.
-**NARRACIÓN:** Un nido de erizo necesita muchas hojas. Mamás y papás: si dejan un montón de hojas en el jardín, a lo mejor un erizo encuentra allí su camita para el invierno.
+**NARRACIÓN:** Ahora el nido está blandito y calentito. Mamás y papás: si dejan un montón de hojas en el jardín, a lo mejor un erizo encuentra allí su camita para el invierno.
-*Estribillo „Uno pequeño y otra alta“, una vez (ver Episodio 1).*
+*Estribillo „Uno pequeño y otra alta“, una vez, cantado (canción de Suno del Episodio 1).*
## Escena 5: Pino no quiere dormir (3:10–3:45)
diff --git a/drehbuecher/folge02-pino-ist-muede/fr.md b/drehbuecher/folge02-pino-ist-muede/fr.md
index f79dae2..45f3b23 100644
--- a/drehbuecher/folge02-pino-ist-muede/fr.md
+++ b/drehbuecher/folge02-pino-ist-muede/fr.md
@@ -54,21 +54,23 @@ Französische Sprechfassung für ElevenLabs, Entwurf vom 26.10.2026. Die Figuren
**NARRATION :** Pour l'hiver, les hérissons se construisent un nid. Avec plein de feuilles, sous une haie ou sous un tas de bois. Là, c'est sec et bien chaud.
-**NOA :** Tu comptes avec moi ? Un… deux… trois… quatre… cinq !
+**NOA :** Pino a besoin d'un nid avec plein de feuilles. Tu m'aides à compter ? Un… deux… trois… quatre… cinq !
-*Après chaque chiffre, une petite pause pour compter.*
+*Après chaque chiffre, une petite pause pour compter. À chaque chiffre, Noa lance une feuille sur le tas du nid.*
-**LULU :** Il en reste là-haut ! Personne d'autre ne peut les attraper.
+**NOA :** Hum. Il n'y en a pas encore assez.
+
+**LULU :** Je vous aide ! Il en reste là-haut.
*Atchoum ! Bruissement de feuilles, tout le monde rit.*
**LULU :** Oh ! Pardon !
-**NOA** *(rit)* **:** Ce n'est pas grave. Comme ça, on a encore plus de feuilles.
+**NOA** *(rit)* **:** Ce n'est pas grave ! Maintenant, on a plein de feuilles.
-**NARRATION :** Un nid de hérisson a besoin de beaucoup de feuilles. Chers parents : si vous laissez un tas de feuilles dans votre jardin, vous offrez peut-être un petit lit d'hiver à un hérisson.
+**NARRATION :** Maintenant, le nid est tout doux et bien chaud. Chers parents : si vous laissez un tas de feuilles dans votre jardin, vous offrez peut-être un petit lit d'hiver à un hérisson.
-*Refrain « Un tout petit, une très grande », une fois (voir Épisode 1).*
+*Refrain « Un tout petit, une très grande », une fois, chanté (chanson Suno de l'Épisode 1).*
## Scène 5 : Pino ne veut pas dormir (3:10–3:45)
diff --git a/remotion/src/baukasten/geraeusche.json b/remotion/src/baukasten/geraeusche.json
index d35a4db..00de422 100644
--- a/remotion/src/baukasten/geraeusche.json
+++ b/remotion/src/baukasten/geraeusche.json
@@ -19,5 +19,6 @@
"zugvoegel": {"sekunden": 5, "beschreibung": "A flock of wild geese honking high in the sky, flying away into the distance, gentle and far."},
"malen": {"sekunden": 4, "beschreibung": "Crayon scribbling and drawing on paper on a wooden table, close and soft."},
"kribbeln": {"sekunden": 2, "beschreibung": "Cute magical sparkle twinkle, soft glockenspiel shimmer, cartoon, happy."},
- "schlaff": {"sekunden": 2, "beschreibung": "Soft short descending cartoon slide whistle, a little sad but cute and gentle."}
+ "schlaff": {"sekunden": 2, "beschreibung": "Soft short descending cartoon slide whistle, a little sad but cute and gentle."},
+ "niesen": {"sekunden": 1.5, "beschreibung": "A single cute, funny cartoon sneeze 'ha-tschi!' from a friendly young animal character, light and playful, like in a preschool cartoon. No speech, no music."}
}
diff --git a/remotion/src/baukasten/natur.tsx b/remotion/src/baukasten/natur.tsx
index 4ff9591..9fdc08c 100644
--- a/remotion/src/baukasten/natur.tsx
+++ b/remotion/src/baukasten/natur.tsx
@@ -43,7 +43,7 @@ export const Blaetterwind: React.FC<{anzahl?: number; seed?: string; tempo?: num
};
// Blätterregen nach dem Niesen: Blätter fliegen ab `start` aus (x0, y0) und landen auf `boden`.
-export const Blaetterregen: React.FC<{start: number; x0: number; y0: number; boden: number; anzahl?: number; aus?: number}> = ({start, x0, y0, boden, anzahl = 34, aus = 1e9}) => {
+export const Blaetterregen: React.FC<{start: number; x0: number; y0: number; boden: number; anzahl?: number; aus?: number; seed?: string}> = ({start, x0, y0, boden, anzahl = 34, aus = 1e9, seed = 'regen'}) => {
const frame = useCurrentFrame();
const t = frame - start;
const deck = Math.max(0, 1 - (frame - aus) / 60);
@@ -51,7 +51,7 @@ export const Blaetterregen: React.FC<{start: number; x0: number; y0: number; bod
return (
<>
{new Array(anzahl).fill(0).map((_, i) => {
- const r = (k: string) => random(`regen${k}${i}`);
+ const r = (k: string) => random(`${seed}${k}${i}`);
const winkel = -Math.PI * (0.05 + 0.9 * r('w'));
const v = 14 + r('v') * 22;
// erst schneller Ausstoß (abgebremst), dann langsames Herabschaukeln
diff --git a/remotion/src/folge01/lied.tsx b/remotion/src/folge01/lied.tsx
index f53f569..b681cae 100644
--- a/remotion/src/folge01/lied.tsx
+++ b/remotion/src/folge01/lied.tsx
@@ -16,14 +16,14 @@ import {HAUFEN_X} from './szene2';
// Gesungen von Suno, gekürzt auf Refrain – Strophe 1 – Refrain (die ersten 12 Liedzeilen).
// Die Zeilen liegen genau auf den gemessenen Suno-Zeiten, ohne Sprachaufnahmen.
// Fehlt für eine Sprache der Eintrag, wird sie gesprochen über das Instrumental (95 BPM).
-type SunoLied = {
+export type SunoLied = {
datei: string; // in public/, auf −14 LUFS
bpm: number;
zeiten: number[]; // Beginn der Zeilen r1–r4, s1–s4, w1–w4 in Sekunden
ende: number; // letzte Zeile ausgesungen
vor: number; // Sekunden Vorspiel vor der ersten Zeile
};
-const SUNO_LIEDER: Partial> = {
+export const SUNO_LIEDER: Partial> = {
// „Noa in der Mitte“ 25385c27, Zeiten aus aligned_lyrics (src/lieder/lied03/zeiten.ts)
de: {
datei: 'musik/lieder/lied03-de.mp3',
diff --git a/remotion/src/folge02/Folge02.tsx b/remotion/src/folge02/Folge02.tsx
index 028838a..4b394a6 100644
--- a/remotion/src/folge02/Folge02.tsx
+++ b/remotion/src/folge02/Folge02.tsx
@@ -2,7 +2,7 @@ import React from 'react';
import {INTRO_OPTIONEN, Intro, OUTRO, Outro, introZeilen} from '../baukasten/buch';
import {baueFolge, type SzenenEintrag} from '../baukasten/folge';
import {mitKlang} from '../baukasten/geraeusche';
-import {LIED, Lied} from './lied';
+import {GESUNGEN, LIED, LIED_AB, LIED_DATEI, Lied} from './lied';
import {TITEL, plane} from './plan';
import {S2, Szene2} from './szene2';
import {S3, Szene3} from './szene3';
@@ -51,9 +51,17 @@ export const SZENEN: SzenenEintrag[] = [
name: 'Ein Bett aus Blättern',
datei: 'szene4.tsx',
plan: S4,
- K: mitKlang(Szene4, S4, {atmo: 'garten_tag', toene: [...sammeln, {name: 'blaetter_regen', bei: 'l2', versatz: -1.2, lautstaerke: 0.5}]}),
+ K: mitKlang(Szene4, S4, {atmo: 'garten_tag', toene: [...sammeln, {name: 'niesen', bei: 'bild3', versatz: -0.05, lautstaerke: 0.7}, {name: 'blaetter_regen', bei: 'l2', versatz: -1.2, lautstaerke: 0.5}]}),
+ },
+ {
+ name: 'Lied',
+ datei: 'lied.tsx',
+ plan: LIED,
+ K: Lied,
+ musik: GESUNGEN
+ ? {datei: LIED_DATEI, ab: LIED_AB, lautstaerke: 0.9, rein: 0.2, raus: 0.8}
+ : {datei: 'musik/folge01/lied.mp3', lautstaerke: 0.4, ducken: 0.75, rein: 0.3, raus: 1.2},
},
- {name: 'Lied', datei: 'lied.tsx', plan: LIED, K: Lied, musik: {datei: 'musik/folge01/lied.mp3', lautstaerke: 0.4, ducken: 0.75, rein: 0.3, raus: 1.2}},
{name: 'Pino will nicht schlafen', datei: 'szene5.tsx', plan: S5, K: mitKlang(Szene5, S5, {atmo: 'garten_tag'})},
{
name: 'Noas Idee',
diff --git a/remotion/src/folge02/lied.tsx b/remotion/src/folge02/lied.tsx
index 3cbd215..39945bf 100644
--- a/remotion/src/folge02/lied.tsx
+++ b/remotion/src/folge02/lied.tsx
@@ -4,21 +4,43 @@ import {Figur, Kamera} from '../baukasten/figur';
import {Blende, Vignette, klatschFolge} from '../baukasten/helfer';
import {BODEN, Ort} from '../baukasten/orte';
import {SCHRIFT, Untertitel} from '../baukasten/untertitel';
+import {SPRACHE} from '../baukasten/sprache';
+import {plane as planeOhneStimme} from '../baukasten/zeit';
+import {SUNO_LIEDER} from '../folge01/lied';
import {TEXTE, plane} from './plan';
// Refrain „Einer klein und einer groß“ (aus Folge 1), einmal. Die drei wippen im Takt.
+// Gesungen: der Refrain aus dem Suno-Lied von Folge 1 (erste vier Zeilen), ausgeblendet,
+// bevor die Strophe beginnt. Ohne Suno-Fassung für die Sprache: gesprochen über das Instrumental.
-const TAKT = 19; // Frames pro Schlag (ca. 95 bpm)
+const SUNO = SUNO_LIEDER[SPRACHE];
+export const GESUNGEN = !!SUNO;
+const TAKT = SUNO ? (30 * 60) / SUNO.bpm : 19; // Frames pro Schlag
+const IDS = ['r1', 'r2', 'r3', 'r4'];
+export const LIED_DATEI = SUNO?.datei ?? '';
+export const LIED_AB = SUNO ? SUNO.zeiten[0] - SUNO.vor : 0; // ab hier läuft die Suno-Datei
-export const LIED = plane('lied',
- [
- {id: 'r1', wer: 'ALLE', dauer: 3.2},
- {id: 'r2', wer: 'ALLE', dauer: 3.2},
- {id: 'r3', wer: 'ALLE', dauer: 3.2},
- {id: 'r4', wer: 'ALLE', dauer: 3.6},
- ],
- {vorlauf: 1.0, nachlauf: 1.0},
-);
+export const LIED = SUNO
+ ? planeOhneStimme(
+ IDS.map((id, i) => ({
+ id,
+ wer: 'ALLE' as const,
+ text: TEXTE.zeilen[`lied/${id}`],
+ // Lücke von 0,35 s zwischen den Zeilen fügt der Planer ein; r4 endet, wo die Strophe beginnt
+ dauer: SUNO.zeiten[i + 1] - SUNO.zeiten[i] - 0.35,
+ })),
+ {vorlauf: SUNO.vor, nachlauf: 0.2},
+ )
+ : plane(
+ 'lied',
+ [
+ {id: 'r1', wer: 'ALLE', dauer: 3.2},
+ {id: 'r2', wer: 'ALLE', dauer: 3.2},
+ {id: 'r3', wer: 'ALLE', dauer: 3.2},
+ {id: 'r4', wer: 'ALLE', dauer: 3.6},
+ ],
+ {vorlauf: 1.0, nachlauf: 1.0},
+ );
const Note: React.FC<{x: number; y: number; s: number; farbe: string}> = ({x, y, s, farbe}) => (