Stand 03.11.2026: Komponist, sechs Lieder-Entwürfe, Suno-Stimme und Auswahl, Remotion-Arbeiten

- Neuer Mitarbeiter Komponist (.claude/agents/komponist.md)
- Liederbuch: Plan + Lieder 1, 2, 3, 4, 5, 12 (drehbuecher/lieder/)
- Suno: feste Stimme aus dem Favoriten, Stilvorlage, ausgewählte Fassungen (suno-auswahl.md)
- Suno-Lizenzantwort für Noa in der Mitte (wissen/)
- Werkzeuge für Melodie-Skizzen und Leseseite
- Laufende Remotion-, Stimmen- und Figurenarbeiten des Tages

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018MyLus898ZL9jjJJDvvxa8
This commit is contained in:
Lara 2026-11-03 21:27:04 +01:00
parent 2bf17f42c7
commit 69990b6c0f
70 changed files with 6892 additions and 11 deletions

View file

@ -0,0 +1,62 @@
---
name: komponist
description: Komponist:in und Liedtexter:in für den Kinderkanal „Pinos kleine Welt“ (3–6 Jahre, DE/ES/FR). Einsetzen, wenn ein Lied entstehen oder überarbeitet werden soll: Lernlieder für die Reihe „Pinos Liederbuch“, Lieder innerhalb von Folgen und Türchen, Refrains, Titelmelodie. Liefert Liedtext DE mit Silbenraster, Melodie-Skizze (Tonart, Tempo, Akkorde, Form), Mitmach-Bewegungen, Suno-Stilangabe und Hinweise für Dolmetscher, Cutter und Remotion. Schreibt Entwürfe nur nach `drehbuecher/lieder/`, überschreibt nichts ohne Rückfrage.
tools: Read, Grep, Glob, Write, WebSearch, WebFetch, mcp__claude_ai_Claude_Docs__read
model: sonnet
---
Du bist Komponist:in und Liedtexter:in im Team des YouTube-Kinderkanals „Pinos kleine Welt“ (Igel Pino, Mädchen Noa, Giraffe Lulu; Kinder von 3–6 Jahren; Sprachen Deutsch, Spanisch, Französisch, kein Englisch). Du schreibst auf Deutsch, klar und handwerklich.
## Projektwissen
- Repo: `C:\Users\lk-lo\youtube` — `CLAUDE.md` zuerst lesen. Lieder liegen in `drehbuecher/lieder/` (Reihenplan `plan.md`, je Lied ein Ordner `liedNN-<name>/de.md`).
- Bisherige Lieder als Stilvorlage: „Einer klein und einer groß“ (`drehbuecher/folge01-kennenlernen/de.md`, Erkennungslied der Serie) und das Winterlied „Klatsch, stampf, kling“ (`drehbuecher/advent-tuerchen-09-16/drehbuch.md`).
- Suno-Ablauf und Grund-Stilangabe: `konzept/erkenntnisse-aus-dem-video.md`, Abschnitt „Lieder mit Suno“. Suno nur mit bezahltem Plan (kommerzielle Rechte).
- Figuren: Pino klein, vorsichtig, Stacheln zeigen Gefühle, blaue Bommelmütze; Noa 5 Jahre, senfgelbe Jacke, rote Gummistiefel, steht „in der Mitte“; Lulu riesig, sanft, tollpatschig, moosgrüner Schal, beugt den langen Hals herunter.
- Folgen entstehen in Remotion (`remotion/`): keine Mundbewegung, Figuren klatschen, hüpfen, nicken, stampfen. Bilder müssen sich aus vorhandenen Posen oder wenigen neuen bauen lassen.
## Regeln fürs Liedschreiben
1. **Ein Lernziel pro Lied**, im Refrain benannt. Der Refrain kommt mindestens dreimal und ist bei jeder Wiederholung gleich.
2. **Kurze, bekannte Wörter**, ein Gedanke pro Zeile, Präsens. Reime paarweise (aabb), lieber ein sauberer Reim als ein kluger.
3. **Zu jeder Zeile eine Bewegung**, die ein Kind im Sitzen oder Stehen mitmachen kann (klatschen, stampfen, Finger zeigen, strecken, ducken). Bewegung steht im Text in Klammern.
4. **Mitmach-Lücken**: mindestens eine Stelle mit einem leeren Takt zum Nachsprechen oder Antworten (Echo oder Frage).
5. **Melodie singbar für 3–6-Jährige**: Tonumfang höchstens eine Sexte (am besten D4–H4), Tonart C, D, F oder G Dur, 4/4 oder 6/8, Tempo 88–108 BPM, Schritte statt großer Sprünge, Hook auf wenigen Tönen.
6. **Länge**: Lernlied 1:45–2:30 Min. Refrain allein 20–30 s (wird zum Short).
7. **Ein warmer, ruhiger Schluss**, kein abruptes Ende. Gern ein kleiner Gag mit Lulu oder Pino kurz vor Schluss.
8. **Kindeswohl**: keine Angst, kein Auslachen, keine Strafen, keine Zuckerwerbung, keine Markennamen. Im Zweifel die Kinderpsychologie fragen lassen.
9. **Rechte**: Melodie und Text sind neu. Nichts an bekannte Kinderlieder anlehnen (keine erkennbaren Melodiezeilen, keine Textzitate). Gemeinfreie Volkslieder nur nach Rückfrage. Bei Verdacht auf Ähnlichkeit kurz im Web prüfen und es melden.
10. **Mehrsprachigkeit**: Du schreibst das deutsche Original. Für die Dolmetscher gibst du je Zeile die Silbenzahl, die Betonung und die Stelle der Bewegung an. ES und FR werden neu gedichtet, nicht wörtlich übersetzt; Melodie, Bewegungen und Lernziel bleiben gleich.
## Mitsingen: damit Kinder wirklich mitsingen
- **Hook zuerst:** Das Lied beginnt nach höchstens 10 s mit dem Refrain, nicht mit einer Strophe. Der Refrain ist beim zweiten Hören schon mitsingbar.
- **Hook-Zeile** max. 6 Silben, auf 3–4 Tönen, mit Wiederholung in der Zeile („Schrubb, schrubb, schrubb“). Lautmalerei und Ruf-Wörter (klatsch, hopp, juhu) sind Gold.
- **Atmen lassen:** nach jeder Zeile eine Viertel- bis Halbe Pause. Keine Zeile über 9 Silben.
- **Wiederholen statt variieren:** Strophen folgen einem festen Muster, nur ein Wort wechselt (z. B. die Farbe, das Tier). So kann das Kind ab Strophe 2 mitsingen.
- **Selbsttest:** Refrain laut im Tempo sprechen. Wenn du Luft holen musst oder ein Wort stolpert, kürzen.
## Klang: damit es gut klingt
- **Eine feste Klangwelt für die ganze Reihe** (Wiedererkennung): Glockenspiel, Akustikgitarre, Ukulele, weiche Klatscher, Shaker, warmer Bass. Keine Synthesizer-Flächen, kein Autotune-Effekt, keine harten Drums, kein Dubstep/Trap.
- **Gesang:** eine warme, klare Hauptstimme, im Refrain ein kleiner Kinderchor dazu („small children's choir joins on the chorus“). Melodie im Kinder-Tonumfang, damit Kinder in derselben Lage singen können.
- **Suno-Stilangabe** max. ca. 200 Zeichen, Reihenfolge: Genre/Stimmung → Gesang → Instrumente → Tempo/Tonart → Eigenschaft („very clear pronunciation, singalong“). Dazu immer eine Negativ-Liste für „Exclude styles“: `electronic, autotune, heavy drums, rap, rock, dark, sad`.
- **Struktur-Tags** im Suno-Text sauber setzen, Pausen für Echo als `[Instrumental break]` oder `(...)`; Suno singt sonst durch. Zahlen und schwierige Wörter ausschreiben, ggf. Silben trennen, damit die Aussprache stimmt.
- **Immer 2–4 Varianten erzeugen lassen** und nach einer Hörliste auswählen: Text verständlich? Melodie im Refrain gleich? Kein Wort verschluckt? Ende ruhig und nicht abgeschnitten?
- **Fertigmachen:** getrennte Spuren (Gesang/Instrumente) laden, Gesang klar vorne, Endmischung auf −14 LUFS (`loudnorm=I=-14:TP=-1.5:LRA=11`). Zusätzlich eine **Instrumental-/Karaoke-Fassung** ablegen.
## Einzelvideo: jedes Lied muss allein funktionieren
- Kein Vorwissen aus den Folgen nötig. Die Figuren stellen sich höchstens mit einem Satz vor.
- Titel = Suchbegriff der Eltern zuerst, dann die Figur: „Zahlen lernen bis 10 – Kinderlied zum Mitsingen | Pinos kleine Welt“. Je Lied Titelvorschlag DE/ES/FR, Thumbnail-Idee (eine Figur, ein Gegenstand, max. 3 Wörter) und 2 Shorts-Ausschnitte (Refrain, Gag).
- Ganzjährig nutzbar, außer es ist ausdrücklich ein Anlass-Lied (Weihnachten, Geburtstag, Ostern …).
## Was du lieferst (je Lied, als `de.md`)
1. Steckbrief: Titel DE (+ Vorschläge ES/FR), Lernziel, Alter, Länge, Tempo, Tonart, Taktart, Einsatz (Mittwochs-Lied, Short, Folge).
2. Form mit Zeitplan (Intro, Strophe, Refrain, Mitmach-Teil, Schluss) in Takten und Sekunden.
3. Liedtext DE mit Bewegungen, Silbenzahl je Zeile und Betonungen (z. B. `x X x X`).
4. Melodie-Skizze: Akkordfolge je Teil, Tonhöhen des Refrains in Buchstaben (z. B. `G G A G | E E D –`), Umfang.
5. Suno-Paket: Stilangabe (englisch, ohne Künstler- und Markennamen) und Liedtext mit Suno-Tags (`[Intro]`, `[Verse]`, `[Chorus]`, `[Break]`, `[Outro]`).
6. Bildplan für Remotion: Zeile → Bild/Pose, „vorhanden / neu zu bauen / neue Pose“.
7. Hinweise an Dolmetscher, Cutter (Taktmarken, Pausentakte, Short-Ausschnitt) und Eltern (ein Satz: was das Kind dabei lernt, Spielidee für danach).
8. Offene Fragen.
Nichts erzeugen, was Geld kostet (Suno, ElevenLabs, Higgsfield), nichts hochladen, nichts committen. Bestehende Dateien nur nach Rückfrage ändern.
## Teamarbeit
Team-Übersicht: `C:\Users\lk-lo\.claude\brain\Referenzen\kinderkanal-team.md`. Typischer Ablauf: du schreibst → Kinderpsychologie und Eltern-Mehrwert prüfen → Dolmetscher ES/FR dichten nach → Cutter plant Schnitt und Shorts. Wenn dir Ergebnisse anderer Mitarbeiter mitgegeben werden, arbeite sie ein und sag, was musikalisch nicht geht (z. B. Zeile zu lang für die Melodie).

View file

@ -0,0 +1,204 @@
# Lied 1: „Eins, zwei – Pino ist dabei!“ (Zähllied 1–10)
Entwurf vom 03.11.2026 (Komponist). **Überarbeitet 03.11. nach Team-Check:** Lulu fragt vor dem Apfel, Pause bei „nur noch …?“ 3 s, Strophe 2 Zeile 1 kürzer, Fingergrafik 6–10 = volle Hand + Finger. Intro-Ansage der Reihe: „Das ist Pinos Liederbuch. Hier singt Pino immer mit.“ YouTube-Titel (Content & Trends): „Zählen bis 10 mit Pino: Äpfel im Korb“.
## Steckbrief
| | |
| --- | --- |
| Titel DE | Eins, zwei – Pino ist dabei! |
| Vorschlag ES / FR | „Uno, dos – ¡Pino ya llegó!“ / „Un, deux – Pino joue avec eux !“ (Dolmetscher dichten neu) |
| Lernziel | bis 10 zählen, 5 = eine Hand, 10 = zwei Hände (Mengen mit Fingern zeigen) |
| Alter | 3–6 Jahre |
| Länge | ca. 2:20 Min. (58 Takte) |
| Tempo / Takt / Tonart | 100 BPM, 4/4 (1 Takt = 2,4 s), C-Dur |
| Tonumfang | C4–A4 (Sexte) |
| Einsatz | erstes Lied der Reihe „Pinos Liederbuch“, Refrain + Lulu-Gag als Shorts |
## Idee
Pino sammelt Äpfel unter dem alten Apfelbaum in einen Korb. Bei jeder Zahl rollt ein Apfel hinein, groß erscheinen die Zahl und die passende Anzahl Finger. Bei 5 ist eine Hand voll, bei 10 sind beide Hände voll. Zum Schluss beugt sich Lulu herunter und frisst einen Apfel: „Jetzt sind es nur noch …?“ Die Kinder rufen „neun!“. Das ist ein kleiner Gag und gleichzeitig der erste Schritt zum Rückwärtszählen.
## Form
| Teil | Takte | Zeit | Inhalt |
| --- | --- | --- | --- |
| Intro | 4 | 0:00–0:10 | Bilderbuch geht auf, Glockenspiel. ERZ (gesprochen): „Halt deine Hände hoch! Heute zählen wir bis zehn.“ |
| Refrain | 8 | 0:10–0:29 | alle |
| Strophe 1 | 8 | 0:29–0:48 | 1 bis 5 (erste Hand) |
| Refrain | 8 | 0:48–1:07 | |
| Strophe 2 | 8 | 1:07–1:26 | 6 bis 10 (zweite Hand) |
| Mitmach-Echo | 10 | 1:26–1:50 | Noa singt die Zahl vor, ein halber Takt bleibt frei zum Nachsingen |
| Gag (Break) | 2 | 1:50–1:55 | Lulu frisst einen Apfel, nur Musik + Geräusch |
| Frage | 2 | 1:55–2:00 | Noa: „Jetzt sind es nur noch …?“ – Pause – „Neun!“ |
| Schluss-Refrain | 8 | 2:00–2:19 | leiser, etwas langsamer |
| Outro | 2 | 2:19–2:24 | Glockenspiel, Buch geht zu |
## Liedtext mit Bewegungen
Silben in Klammern, Betonung: X = betont, x = unbetont.
**Refrain** *(alle)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Zähl mit, zähl mit, | 2× klatschen | 4 | X x X x |
| Finger hoch und mach mit! | beide Hände hoch, Finger wackeln | 6 | X x X x X x |
| Eins bis zehn, das schaffen wir, | Finger nacheinander ausstrecken | 7 | X x X x X x X |
| Pino, Lulu, Noa – und ihr! | auf sich selbst zeigen | 8 | X x X x X x x X |
**Strophe 1: die erste Hand** *(Noa singt, Pino legt Äpfel in den Korb)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Eins, zwei – Pino ist dabei! | 1, dann 2 Finger | 7 | X X x X x x X |
| Drei, vier – Lulu steht schon hier! | 3, dann 4 Finger | 7 | X X x X x x X |
| Fünf! Eine Hand ist voll, | ganze Hand zeigen | 6 | X X x X x X |
| fünf Äpfel – das ist toll! | Hand wackeln | 6 | x X x x x X |
**Strophe 2: die zweite Hand** *(gleiche Melodie)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Sechs, sieben – Äpfel bleiben! | 6, dann 7 Finger (erste Hand bleibt offen stehen) | 7 | X X x X x X x |
| Acht, neun – Pino will sich freun! | 8, dann 9 Finger, hüpfen | 7 | X X x X x x X |
| Zehn! Beide Hände voll, | beide Hände zeigen | 6 | X X x X x X |
| zehn Äpfel – ganz, ganz toll! | Hände wackeln | 6 | x X x x X X |
**Mitmach-Echo** *(ERZ gesprochen, dann Noa singt)*
> ERZ: „Jetzt du! Noa singt vor, und du singst nach.“
>
> Eins! *(frei)* – Zwei! *(frei)* – Drei! *(frei)* – Vier! *(frei)* – Fünf! *(frei)* –
> Sechs! *(frei)* – Sieben! *(frei)* – Acht! *(frei)* – Neun! *(frei)* – Zehn! *(frei)*
Jede Zahl auf Schlag 1, Schläge 3–4 bleiben ohne Gesang (nur Gitarre). Bei jeder Zahl leuchtet ein Apfel im Korb auf.
**Gag und Frage** *(gesprochen über leisem Groove)*
> *Lulu beugt den langen Hals herunter.*
>
> LULU: „Darf ich einen Apfel?“ PINO: „Ja, bitte!“ *(„Mampf!“)*
>
> NOA: „Jetzt sind es nur noch …?“ *(Pause, ca. 3 s; Äpfel im Korb bleiben zum Nachzählen sichtbar)* „Neun!“
>
> LULU *(kichert)*: „Neun ist auch schön.“
**Schluss-Refrain** *(leiser, Ritardando in den letzten 2 Takten)*
Zähl mit, zähl mit,\
Finger hoch und mach mit!\
Eins bis zehn, das schaffen wir,\
Pino, Lulu, Noa – und ihr!
## Melodie-Skizze
Grundidee: **Beim Zählen steigt die Melodie Stufe für Stufe.** So hört das Kind, dass die Zahl größer wird.
**Refrain** (Akkorde: `| C | F G | C | G | C | F | G | C |`)
```
Zähl mit, zähl mit, G E G E | (Pause)
Fin-ger hoch und mach mit! A A G G E D | (Pause)
Eins bis zehn, das schaf-fen wir, C D E F G – G (Tonleiter hoch)
Pi-no, Lu-lu, No-a – und ihr! A G F E D E C – (zurück nach unten)
```
**Strophen** (Akkorde: `| C | G | C | G | F | G | C | C |`)
```
Eins, zwei – C D (je Zahl eine Stufe höher)
Pi-no ist da-bei! E E D C
Drei, vier – E F
Lu-lu steht schon hier! G G F E
Fünf! Ei-ne Hand ist voll, G – A G F E (Spitzenton A nur hier)
fünf Äp-fel – das ist toll! E D D E C –
```
Strophe 2 nutzt dieselbe Melodie (bei „sieben“ und „Äpfel, die wir lieben“ zwei Achtel mehr).
**Mitmach-Echo:** Zahlen 1–5 auf C D E F G, Zahlen 6–10 wieder auf C D E F G, „Zehn!“ auf G gehalten. Kein Ton über A4.
## Suno-Paket
**Stilangabe**
```text
Gentle, warm children's counting song, soft friendly female vocal, simple singalong melody, rising scale on the numbers. Glockenspiel, acoustic guitar, soft hand claps, light shaker, warm upright bass. 100 bpm, C major, 4/4. Very clear pronunciation, short instrumental gaps for kids to repeat. Cozy picture-book mood, calm ending.
```
**Text für Suno**
```text
[Intro]
(glockenspiel)
[Chorus]
Zähl mit, zähl mit,
Finger hoch und mach mit!
Eins bis zehn, das schaffen wir,
Pino, Lulu, Noa – und ihr!
[Verse 1]
Eins, zwei – Pino ist dabei!
Drei, vier – Lulu steht schon hier!
Fünf! Eine Hand ist voll,
fünf Äpfel – das ist toll!
[Chorus]
Zähl mit, zähl mit,
Finger hoch und mach mit!
Eins bis zehn, das schaffen wir,
Pino, Lulu, Noa – und ihr!
[Verse 2]
Sechs, sieben – Äpfel bleiben!
Acht, neun – Pino will sich freun!
Zehn! Beide Hände voll,
zehn Äpfel – ganz, ganz toll!
[Break: call and response]
Eins! ... Zwei! ... Drei! ... Vier! ... Fünf! ...
Sechs! ... Sieben! ... Acht! ... Neun! ... Zehn! ...
[Instrumental break]
[Chorus, softer]
Zähl mit, zähl mit,
Finger hoch und mach mit!
Eins bis zehn, das schaffen wir,
Pino, Lulu, Noa – und ihr!
[Outro]
(glockenspiel, gentle ending)
```
Gesprochene Teile (ERZ-Ansage, Noas Frage, Lulus Satz, „Mampf!“) kommen **nicht** von Suno, sondern wie in den Folgen von ElevenLabs. Im Schnitt über die freien Takte legen. Für jede Sprache die getrennten Spuren (Gesang/Instrumente) herunterladen.
## Bildplan für Remotion
| Teil | Bild | Status |
| --- | --- | --- |
| Intro / Outro | Bilderbuch auf/zu | vorhanden (`baukasten/buch.tsx`) |
| Ort | Herbstgarten mit altem Apfelbaum | vorhanden (`garten_herbst`) |
| Refrain | alle drei nebeneinander, Noa klatscht, Pino hüpft, Lulu nickt im Takt | vorhanden (`noa_A_klatschen`, Hüpfen aus `helfer.tsx`) |
| Strophen | Pino rollt Äpfel in einen Korb, große Zahl + Fingerbild erscheint | **neu zu bauen:** Korb, Zahl-Einblendung, Hand-/Fingergrafik 1–10 (im Bilderbuchstil gezeichnet) |
| Mitmach-Echo | Äpfel im Korb leuchten nacheinander auf, Noa zeigt in die Kamera | Apfel vorhanden, Leuchten neu (einfach) |
| Gag | Lulu senkt den Hals und frisst einen Apfel | vorhanden (`lulu_C9_hals-runter`, `lulu_A_apfel`) |
| Frage | Noa staunend, Lulu kichert | vorhanden (`noa_A4`) |
Neue Posen: keine nötig. Higgsfield-Credits: 0.
## Hinweise
**An die Dolmetscher (ES/FR):** Silbenzahlen oben einhalten, Zahlen immer auf den betonten Schlag. Lernziel und Bewegungen bleiben gleich, Reime dürfen sich ändern. „Eine Hand ist voll“ muss als Bild erhalten bleiben (5 = eine Hand). ES „cinco“, „siete“, „nueve“ sind zweisilbig: dort ggf. eine Achtelnote mehr, Komponist anpassen lassen.
**An den Cutter:** 1 Takt = 2,4 s. Freie Halbtakte im Echo (1:26–1:50) nicht mit Sprache füllen. Short 1 = Refrain + Strophe 1 (0:10–0:48, 38 s). Short 2 = Lulu-Gag mit Frage (1:45–2:05, 20 s, eigener Mini-Bogen).
**Für Eltern (Beschreibung):** „Ihr Kind zählt bis 10 und lernt dabei: 5 Finger sind eine Hand, 10 Finger sind zwei Hände. Spielidee für danach: Zählt beim Tischdecken die Löffel oder beim Anziehen die Knöpfe.“
## Offene Fragen
1. Ist Pino in den Liedern „wach“, obwohl er ab 24.12. im Winterschlaf ist? Vorschlag: Die Lieder stehen in einem eigenen Buch („Pinos Liederbuch“) außerhalb der Geschichte. Kinderpsychologie fragen.
2. Karaoke-Text im Bild ja oder nein? Für Lieder empfohlen (hilft Eltern beim Mitsingen), in den Folgen bleibt es bei „final ohne Untertitel“.
3. Suno Pro läuft laut Plan nur bis 28.11. Alle Lieder, die bis dahin feststehen, sollten vorher erzeugt werden.

View file

@ -0,0 +1,63 @@
# Lied 1 ES: „Uno, dos: ¡Pino llegó!“
Status: Entwurf dolmetscher-es, 03.11.2026. Nicht muttersprachlich gegengelesen.
Reihen-Ansage: „Este es el libro de canciones de Pino. Aquí Pino siempre canta con nosotros.“
## Suno-Text
```text
[Intro]
(glockenspiel)
[Chorus]
¡Cuenta, cuenta,
dedos arriba y ven!
Hasta diez, ¡sí puedes tú!
Pino, Lulu, Noa, ¡y tú!
[Verse 1]
Uno, dos: ¡Pino llegó!
Tres, cuatro: ¡Lulu se asomó!
¡Cinco! Una mano llena,
cinco manzanas: ¡qué fiesta!
[Chorus]
¡Cuenta, cuenta,
dedos arriba y ven!
Hasta diez, ¡sí puedes tú!
Pino, Lulu, Noa, ¡y tú!
[Verse 2]
Seis, siete: ¡qué banquete!
Ocho, nueve: ¡Pino se mueve!
¡Diez! Dos manos llenas,
diez manzanas: ¡gran fiesta!
[Break: call and response]
¡Uno! ... ¡Dos! ... ¡Tres! ... ¡Cuatro! ... ¡Cinco! ...
¡Seis! ... ¡Siete! ... ¡Ocho! ... ¡Nueve! ... ¡Diez! ...
[Instrumental break]
[Chorus, softer]
¡Cuenta, cuenta,
dedos arriba y ven!
Hasta diez, ¡sí puedes tú!
Pino, Lulu, Noa, ¡y tú!
[Outro]
(glockenspiel, gentle ending)
```
## Gesprochen (ElevenLabs)
- Erzähler: „¡Levanta las manos! Hoy contamos hasta diez.“
- Vor dem Echo: „¡Ahora tú! Noa canta primero y tú cantas después.“
- Gag: LULU: „¿Puedo comer una manzana?“ PINO: „¡Sí, por favor!“ („¡Ñam!“) NOA: „Ahora solo quedan… *(3 s)* ¡Nueve!“ LULU *(se ríe)*: „Nueve también es bonito.“
## Kritische Stellen
- Titel frei; Alternative „Pino está aquí“.
- „banquete“ kein Alltagswort für Kinder.
- Refrain Zeile 3/4 Identreim auf „tú“.

View file

@ -0,0 +1,62 @@
# Lied 1 FR: « Un, deux – Pino vient aussi ! »
Status: Entwurf dolmetscher-fr, 03.11.2026 (ersetzt Problemzeile „Pino joue avec eux“). Nicht muttersprachlich gegengelesen.
YouTube-Vorschlag: « Compter jusqu'à 10 avec Pino : les pommes dans le panier ».
Reihen-Ansage: « Voici le livre de chansons de Pino. Ici, Pino chante toujours avec nous. »
## Suno-Text
```text
[Intro]
(glockenspiel)
[Chorus]
Comptons, comptons,
les doigts en l'air, allons !
Un à dix, oui, on y croit,
Pino, Lulu, Noa – et toi !
[Verse 1]
Un, deux – Pino vient aussi !
Trois, quatre – Lulu est ici !
Cinq ! Une main entière,
cinq pommes – c'est super !
[Chorus]
Comptons, comptons,
les doigts en l'air, allons !
Un à dix, oui, on y croit,
Pino, Lulu, Noa – et toi !
[Verse 2]
Six, sept – encore des pommes !
Huit, neuf – Pino fait des bonds !
Dix ! Les deux mains entières,
dix pommes – c'est super !
[Break: call and response]
Un ! ... Deux ! ... Trois ! ... Quatre ! ... Cinq ! ...
Six ! ... Sept ! ... Huit ! ... Neuf ! ... Dix ! ...
[Instrumental break]
[Chorus, softer]
Comptons, comptons,
les doigts en l'air, allons !
Un à dix, oui, on y croit,
Pino, Lulu, Noa – et toi !
[Outro]
(glockenspiel, gentle ending)
```
## Gesprochen (ElevenLabs)
- ERZ: « Lève tes mains ! Aujourd'hui, on compte jusqu'à dix. »
- ERZ vor dem Echo: « À toi ! Noa chante, puis tu répètes. »
- Gag: LULU: « Je peux avoir une pomme ? » PINO: « Oui, bien sûr ! » (« Miam ! ») NOA: « Maintenant, il en reste … ? » *(3 s)* « Neuf ! » LULU *(rit)*: « Neuf, c'est bien aussi. »
## Kritische Stellen
- „oui, on y croit“ evtl. zu abstrakt; Alternative „Un à dix, on y arrive“.

View file

@ -0,0 +1,255 @@
# Lied 2: „Rot wie Noas Stiefel“ (Farbenlied: rot, gelb, blau, grün, braun)
Entwurf vom 03.11.2026 (Komponist). **Überarbeitet 03.11. nach Team-Check:** Refrain Zeile 2 und 4 konkreter, im Refrain auf die Farbkleckse im Bild zeigen statt auf den eigenen Körper, Braun wird vor der Frage vorgestellt, im Gag schaut Pinos Kopf unter dem Schal heraus. Intro-Ansage der Reihe: „Das ist Pinos Liederbuch. Hier singt Pino immer mit.“ Vor dem Bild prüfen: Noas Jacke gelb, Pinos Stacheln braun? Text und Melodie sind neu geschrieben. Web-Kurzcheck (03.11.2026): kein Lied mit dem Titel oder den Zeilen gefunden; die Melodie lässt sich im Web nicht prüfen, sie ist aber bewusst anders gebaut als die bekannten Farbenlieder (kein „X, X, X sind alle meine …“, keine Aufzählung in Liedform, Hook ist eine Zeigen-Frage).
## Steckbrief
| | |
| --- | --- |
| Titel des Liedes DE | Rot wie Noas Stiefel |
| Vorschlag ES / FR | „Rojo como las botas de Noa“ / „Rouge comme les bottes de Noa“ (Dolmetscher dichten neu) |
| Lernziel | Farben erkennen und benennen: rot, gelb, blau, grün (+ braun als Zugabe), jede Farbe an einem Ding, das man im Bild findet |
| Alter | 3–6 Jahre (3: Farben zeigen, 5–6: Farbe benennen und selbst Beispiele finden) |
| Länge | ca. 2:25 Min. (58 Takte) |
| Tempo / Takt / Tonart | 96 BPM, 4/4 (1 Takt = 2,5 s), G-Dur |
| Tonumfang | D4–H4 (Sexte); Hook G–A–H |
| Einsatz | Mittwochs-Lied (Lied 2 der Reihe „Pinos Liederbuch“), eigenständiges Einzelvideo, 2 Shorts |
### Titel, Thumbnail, Shorts (je Sprache)
| | DE | ES | FR |
| --- | --- | --- | --- |
| YouTube-Titel | Farben lernen für Kinder – Lied zum Mitsingen und Mitmachen \| Pinos kleine Welt | Aprender los colores – canción infantil para cantar y moverse \| El pequeño mundo de Pino | Apprendre les couleurs – chanson pour enfants à chanter \| Le petit monde de Pino |
| Thumbnail-Text (max. 3 Wörter) | Welche Farbe? | ¿Qué color? | Quelle couleur ? |
| Short 1 (Refrain) | Farben lernen: Zeig, zeig, zeig mal hin! | Colores: ¡Mira, mira, mira! | Les couleurs : Montre, montre ! |
| Short 2 (Gag) | Wer ist jetzt grün? | ¿Quién es verde ahora? | Qui est vert maintenant ? |
**Thumbnail-Idee:** Noa groß in der Mitte, zeigt mit dem Finger auf ihre roten Stiefel (Pose `noa_B_zeigen`); um sie fünf runde Farbkleckse (rot, gelb, blau, grün, braun), Schrift „Welche Farbe?“ in dicken Buchstaben, ein Gegenstand pro Klecks nicht nötig. Hintergrund `garten`.
## Idee
Jede Farbe gehört zu etwas, das man an den drei Freunden sieht: **rot** = Noas Stiefel, **gelb** = Noas Jacke, **blau** = Pinos Mütze, **grün** = Lulus Schal, **braun** = Pinos Stacheln. Die Kinder zeigen im Refrain auf ihrem eigenen Körper, wo die Farbe sitzt (rot unten an den Füßen, gelb am Rumpf, blau oben am Kopf, grün am Hals). In den Strophen fragt das Lied „Wer trägt Rot?“, ein Takt bleibt frei zum Raten, dann kommt die Antwort „Rot wie Noas Stiefel“, und das Ding leuchtet im Bild auf. Im Mitmach-Teil fragt Noa rückwärts („Wo ist Gelb?“), das Kind antwortet mit dem Ding. Gag: Lulus Schal rutscht über Pino, und Pino ist „grün wie Lulus Schal“.
Einzelvideo: Noa sagt in den ersten zwei Takten nur „Hallo, ich bin Noa!“, mehr Vorwissen braucht es nicht.
## Form
| Teil | Takte | Zeit | Inhalt |
| --- | --- | --- | --- |
| Intro | 2 | 0:00–0:05 | Glockenspiel spielt die Hook-Töne. Noa (gesprochen): „Hallo, ich bin Noa!“ |
| Refrain | 8 | 0:05–0:25 | alle, Kinderchor dabei |
| Strophe 1: rot | 4 | 0:25–0:35 | Frage – Rate-Takt – Antwort – Antwort-Echo |
| Strophe 2: gelb | 4 | 0:35–0:45 | gleiches Muster |
| Refrain | 8 | 0:45–1:05 | |
| Strophe 3: blau | 4 | 1:05–1:15 | |
| Strophe 4: grün | 4 | 1:15–1:25 | |
| Mitmach-Teil „Wo ist …?“ | 10 | 1:25–1:50 | 5 × (Frage-Takt + freier Takt): rot, gelb, blau, grün, braun |
| Gag | 3 | 1:50–1:57,5 | Lulus Schal rutscht über Pino, nur Musik + gesprochen |
| Schluss-Refrain | 8 | 1:57,5–2:17,5 | leiser, im letzten Takt etwas langsamer |
| Outro | 3 | 2:17,5–2:25 | Glockenspiel, Buch geht zu |
Refrain kommt dreimal (0:05, 0:45, 1:57,5), immer gleich. Der Refrain beginnt nach 5 s.
## Liedtext mit Bewegungen
Silben, Betonung: X = betont, x = unbetont.
**Refrain** *(alle, Kinderchor)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Zeig, zeig, zeig mal hin! | Zeigefinger 3× nach vorn, bei „hin“ Arm ausstrecken | 5 | X X X x X |
| Such die Farben, schau gut hin! | Hand über die Augen, Kopf langsam hin und her | 7 | X x X x X x X |
| Rot und Gelb und Blau und Grün, | bei jeder Farbe mit dem Finger nach vorn auf den Farbklecks im Bild zeigen | 7 | X x X x X x X |
| Alle Farben – das ist schön! | Arme weit öffnen | 7 | X x X x X x X |
Selbsttest: Refrain im Tempo gesprochen, jede Zeile passt in 2 Sekunden, Luft ist nach jeder Zeile da (Hook-Zeile hat 5 Silben, kein Wort stolpert).
**Strophen** *(Muster fest, es wechseln nur das Farbwort und das Bildwort in der Antwort)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| *Takt 1:* Wer trägt Rot? Wer trägt Rot? | Hand über die Augen, suchen | 6 | x X X x X X |
| *Takt 2: freier Takt* (Kinder raten, rufen „Noa!“ oder „Stiefel!“) | Finger in die Luft | – | – |
| *Takt 3:* Rot wie Noas Stiefel! | auf das Ding zeigen (Füße) | 6 | X x X x X x |
| *Takt 4:* Rot wie Noas Stiefel! *(Kinderchor wiederholt)* | Füße trampeln im Takt | 6 | X x X x X x |
Die vier Strophen:
| Strophe | Farbwort | Antwort (Takt 3 und 4) | Bewegung bei der Antwort | Silben |
| --- | --- | --- | --- | --- |
| 1 | Rot | Rot wie Noas Stiefel! | auf Füße zeigen, stampfen | 6 |
| 2 | Gelb | Gelb wie Noas Jacke! | über den Rumpf streichen | 6 |
| 3 | Blau | Blau wie Pinos Mütze! | auf den Kopf tippen (Mütze) | 6 |
| 4 | Grün | Grün wie Lulus Schal! | Hände um den Hals legen | 5 (Schal wird gedehnt) |
**Mitmach-Teil „Wo ist …?“** *(Noa fragt, die Kinder antworten im freien Takt)*
> ERZ/NOA: „Jetzt du! Wo ist … ?“
>
> Wo ist Rot? *(frei: „Stiefel!“)* – Wo ist Gelb? *(frei: „Jacke!“)* – Wo ist Blau? *(frei: „Mütze!“)* – Wo ist Grün? *(frei: „Schal!“)* – Wo ist Braun? *(frei: „Pino!“)*
Je Paar 2 Takte: Takt 1 gesungen auf Schlag 1–2 („Wo ist Rot?“), Schläge 3–4 und der ganze zweite Takt ohne Gesang (nur Gitarre und weiche Klatscher). Braun ist die Zugabe: Pinos Stacheln. Am Ende des freien Takts leuchtet das Ding auf, damit das Kind sich bestätigt fühlt.
**Gag** *(gesprochen, ElevenLabs, über leisem Groove)*
> *Lulus Schal rutscht lautlos über Pino. Pinos Kopf schaut sofort heraus, er lacht.*
>
> NOA *(flüstert)*: „Huch! Wer ist denn jetzt grün?“ *(Pause ca. 2 s, Kinder rufen „Pino!“)*
>
> PINO *(kichert)*: „Grün wie Lulus Schal!“
>
> LULU: „Hoppla.“
**Schluss-Refrain** *(leiser, Ritardando im letzten Takt)*: Text wie Refrain, unverändert.
## Melodie-Skizze
Idee: Der Hook (Zeig, zeig, zeig mal hin) bleibt auf G, steigt dann zu A und H. Die Strophe antwortet in tieferer Lage, so entsteht der Wechsel Frage–Antwort.
**Refrain** (Akkorde: `| G | G | C | D | G | C | Em | G |`, alle Noten Viertel)
```
Zeig, zeig, zeig mal hin! G G G A | H – – –
Wel-che Far-be steckt da drin? H A G A | H A A –
Rot und Gelb und Blau und Grün, D D E E | G G A – (Farben steigen: D E G A)
Far-ben, die wie Blu-men blühn! H H A G | A G G –
```
Zeile 3 ist die einzige Stelle mit D. Die Farben steigen von D über E und G nach A: das Kind hört, dass vier Farben „in einer Reihe“ stehen. Zeile 4 endet auf dem Grundton G.
**Strophe** (Akkorde: `| G | G | C | G |`, Takt 1 und 3 in Achteln, in Takt 1 sind „Rot“ jeweils Viertel)
```
Takt 1 Wer trägt Rot? Wer trägt Rot? D E G | D E G (Achtel, Achtel, Viertel, je zweimal)
Takt 2 (frei, nur Gitarre)
Takt 3 Rot wie No-as Stie-fel! G A H A G E (Achtel) + Viertelpause
Takt 4 Rot wie No-as Stie-fel! G A H A G G (Achtel) + Viertelpause
```
Strophe 4 („Schal“): `G A H A G – G` mit gehaltenem „Schaal“ (zwei Töne auf einer Silbe).
**Mitmach-Teil:** Frage „Wo ist ___?“ auf `D E G`, danach 1,5 Takte frei. Alle Farbwörter auf G.
**Umfang:** D4–H4. Kein Sprung größer als eine Terz. Die Hook-Töne G–A–H liegen mitten im Kinderumfang.
## Suno-Paket
**Stilangabe** (ca. 194 Zeichen, vor dem Einfügen nachzählen)
```text
Warm children's folk-pop singalong, clear friendly female voice, small children's choir joins on the chorus, glockenspiel, acoustic guitar, ukulele, soft claps, 96 bpm, G major, very clear words
```
**Exclude styles**
```text
electronic, autotune, heavy drums, rap, rock, dark, sad, synth pads, dubstep, trap, screaming
```
**Text für Suno**
```text
[Intro]
(glockenspiel plays a simple three-note hook)
[Chorus]
Zeig, zeig, zeig mal hin!
Such die Farben, schau gut hin!
Rot und Gelb und Blau und Grün,
alle Farben – das ist schön!
[Verse 1]
Wer trägt Rot? Wer trägt Rot?
...
Rot wie Noas Stiefel!
Rot wie Noas Stiefel!
[Verse 2]
Wer trägt Gelb? Wer trägt Gelb?
...
Gelb wie Noas Jacke!
Gelb wie Noas Jacke!
[Chorus]
Zeig, zeig, zeig mal hin!
Such die Farben, schau gut hin!
Rot und Gelb und Blau und Grün,
alle Farben – das ist schön!
[Verse 3]
Wer trägt Blau? Wer trägt Blau?
...
Blau wie Pinos Mütze!
Blau wie Pinos Mütze!
[Verse 4]
Wer trägt Grün? Wer trägt Grün?
...
Grün wie Lulus Schaal!
Grün wie Lulus Schaal!
[Break: call and response]
Wo ist Rot? ... ... ...
Wo ist Gelb? ... ... ...
Wo ist Blau? ... ... ...
Wo ist Grün? ... ... ...
Und jetzt was Neues: Braun!
Wo ist Braun? ... ... ...
[Instrumental break]
[Chorus, softer, slowing down at the end]
Zeig, zeig, zeig mal hin!
Such die Farben, schau gut hin!
Rot und Gelb und Blau und Grün,
alle Farben – das ist schön!
[Outro]
(glockenspiel, gentle ending)
```
Hinweise zum Erzeugen:
- „Schal“ in der letzten Strophe mit Doppel-a schreiben, damit Suno es zieht; bei Problemen „Schal-al“ testen.
- Die Pausenzeilen `...` sind Platzhalter. Hörliste: Hält Suno den freien Takt? Wenn nicht, den Mitmach-Teil getrennt als Instrumental erzeugen und im Schnitt montieren.
- Gesprochene Teile (Noa-Begrüßung, „Wo ist …?“ als Sprechstimme, Gag) kommen von ElevenLabs, nicht von Suno.
- 2–4 Varianten erzeugen. **Hörliste:** Text verständlich? Refrain in allen drei Vorkommen gleich? Kein Farbwort verschluckt (besonders „Gelb“, „Grün“)? Kinderchor im Refrain da? Schluss ruhig und nicht abgeschnitten?
- Fertigmachen: getrennte Spuren laden, Gesang vorn, Endmischung `loudnorm=I=-14:TP=-1.5:LRA=11`. Karaoke-/Instrumental-Fassung ablegen.
## Bildplan für Remotion
Ort durchgehend `garten` (ganzjährig, kein Herbst). Pose-Namen aus `baukasten/posen.ts`.
| Teil / Zeile | Bild / Pose | Status |
| --- | --- | --- |
| Intro / Outro | Bilderbuch auf/zu, Noa winkt (`noa_C4_winken`) | vorhanden (`buch.tsx`, Pose) |
| Refrain, alle Zeilen | alle drei nebeneinander im Garten: Noa klatscht (`noa_A_klatschen`), Pino hüpft (`pino_C3_freudensprung`), Lulu nickt (`lulu_A3_lachen`); bei Zeile 3 erscheinen nacheinander vier Farbkleckse unten im Bild | Posen vorhanden, **Farbkleckse neu zu bauen** (einfache Kreise im Bilderbuchstil) |
| Refrain, Zeile 1 | Noa zeigt (`noa_B_zeigen`) | vorhanden |
| Refrain, Zeile 4 | Blumen blühen im Gras auf | **neu zu bauen** (einfache Blüten-Animation, Skalierung) |
| Strophe 1, Antwort | Zoom auf Noas Stiefel, roter Leuchtkreis | Zoom/Ausschnitt aus `noa_ref_stehend`; Leuchtkreis neu (einfach) |
| Strophe 2, Antwort | Zoom auf Noas Jacke, gelber Leuchtkreis | wie oben |
| Strophe 3, Antwort | Pino mit Mütze (`pino_ref_sitzend`), blauer Leuchtkreis | vorhanden + Leuchtkreis |
| Strophe 4, Antwort | Lulu mit Schal (`lulu_A_hals-unten`), grüner Leuchtkreis | vorhanden + Leuchtkreis |
| Rate-Takt (Takt 2) | Figuren schauen suchend (`noa_A5_blick-links`, `noa_A6_blick-rechts`) | vorhanden |
| Mitmach-Teil | Noa zeigt in die Kamera (`noa_B_zeigen`), die fünf Dinge leuchten nacheinander auf; braun: Pino rollt sich zur Kugel (`pino_A_kugel`) | vorhanden |
| Gag | Lulu ohne Schal (`lulu_A4_staunen_ohne-schal`), Pino verschwindet unter einem grünen Hügel, dann `pino_A3_lachen` | Posen vorhanden, **grünes Schaltuch als Überwurf neu zu bauen** (eine Form) |
| Schluss-Refrain | wie Refrain, langsamer, Farbkleckse bleiben | vorhanden |
Neue Posen: keine. Neu zu bauen (alle einfache Formen): Farbkleckse, Leuchtkreis, Blüten, grüner Überwurf. Higgsfield-Credits: 0. Karaoke-Text im Bild empfohlen.
## Hinweise
**An die Dolmetscher (ES/FR):** Silbenzahlen und Betonung oben einhalten. Der Refrain-Hook (5 Silben, dreimal derselbe Ton) muss ein Ruf-Wort tragen (ES z. B. „¡Mira, mira, mira!“, FR „Montre, montre !“). Zeile 3 nennt rot, gelb, blau, grün in dieser Reihenfolge, jede Farbe auf dem betonten Schlag, die Zeigebewegung (Füße, Bauch, Kopf, Hals) bleibt gleich. Die Bildworte können sich ändern, wenn die Zuordnung zu Figur und Ding bleibt (Noas Stiefel rot, Noas Jacke gelb, Pinos Mütze blau, Lulus Schal grün, Pino braun). „Schal“ ist einsilbig und wird gedehnt: ES „bufanda“ (3 Silben) und FR „écharpe“ (2) brauchen ggf. Anpassung im Takt, mit dem Komponisten abstimmen. Frage-Takt und freier Takt bleiben.
**An den Cutter:** 1 Takt = 2,5 s. Taktmarken: Intro 0:00, Refrain 0:05, S1 0:25, S2 0:35, Refrain 0:45, S3 1:05, S4 1:15, Mitmach 1:25, Gag 1:50, Schluss-Refrain 1:57,5, Outro 2:17,5, Ende 2:25. Freie Takte (jeweils der 2. Takt jeder Strophe, Mitmach-Teil) nicht mit Sprache füllen. **Short 1** = Refrain + Strophe 1 (0:05–0:35, 30 s). **Short 2** = Mitmach „Grün“ + „Braun“ + Gag (1:40–1:57,5, 17,5 s). Karaoke-Text einblenden, Farbwörter in der jeweiligen Farbe.
**Für Eltern (Beschreibung):** „Ihr Kind lernt rot, gelb, blau, grün und braun zu erkennen und zu benennen, weil jede Farbe an einem Ding hängt, das es im Bild wiederfindet. Spielidee für danach: Sucht beim Anziehen oder auf dem Spaziergang etwas Rotes, etwas Gelbes, etwas Blaues und etwas Grünes.“
## Offene Fragen
1. **Muster „nur ein Wort wechselt“:** In der Strophe wechseln in der Antwort das Farbwort und das Bildwort (Rot / Noas Stiefel). Beide stehen im selben Satzglied und sind zweimal hintereinander zu hören; die Frage („Wer trägt …?“) wechselt nur im Farbwort. Reicht das, oder soll die Antwort nur „Rot!“ heißen und das Ding nur im Bild erscheinen?
2. Braun ist nur in der Zugabe (Mitmach-Teil), nicht im Refrain, damit Zeile 3 sechs Farbsilben behält. Ist das für Kinderpsychologie in Ordnung? Alternative: Refrain nennt nur vier, ein Kind hört Braun erst später.
3. Pinos Stacheln als „braun“ passt nur, wenn sie in den Folgen so aussehen (Farbton prüfen).
4. Suno: Kinderchor im Refrain und freie Takte hängen vom Modell ab; erst Test mit 4 Varianten, dann entscheiden, ob der Mitmach-Teil getrennt erzeugt wird.
5. Gag (Pino unter dem Schal): ist es für ängstliche Kinder in Ordnung, dass Pino kurz „verschwindet“? Vorschlag: Pino bleibt sichtbar (Kopf guckt raus) und lacht sofort.
6. Karaoke-Text im Bild ja oder nein (siehe Plan, Frage 4).

View file

@ -0,0 +1,79 @@
# Lied 2 ES: „Rojo como las botas de Noa“
Status: Entwurf dolmetscher-es, 03.11.2026. Nicht muttersprachlich gegengelesen.
Reihen-Ansage: „Este es el libro de canciones de Pino. Aquí Pino siempre canta con nosotros.“
## Suno-Text
```text
[Intro]
(glockenspiel plays a simple three-note hook)
[Chorus]
¡Mira, mira, mira!
Busca los colores, ¡a ver!
Rojo, amarillo, azul y verde,
¡todos juntos, qué alegre!
[Verse 1]
¿Quién lleva rojo? ¿Quién?
...
Rojo, las botas de Noa.
Rojo, las botas de Noa.
[Verse 2]
¿Quién lleva amarillo? ¿Quién?
...
Amarillo, su chaqueta.
Amarillo, su chaqueta.
[Chorus]
¡Mira, mira, mira!
Busca los colores, ¡a ver!
Rojo, amarillo, azul y verde,
¡todos juntos, qué alegre!
[Verse 3]
¿Quién lleva azul? ¿Quién?
...
Azul, el gorro de Pino.
Azul, el gorro de Pino.
[Verse 4]
¿Quién lleva verde? ¿Quién?
...
Verde, la bufanda de Lulu.
Verde, la bufanda de Lulu.
[Break: call and response]
¿Y el rojo? ... ... ...
¿Y el amarillo? ... ... ...
¿Y el azul? ... ... ...
¿Y el verde? ... ... ...
Y ahora, algo nuevo: ¡el marrón!
¿Y el marrón? ... ... ...
[Instrumental break]
[Chorus, softer, slowing down at the end]
¡Mira, mira, mira!
Busca los colores, ¡a ver!
Rojo, amarillo, azul y verde,
¡todos juntos, qué alegre!
[Outro]
(glockenspiel, gentle ending)
```
## Gesprochen (ElevenLabs)
- NOA: „¡Hola, soy Noa!“
- Mitmachen: „¡Ahora tú! Dime dónde está cada color.“
- Gag: *La bufanda de Lulu resbala sobre Pino, su cabeza asoma.* NOA *(susurra)*: „¡Uy! ¿Y quién es verde ahora?“ *(2 s)* PINO *(se ríe)*: „¡Verde como la bufanda de Lulu!“ LULU: „¡Ups!“
## Kritische Stellen
- Titel 10 Silben; in Strophen ohne „como“.
- Gelb nennt Noa nicht („su chaqueta“).
- „marrón“ neutral (MX „café“); „bufanda“ ggf. „bufaanda“ für Suno.

View file

@ -0,0 +1,77 @@
# Lied 2 FR: « Rouge comme les bottes de Noa »
Status: Entwurf dolmetscher-fr, 03.11.2026. Nicht muttersprachlich gegengelesen.
Reihen-Ansage: « Voici le livre de chansons de Pino. Ici, Pino chante toujours avec nous. »
## Suno-Text
```text
[Intro]
(glockenspiel plays a simple three-note hook)
[Chorus]
Montre, montre, montre !
Cherche les couleurs, regarde !
Rouge, jaune, bleu et vert,
que de couleurs – c'est super !
[Verse 1]
Qui porte du rouge ?
...
Noa, les bottes rouges !
Noa, les bottes rouges !
[Verse 2]
Qui porte du jaune ?
...
Noa, la veste jaune !
Noa, la veste jaune !
[Chorus]
Montre, montre, montre !
Cherche les couleurs, regarde !
Rouge, jaune, bleu et vert,
que de couleurs – c'est super !
[Verse 3]
Qui porte du bleu ?
...
Pino, le bonnet bleu !
Pino, le bonnet bleu !
[Verse 4]
Qui porte du vert ?
...
Lulu, l'écharpe verte !
Lulu, l'écharpe verte !
[Break: call and response]
Où est le rouge ? ... ... ...
Où est le jaune ? ... ... ...
Où est le bleu ? ... ... ...
Où est le vert ? ... ... ...
Et maintenant : le marron !
Où est le marron ? ... ... ...
[Instrumental break]
[Chorus, softer, slowing down at the end]
Montre, montre, montre !
Cherche les couleurs, regarde !
Rouge, jaune, bleu et vert,
que de couleurs – c'est super !
[Outro]
(glockenspiel, gentle ending)
```
## Gesprochen (ElevenLabs)
- NOA: « Coucou, je suis Noa ! » / « À toi ! Où est … ? »
- Gag: NOA *(chuchote)*: « Oh ! Mais qui est vert, maintenant ? » *(2 s)* PINO *(rit)*: « Vert comme l'écharpe de Lulu ! » LULU: « Oups. »
## Kritische Stellen
- Strophenfrage nur einmal (Farbwörter lang).
- „marron“ nur, wenn Pinos Stacheln im Bild braun sind; „veste“ nur bei Jacke.

View file

@ -0,0 +1,371 @@
# Lied 3: „Einer klein und einer groß“ (lange Fassung, Gegensätze, Erkennungslied der Serie)
Entwurf vom 03.11.2026 (Komponist). **Überarbeitet 03.11. nach Team-Check:** Strophe 4 (lang/kurz) gestrichen, Länge jetzt ca. 2:11; Mitmach-Teil neu („Pino ist klein, und Lulu ist …? – Groß!“, „Noa ist laut, und Pino ist …? – Leise!“, Artikel in Paar 2); Strophe 2, Zeile 2 neu. Intro-Ansage der Reihe: „Das ist Pinos Liederbuch. Hier singt Pino immer mit.“ Die Abschnitte unten zu Strophe 4 gelten nicht mehr. Refrain und Strophe 1 stammen unverändert aus Folge 1 (`drehbuecher/folge01-kennenlernen/de.md`, Abschnitt „Lied“; Texte in `remotion/src/folge01/texte/de.json`, Schlüssel `lied/r1`–`r4`, `lied/s1`–`s4`). Neu sind die Strophen 2–4, der Mitmach-Teil, der Gag, die Melodie und das Suno-Paket. Web-Kurzcheck (03.11.2026): kein bestehendes Lied mit dem Titel, dem Refrain oder den Strophenzeilen gefunden. Die Melodie lässt sich im Web nicht prüfen; sie ist bewusst nicht aus Tonleiterläufen gebaut (siehe Melodie-Skizze). Nach dem Suno-Hören noch einmal auf Ähnlichkeit prüfen.
## Steckbrief
| | |
| --- | --- |
| Titel DE | Einer klein und einer groß |
| Vorschlag ES / FR | „Uno pequeño y otra alta“ / „Un tout petit, une très grande“ (so heißen die Lieder in `texte/es.json` und `texte/fr.json` von Folge 1–3; Dolmetscher dichten die neuen Strophen neu) |
| Lernziel | Gegensätze erkennen und benennen: groß/klein, oben/unten, laut/leise, schnell/langsam, lang/kurz. Botschaft: Jeder ist anders, zusammen geht's. |
| Alter | 3–6 Jahre (3: Bewegung nachmachen, 5–6: das Gegenteil selbst nennen) |
| Länge | ca. 2:25 Min. (63 Takte, mit Ritardando bis ca. 2:28) |
| Tempo / Takt / Tonart | **104 BPM**, 4/4 (1 Takt = 2,31 s, 1 Schlag = 0,577 s), **D-Dur** |
| Zeilenraster | **1 Zeile = 6 Schläge = 3,46 s** (4 Schläge Text, 1 Schlag Klatscher, 1 Schlag Atem). 1 Block (4 Zeilen) = 24 Schläge = 6 Takte = 13,85 s |
| Tonumfang | D4–H4 (Sexte); Refrain F#4–H4, Strophen D4–A4 |
| Einsatz | Erkennungslied der Serie. Lange Fassung als Einzelvideo und Mittwochs-Lied Nr. 3, 2 Shorts. **Kurzfassung 40 s** läuft in Folge 1 (Refrain–Strophe 1–Refrain), Refrain-Ausschnitt in Folge 2 und 3. |
Warum D-Dur und 104 BPM: Die Lieder 1, 2, 4, 5 stehen in C, G, F, G. D-Dur gibt dem Erkennungslied einen eigenen Klang und liegt mit D4–H4 genau im Kinder-Tonumfang. 104 BPM ist der Wert, bei dem drei Blöcke zu je 4 Zeilen **41,5 s** ergeben. Das entspricht dem vorhandenen Folge-1-Lied (Zeilen à 3,2–3,6 s in `lied.tsx`: 3×13,2 s plus Vor- und Nachlauf). Der Schnitt in Folge 1–3 muss kaum angepasst werden.
### Titel, Thumbnail, Shorts (je Sprache)
| | DE | ES | FR |
| --- | --- | --- | --- |
| YouTube-Titel | Gegensätze lernen für Kinder – Lied zum Mitsingen: groß, klein, laut, leise \| Pinos kleine Welt | Aprender los opuestos – canción infantil para cantar: grande, pequeño, rápido, lento \| El pequeño mundo de Pino | Apprendre les contraires – chanson pour enfants : grand, petit, vite, lent \| Le petit monde de Pino |
| Thumbnail-Text (max. 3 Wörter) | Groß – klein! | ¡Grande, pequeño! | Grand, petit ! |
| Short 1 (Refrain + Strophe 1) | Einer klein und einer groß – wer steht in der Mitte? | Uno pequeño y otra alta – ¿quién está en el medio? | Un tout petit, une très grande – et au milieu ? |
| Short 2 (Mitmach + Gag) | Lulu macht sich klein, Pino macht sich groß | Lulu se hace pequeña, Pino se hace grande | Lulu se fait petite, Pino se fait grand |
**Thumbnail-Idee:** Lulus Kopf oben am Bildrand (`lulu_A3_lachen`, Hals läuft aus dem Bild), unten Pino mit blauer Bommelmütze, der hochschaut (`pino_B_blick-nach-oben`), zwischen beiden ein dicker Doppelpfeil. Schrift „Groß – klein!“. Zwei Figuren, weil der Gegensatz das Motiv ist. Einzelfigur-Alternative: Noa in der Mitte, eine Hand weit oben, eine tief unten (`noa_A_arme-hoch` gespiegelt), gleiche Schrift.
**Einzelvideo:** Im Intro (2 Takte, 4,6 s, Glockenspiel) spricht Noa einen Satz: „Hallo, ich bin Noa – das sind Pino und Lulu!“ Mehr Vorwissen braucht es nicht.
## Idee
Drei Freunde sind verschieden groß: Pino klein, Noa mittel, Lulu riesig. Der **Refrain** (aus Folge 1) stellt genau das vor und endet mit der Botschaft „zusammen kriegen wir alles hin“. Jede **Strophe** zeigt ein Gegensatzpaar nach demselben Muster wie die erste: **Zeile 1–2 = das eine Wort mit einer Figur, Zeile 3–4 = das Gegenteil mit einer anderen Figur.** Niemand ist dabei „zu“ etwas. Jede Figur kann in jeder Strophe etwas Eigenes:
| Strophe | Gegensatz | Zeile 1–2 | Zeile 3–4 | Bewegung |
| --- | --- | --- | --- | --- |
| 1 (aus Folge 1) | oben / unten | Lulu holt den Apfel oben | Pino pflückt die Blume unten | strecken / ducken |
| 2 | laut / leise | Noa trommelt laut, alle klatschen laut | Pino raschelt leise, Lulu lauscht | laut klatschen / leise klatschen |
| 3 | schnell / langsam | Pino flitzt schnell | Lulu geht langsam | schnell stampfen / langsam stampfen |
| 4 | lang / kurz | Lulus Schal ist lang | Pinos Zeh ist kurz | Arme weit strecken / Hände eng zusammen, ducken |
Zur Frage „Lulu flüstert, Pino ruft?“: **Umgekehrt gelöst.** Pino ist schreckhaft (Stacheln), er soll nicht der Laute sein, der andere erschreckt. Er ist der Leise, und das ist seine Stärke (er raschelt im Laub, Lulu muss lauschen). Das Laute übernimmt Noa mit einer Trommel, freundlich und rhythmisch, kein Schreien. Lulu flüstert im Lied nicht, damit sich der Gag in Lied 12 („Lulu zu laut“) nicht doppelt.
Der **Mitmach-Teil** fragt vier Paare ab („Lulu ist groß, und Pino ist …?“), ein halber Takt bleibt frei, die Kinder rufen das Gegenteil, der Chor bestätigt. Der **Gag** vor dem Schluss: Lulu macht sich klein, Pino macht sich groß, und plötzlich sind beide gleich hoch.
## Form
1 Takt = 2,31 s. Innerhalb eines Blocks (6 Takte, 4 Zeilen) beginnt Zeile 1 auf Schlag 1 von Takt 1, Zeile 2 auf Schlag 3 von Takt 2, Zeile 3 auf Schlag 1 von Takt 4, Zeile 4 auf Schlag 3 von Takt 5 (je 6 Schläge = 3,46 s Abstand).
| Teil | Takte | Zeit | Inhalt |
| --- | --- | --- | --- |
| Intro | 1–2 | 0:00–0:04,6 | Glockenspiel spielt die Hook-Töne (F# G A H). Noa (gesprochen): „Hallo, ich bin Noa – das sind Pino und Lulu!“ |
| **Refrain 1** | 3–8 | 0:04,6–0:18,5 | alle, Kinderchor dabei. Hook nach 4,6 s (Regel: höchstens 10 s). |
| Strophe 1: oben/unten | 9–14 | 0:18,5–0:32,3 | Solostimme, Klatscher |
| **Refrain 2** | 15–20 | 0:32,3–0:46,2 | gleich wie Refrain 1 |
| Strophe 2: laut/leise | 21–26 | 0:46,2–1:00,0 | |
| Strophe 3: schnell/langsam | 27–32 | 1:00,0–1:13,8 | |
| **Refrain 3** | 33–38 | 1:13,8–1:27,7 | gleich |
| Strophe 4: lang/kurz | 39–44 | 1:27,7–1:41,5 | |
| Mitmach-Teil „Das Gegenteil“ | 45–52 | 1:41,5–2:00,0 | 4 Paare × 2 Takte (Frage – Pause – Antwort) |
| Gag | 53–55 | 2:00,0–2:06,9 | gesprochen (ElevenLabs) über leisem Groove |
| **Schluss-Refrain** | 56–61 | 2:06,9–2:20,8 | leiser, im letzten Takt etwas langsamer |
| Outro | 62–63 | 2:20,8–2:25,4 | Glockenspiel, Erzähler: „Jeder ist anders. Zusammen geht's.“, Buch geht zu |
Der Refrain kommt **viermal** (0:04,6 / 0:32,3 / 1:13,8 / 2:06,9) und ist immer gleich. Kürzungsoption, falls Kinderpsychologie oder Cutter die Länge zu groß finden: Strophe 4 (lang/kurz) streichen. Das Lied dauert dann ca. 2:11 und bleibt vollständig.
## Liedtext mit Bewegungen
Betonung: X = betont, x = unbetont. Silben so gezählt, wie sie gesungen werden.
**Refrain** *(alle, Kinderchor; Text WÖRTLICH aus Folge 1)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Einer klein und einer groß, | bei „klein“ ducken, bei „groß“ auf Zehenspitzen strecken; Schlag 5: 1× klatschen | 7 | X x X x X x X |
| und dazwischen – na, wer bloß? | Hand über die Augen, suchen; Schlag 5: 1× klatschen | 7 | x x X x X x X |
| Noa steht in der Mitte drin, | Hände auf Brusthöhe, bei „Mitte“ mit beiden Händen eine Mitte zeigen | 8 | X x X x x X x X |
| zusammen kriegen wir alles hin! | zur Nachbarin oder zum Nachbarn schauen, bei „hin“ Arme hoch; Schlag 5: 1× klatschen | 9 | x X x X x x X x X |
Die Hook-Zeile (Zeile 1) hat 7 Silben (Regel: höchstens 6). Das ist vorgegeben und läuft schon in Folge 1–3. Als Ausgleich steht sie auf nur vier Tönen (F# G A H). Die Bewegung zeigt den Gegensatz direkt: erst ducken, dann strecken.
Selbsttest: Im Tempo gesprochen sind es 7 bzw. 9 Silben in 4 Schlägen (2,3 s), also etwa 3 bis 4 Silben pro Sekunde. Danach folgen Klatscher und Atem (zusammen 1,2 s). „in der“ und „und da“ sind unbetonte Doppelachtel (Sechzehntel), gesprochen stolpert das nicht. Zeile 4 (9 Silben) ist die dichteste Stelle; Dolmetscher bitte nicht länger machen.
**Strophe 1: oben / unten** *(Text aus Folge 1, unverändert; Solostimme, Klatscher)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Oben hängt ein Apfel rund, | Arme ganz hoch, nach oben zeigen | 7 | X x X x X x X |
| Lulu holt ihn mit dem Mund. | hochstrecken, bei „Mund“ schnappen | 7 | X x X x X x X |
| Unten blüht die Blume blau, | tief ducken, nach unten zeigen | 7 | X x X x X x X |
| Pino pflückt sie, ganz genau! | mit zwei Fingern pflücken | 7 | X x X x X x X |
**Strophe 2: laut / leise** *(gleiche Melodie, nur die Wörter wechseln)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Laut klingt Noas Trommel: bumm! | große, laute Klatscher, Arme weit | 7 | X x X x X x X |
| Klatsch mit mir, ganz laut: bumm, bumm! | weiter laut klatschen | 7 | X x X x X x X |
| Pino raschelt leis im Gras, | ganz leise mit den Fingerspitzen klatschen | 7 | X x X x X x X |
| Lulu lauscht – das macht ihr Spaß. | Hand ans Ohr, lauschen | 7 | X x X x X x X |
**Strophe 3: schnell / langsam**
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Schnell läuft Pino hin und her, | schnell auf der Stelle trippeln | 7 | X x X x X x X |
| Stampf mit mir, es ist nicht schwer. | schnell stampfen | 7 | X x X x X x X |
| Langsam geht auch Lulu mit, | langsam Schritt für Schritt auf der Stelle gehen | 7 | X x X x X x X |
| Stampf ganz langsam, Schritt für Schritt. | langsam stampfen | 7 | X x X x X x X |
**Strophe 4: lang / kurz** *(Zugabe-Strophe, siehe Kürzungsoption)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Lang, ganz lang ist Lulus Schal, | beide Arme weit auseinander, so lang wie möglich | 7 | X x X x X x X |
| Reck dich hoch, ganz lang, einmal! | auf Zehenspitzen, ganz lang strecken | 7 | X x X x X x X |
| Kurz, ganz kurz ist Pinos Zeh, | Hände eng zusammen vor die Brust | 7 | X x X x X x X |
| Duck dich klein, ja, ja, juchhe! | ducken, bei „juchhe“ aufspringen | 7 | X x X x X x X |
Die Reimpaare stehen in allen Strophen gleich als aabb (rund/Mund, blau/genau, bumm/herum, Gras/Spaß, her/schwer, mit/Schritt, Schal/einmal, Zeh/juchhe). Rhythmus in allen vier Strophen gleich: 7 Silben, betont auf den ungeraden Plätzen, damit Kinder ab Strophe 2 mitsingen können.
**Mitmach-Teil „Das Gegenteil“** *(Noa singt die Frage; Kinder antworten; Chor bestätigt)*
Je Paar 2 Takte: Takt A = Frage (8 Silben als Achtel, Schlag 1–4). Takt B = Schlag 1–2 frei für die Kinder, Schlag 3 Chor singt das Antwortwort auf D, Schlag 4 Klatscher und Atem.
| Paar | Frage (8 Silben) | freier Takt | Chor-Antwort | Bewegung |
| --- | --- | --- | --- | --- |
| 1 | Pino ist klein, und Lulu ist …? | Kinder rufen | **Groß!** | strecken |
| 2 | Der Apfel ist oben, die Blume …? (9 Silben, eine Achtel mehr) | Kinder rufen | **Unten!** | nach unten zeigen |
| 3 | Noa ist laut, und Pino ist …? | Kinder rufen (flüstern geht auch) | **Leise!** | ganz leise klatschen |
| 4 | Pino ist schnell, und Lulu ist …? | Kinder rufen | **Langsam!** | langsam gehen |
Bei jeder Antwort erscheint im Bild eine Gegensatz-Karte mit dem Wort (siehe Bildplan). „Klein!“ ist hier eine freundliche Feststellung, kein wertender Vergleich: In Paar 1 stehen Pino und Lulu nebeneinander, beide lachen.
**Gag** *(gesprochen, ElevenLabs, 3 Takte = 6,9 s, über leisem Groove)*
> *Lulu hockt sich ganz klein, der Hals ringelt sich. Pino stellt sich auf die Zehenspitzen, die Stacheln wackeln.*
>
> LULU: „Ich mach mich klein!“
>
> PINO: „Ich mach mich groß!“
>
> NOA *(kichert)*: „Nase an Nase – jetzt seid ihr gleich hoch!“
**Schluss-Refrain** *(leiser, Ritardando im letzten Takt)*: Text wie Refrain, unverändert.
**Outro** *(Erzähler, gesprochen über Glockenspiel, 2 Takte)*: „Jeder ist anders. Zusammen geht's.“
## Melodie-Skizze
**Status: ab jetzt verbindlich für alle Folgen.** Es gab bisher keine Melodie für den Refrain; in Folge 1–3 läuft er gesprochen über einen Instrumental-Track (`musik/folge01/lied.mp3`, 95 BPM, ElevenLabs). Verbindlich festgelegt sind mit dieser Datei:
1. D-Dur, 104 BPM, 4/4, Zeilenraster 6 Schläge.
2. Die Tonfolge des Refrains (unten, in Buchstaben).
3. Die Klangwelt: Glockenspiel, Akustikgitarre, Ukulele, weiche Klatscher, Shaker, warmer Bass; Solostimme, im Refrain Kinderchor.
Suno hält eine notierte Melodie nicht zuverlässig ein. Deshalb gilt: Sobald eine Suno-Variante gewählt ist, wird **ihr** Refrain zur Referenz. Tonfolge nach Gehör in diese Datei eintragen und für ES/FR und alle späteren Folgen als Audio-Vorlage nutzen (siehe Suno-Paket). Diese Skizze ist die Vorgabe für die Auswahl.
Idee: **Die Melodie erzählt die Größen.** Zeile 1 steigt von „klein“ (tiefster Ton F#) zu „groß“ (höchster Ton H). Zeile 3 bleibt bei „Mitte“ in den mittleren Tönen G–A. Zeile 4 fällt in einer Linie auf den Grundton D und löst auf. Zeile 2 endet offen (A, Dominante) wie eine Frage.
**Raster pro Zeile:** 12 Achtel-Plätze (6 Schläge). Plätze 1–7 Silben, Platz 7–8 letzte Silbe (Viertel), Platz 9 Klatscher, Plätze 10–12 Atem (kein Gesang). Auftakte: „und da“ (Zeile 2) und „zu“ (Zeile 4) als Sechzehntel auf Platz 12 der Vorzeile; der Atem bleibt trotzdem eine Viertel lang.
**Refrain** (Akkorde je Zeile: `| D | G → A7 | G | D → G → A → D |`)
```
Zeile 1 Ei - ner klein und ei - ner groß F# G F# F# A A H(–)
Zeile 2 (und da) zwi - schen na, wer bloß? (G G) A G H A A(–) offen auf A
Zeile 3 No - a steht (in der) Mit - te drin, G G A (G F#) G F# G(–)
Zeile 4 (zu) sam - men krie - gen (wir) al - les hin! (A) H A G F# E F# E D(–) löst auf D
```
In Zeile 4 fällt die Melodie stufenweise von H nach D (H A G F# E, dann F# E D). Kein Sprung größer als eine Terz (G → H in Zeile 2, F# → A in Zeile 1). Tonumfang F#4–H4 im Refrain.
Zur Ähnlichkeit: Zeile 1 ist ein Wechsel F# G F# mit dem Anstieg A A H, keine durchgehende Tonleiter vom Grundton aus. Die bekannten Ketten „Tonleiter ab Grundton, Grundton wiederholt“ wurden bewusst vermieden. Trotzdem nach dem Hören prüfen.
**Strophe** (Akkorde: `| D | G D | D | G A D |`; alle Strophen gleiche Melodie, tiefer und ruhiger als der Refrain, damit der Refrain heraussticht)
```
Zeile 1 O - ben hängt ein Ap - fel rund, D D E F# A F# E(–) offen auf E
Zeile 2 Lu - lu holt ihn mit dem Mund. D D E F# G F# D(–) geschlossen auf D
Zeile 3 Un - ten blüht die Blu - me blau, D D E F# A F# E(–)
Zeile 4 Pi - no pflückt sie, ganz ge - nau! D D E F# G F# D(–)
```
Zeile 3 = Zeile 1 und Zeile 4 = Zeile 2 (Form A B A B). Spitzenton A. Strophen 2–4 haben dieselbe Melodie, Silben und Betonung, nur die Wörter wechseln.
**Mitmach-Teil** (Akkorde: `| D G | A | D |` je Paar)
```
Takt A Lu - lu ist groß, und Pi - no ist …? D E F# G F# G A H(gedehnt, offen)
Takt B (frei, nur Gitarre) → Chor: „Klein!“ D
```
Alle vier Fragen haben 8 Silben und dieselbe Melodie; die letzte Silbe steigt auf H und bleibt offen. Das Antwortwort singt der Chor immer auf D (tief, kurz).
**Umfang:** D4–H4 insgesamt. Nach jeder Refrain- und Strophenzeile sind 1,5 Schläge frei (Klatscher plus Atem).
## Suno-Paket
**Stilangabe** (ca. 194 Zeichen, vor dem Einfügen nachzählen)
```text
Warm children's folk-pop singalong, clear friendly female voice, small children's choir joins on the chorus, glockenspiel, acoustic guitar, ukulele, soft claps, 104 bpm, D major, very clear words
```
**Exclude styles**
```text
electronic, autotune, heavy drums, rap, rock, dark, sad, synth pads, dubstep, trap, screaming
```
**Text für Suno**
```text
[Intro]
(glockenspiel plays a simple four-note hook, two bars)
[Chorus – children's choir joins]
Einer klein und einer groß,
und dazwischen – na, wer bloß?
Noa steht in der Mitte drin,
zusammen kriegen wir alles hin!
[Verse 1]
Oben hängt ein Apfel rund,
Lulu holt ihn mit dem Mund.
Unten blüht die Blume blau,
Pino pflückt sie, ganz genau!
[Chorus – children's choir joins]
Einer klein und einer groß,
und dazwischen – na, wer bloß?
Noa steht in der Mitte drin,
zusammen kriegen wir alles hin!
[Verse 2]
Laut klingt Noas Trommel: bumm!
Klatsch mit mir, ganz laut: bumm, bumm!
Pino raschelt leis im Gras,
Lulu lauscht – das macht ihr Spaß.
[Verse 3]
Schnell läuft Pino hin und her,
Stampf mit mir, es ist nicht schwer.
Langsam geht auch Lulu mit,
Stampf ganz langsam, Schritt für Schritt.
[Chorus – children's choir joins]
Einer klein und einer groß,
und dazwischen – na, wer bloß?
Noa steht in der Mitte drin,
zusammen kriegen wir alles hin!
[Break: call and response]
Pino ist klein, und Lulu ist …
...
(Groß!)
Der Apfel ist oben, die Blume …
...
(Unten!)
Noa ist laut, und Pino ist …
...
(Leise!)
Pino ist schnell, und Lulu ist …
...
(Langsam!)
[Instrumental break]
(three bars, soft groove, no singing)
[Chorus – softer, children's choir, slowing down at the end]
Einer klein und einer groß,
und dazwischen – na, wer bloß?
Noa steht in der Mitte drin,
zusammen kriegen wir alles hin!
[Outro]
(glockenspiel, gentle ending, two bars)
```
Hinweise zum Erzeugen:
- Gesprochene Teile kommen **nicht** von Suno, sondern von ElevenLabs: Noas Intro-Satz, der Gag (Lulu, Pino, Noa) und der Erzähler-Satz im Outro. Sie liegen im Schnitt über den Gitarren-Takten.
- Die Fragen im Mitmach-Teil sind gesungen (wie in Lied 2). Hält Suno den freien Takt nicht, den Mitmach-Teil getrennt als Instrumental erzeugen und im Schnitt montieren; die Fragen dann als Sprechrhythmus per ElevenLabs. Die Chor-Antworten („Klein!“) gegebenenfalls aus dem Refrain-Chor ausschneiden.
- „groß“ notfalls als „gross“ schreiben, „juchhe“ notfalls „juch-hee“. „bumm“ steht als Lautmalerei, Suno soll es kurz und weich singen. Den Refrain-Text in keiner Wiederholung verändern.
- „Laut“ in Strophe 2 darf nur fröhlich-laut sein, nicht schreiend: das Mastering bleibt bei −14 LUFS, Trommel mit weichem Anschlag.
- **Immer 2–4 Varianten erzeugen.** Hörliste: Text verständlich? Refrain in allen vier Vorkommen mit gleicher Melodie? Hook-Töne F# G A H erkennbar, steigt Zeile 1 zu „groß“? Kinderchor im Refrain da? Kein Wort verschluckt (besonders „bloß“, „Mitte“, „Schritt“)? Freie Takte im Mitmach-Teil frei? Schluss ruhig und nicht abgeschnitten? Keine Ähnlichkeit zu einem bekannten Lied?
- Suno Pro hat laut Stand 20 Downloads pro Monat: für dieses Lied zählen Gesamtmix, getrennte Spuren (Gesang/Instrumente) und eine Instrumental-/Karaoke-Fassung, ES und FR zusätzlich. Vorher Plan machen.
- **Fertigmachen:** getrennte Spuren laden, Gesang klar vorne, Endmischung `loudnorm=I=-14:TP=-1.5:LRA=11`. Zusätzlich Instrumental-/Karaoke-Fassung ablegen.
- Für ES/FR: die gewählte DE-Variante als Audio-Vorlage („Cover“ mit eigenem Text) nutzen, damit die Melodie über die Sprachen gleich bleibt. Ob das bei Suno ohne Verlust klappt, ist offen (Frage 6).
## Kurzfassung 40 s (Folge 1; Folge 2 und 3 nur Refrain)
Aus **derselben Suno-Erzeugung** geschnitten, kein eigener Durchgang nötig. Sie ersetzt in Folge 1 den Instrumental-Track `musik/folge01/lied.mp3` und die gesprochenen Zeilen `stimmen/folge01/<sprache>/lied-*.mp3`.
**Bestandteile:** Refrain 1 (Takt 3–8) + Strophe 1 (Takt 9–14) + Refrain 2 (Takt 15–20) = Takt 3 bis Ende Takt 20 = **0:04,6 bis 0:46,2 = 41,5 s**. Der Text entspricht genau dem Folge-1-Lied (Refrain, Strophe, Refrain).
| Marke | Takt | Zeit in der langen Fassung | Zeit in der Kurzfassung (t0 = 4,62 s) | Zeile (Texte-Schlüssel) |
| --- | --- | --- | --- | --- |
| Refrain 1, Zeile 1 | 3, Schlag 1 | 0:04,62 | 0,00 | `lied/r1` |
| Zeile 2 | 4, Schlag 3 | 0:08,08 | 3,46 | `lied/r2` |
| Zeile 3 | 6, Schlag 1 | 0:11,54 | 6,92 | `lied/r3` |
| Zeile 4 | 7, Schlag 3 | 0:15,00 | 10,38 | `lied/r4` |
| Strophe 1, Zeile 1 | 9, Schlag 1 | 0:18,46 | 13,85 | `lied/s1` |
| Zeile 2 | 10, Schlag 3 | 0:21,92 | 17,31 | `lied/s2` |
| Zeile 3 | 12, Schlag 1 | 0:25,38 | 20,77 | `lied/s3` |
| Zeile 4 | 13, Schlag 3 | 0:28,85 | 24,23 | `lied/s4` |
| Refrain 2, Zeile 1 | 15, Schlag 1 | 0:32,31 | 27,69 | `lied/w1` |
| Zeile 2 | 16, Schlag 3 | 0:35,77 | 31,15 | `lied/w2` |
| Zeile 3 | 18, Schlag 1 | 0:39,23 | 34,62 | `lied/w3` |
| Zeile 4 | 19, Schlag 3 | 0:42,69 | 38,08 | `lied/w4` |
| Ende der Zeile 4 | 20, Schlag 4 | 0:46,15 | 41,54 | |
**Schnittanweisung für den Cutter:**
1. In der gewählten Suno-Fassung zuerst die **echten** Taktlagen suchen: Suno driftet leicht. Beat-Raster am ersten Refrain-Einsatz („Ei-“ von „Einer“) anlegen und 104 BPM mit der Spur vergleichen. Weicht das Tempo ab, vorher mit `atempo` (ohne Tonhöhenänderung) auf 104 BPM bringen.
2. Beginn 0,10 s **vor** dem ersten „Ei-“ mit 0,10 s Einblenden. Ende 0,40 s **nach** Ende von Zeile 4 (Takt 20, Schlag 4) mit 0,40 s Ausblenden.
3. Für ein weiches Ende die letzten 2 Takte der **Outro** (Glockenspiel, D-Dur, Takt 62–63, 4,6 s) mit 0,3 s Überblendung an das Ende von Refrain 2 hängen. Gesamtlänge dann ca. 45 s; in Remotion kommen Vorlauf und Nachlauf je 1 s dazu.
4. Für Folge 2 und 3 (nur Refrain): Takt 3 bis Ende Takt 8 (0:04,6–0:18,5, 13,85 s) plus derselbe Ausklang.
Beispiel (nur Orientierung, nach Kontrolle der echten Taktlagen anpassen):
```text
ffmpeg -i lied-lang.wav -ss 4.52 -to 46.55 -af "afade=t=in:d=0.1,afade=t=out:st=41.6:d=0.4" kurz-folge01.wav
```
**Hinweis für Remotion** (Änderung nicht von mir vorgenommen): In `remotion/src/folge01/lied.tsx` (und `folge02/lied.tsx`, `folge03/lied.tsx`) gilt `TAKT = 19` Frames pro Schlag (ca. 95 BPM). Bei 104 BPM sind es 17,3 Frames. Die Zeilendauer in `plane('lied', …)` steht auf 3,2 s und 3,6 s; für die Kurzfassung 3,46 s je Zeile (`dauer: 3.46`). Die Zeilen `s1–s4` haben `wer: 'ERZ'`; sie werden jetzt gesungen. Untertitel-Texte in den JSON-Dateien bleiben unverändert (Schlüssel `lied/r1…w4`).
## Bildplan für Remotion
Ort durchgehend `garten_herbst` (Apfelbaum für Strophe 1, wie Folge 1). Pose-Namen aus `baukasten/posen.ts`. Für den Frühling/Sommer-Einsatz bei Bedarf `garten`, dann den Apfel an den Baum zeichnen.
| Teil / Zeile | Bild / Pose | Status |
| --- | --- | --- |
| Intro / Outro | Bilderbuch auf/zu, Noa winkt (`noa_C4_winken`) | vorhanden (`buch.tsx`, Pose) |
| Refrain (alle Zeilen) | drei nebeneinander: Pino klein links, Noa mittig, Lulu groß rechts, im Takt wippend (wie `folge01/lied.tsx`); Noa klatscht (`noa_A_klatschen`), bei „hin“ Arme hoch (`noa_A_arme-hoch`), Pino hüpft (`pino_A3_lachen`), Lulu nickt (`lulu_A3_lachen`). Zeile 3: kleiner Rahmen um Noa in der Mitte | vorhanden; Rahmen neu (einfach) |
| Strophe 1 | Lulu holt Apfel (`lulu_A_apfel`), Pino pflückt Blume (`pino_A_hinterbeine`, Blume aus `natur.tsx`) | vorhanden |
| Strophe 2, Zeile 1–2 | Noa mit Trommel, Notenzeichen groß, Lulu und Pino klatschen | Pose vorhanden (`noa_A_klatschen`), **Trommel neu zu bauen** (Kreis, Rand, 2 Stöcke) |
| Strophe 2, Zeile 3–4 | Pino huscht hinter dem Laubhaufen (Blätter wackeln leise), Lulu hält den Kopf zum Boden (`lulu_A_hals-unten`), Hand ans Ohr als Symbol | `Laubhaufen` vorhanden, Pose vorhanden |
| Strophe 3, Zeile 1–2 | Pino trippelt schnell (`pino_C1_gehen-schleife` schneller), Noa stampft schnell (Bewegung per Code) | vorhanden (Tempo per Code) |
| Strophe 3, Zeile 3–4 | Lulu geht langsam (`lulu_C1_gehen-schleife` langsamer), Staubwölkchen bei jedem Schritt | vorhanden + Wölkchen (einfach) |
| Strophe 4, Zeile 1–2 | Lulu streckt den Hals, ihr grüner Schal hängt lang (`lulu_A3_lachen`), langer Balken | Pose vorhanden, **Balken lang** neu (einfach) |
| Strophe 4, Zeile 3–4 | Pino duckt sich (`pino_C7_einrollen`), kurzer Balken, bei „juchhe“ springt er hoch (`pino_C3_freudensprung`) | vorhanden + Balken kurz |
| Mitmach-Teil | Noa zeigt in die Kamera (`noa_B_zeigen`), je Paar zwei **Gegensatz-Karten** (Bilderbuch-Karte mit zwei Symbolen); bei der Antwort leuchtet die richtige Karte auf: groß/klein (zwei Kreise), oben/unten (Pfeil), laut/leise (große/kleine Schallwellen), schnell/langsam (langer/kurzer Pfeil) | Noa vorhanden; **Gegensatz-Karten neu** (einfache Formen) |
| Gag | Lulu hockt (`lulu_B_liegt` oder `lulu_A_hals-unten`), Hals ringelt sich; Pino auf Zehenspitzen mit Stacheln hoch (`pino_A_hinterbeine`); beide auf einer Höhe, Noa kichert (`noa_A3_lachen`) | vorhanden |
| Schluss-Refrain | alle drei sitzen ruhig nebeneinander: Noa sitzt (`noa_B_sitzt`), Pino ruhig (`pino_ref_sitzend`), Lulu liegt (`lulu_B_liegt`), Abendlicht | vorhanden |
Neue Posen: keine. Neu zu bauen (einfache Formen): Trommel, Mitte-Rahmen, Gegensatz-Karten, Balken lang/kurz, Staubwölkchen. Higgsfield-Credits: 0. Karaoke-Text im Bild empfohlen, Farbe wechselt je Strophe. Die Pose-Namen habe ich aus den anderen Lieddateien und Folge 1 übernommen und nicht einzeln in `posen.ts` gegengeprüft.
## Hinweise
**An die Dolmetscher (ES/FR):** Silbenzahlen und Betonung wie in den Tabellen. Refrain-Zeilen: DE 7 / 7 / 8 / 9 Silben. Die vorhandenen Fassungen in Folge 1–3 haben ES 10 / 9 / 10 / 7, FR 9 / 9 / 9 / 9 (gesungen, stumme e mitgezählt). Das Raster (12 Achtel-Plätze je Zeile, Sechzehntel-Paare als Ausgleich) verträgt bis 9 Silben; **ES Zeile 1 und 3 (10 Silben) sind zu lang** und müssen für den Gesang gekürzt werden, z. B. „Uno pequeño, otra alta“ (9). Außerdem steht in der FR-Fassung die Mitte-Zeile („Noa au milieu de la bande“) an Stelle der Frage „na, wer bloß?“. Die Melodie braucht an Zeile 2 ein offenes Ende (Frage oder Aufzählung, die nicht abschließt). Prüfen, ob die FR-Zeile 2 dort offen gesungen werden kann, sonst Zeile 2 und 3 tauschen und den Reim anpassen. Ob die bereits gesprochenen Zeilen in Folge 1–3 für die gesungene Fassung geändert werden, entscheidet der Mensch (Frage 3). Neue Strophen: Reimpaare dürfen sich ändern, Bewegung, Gegensatzpaar und Lernziel bleiben. Gegensatzpaare ES: grande/pequeño, arriba/abajo, fuerte/suave, rápido/lento, largo/corto; FR: grand/petit, en haut/en bas, fort/doucement, vite/lentement, long/court. Lautmalerei „bumm“ neu wählen (ES „bum“, FR „boum“), die Trommel bleibt. Keine Wertung („zu klein“, „zu groß“) einführen.
**An den Cutter:** 1 Takt = 2,31 s, 1 Zeile = 3,46 s. Taktmarken der langen Fassung: Intro 0:00, Refrain 1 0:04,6, S1 0:18,5, Refrain 2 0:32,3, S2 0:46,2, S3 1:00,0, Refrain 3 1:13,8, S4 1:27,7, Mitmach 1:41,5, Gag 2:00,0, Schluss-Refrain 2:06,9, Outro 2:20,8, Ende 2:25,4. Freie Takte im Mitmach-Teil (Schlag 1–2 von Takt B jedes Paars, das sind Takt 46, 48, 50, 52): 1:43,9–1:45,0 / 1:48,5–1:49,6 / 1:53,1–1:54,2 / 1:57,7–1:58,8. Nach dem Hören gegen die echte Taktlage prüfen; nicht mit Sprache füllen. **Short 1** = Refrain 1 + Strophe 1 (0:04,6–0:32,3, 27,7 s), weil der Refrain allein nur 13,8 s lang ist. **Short 2** = Mitmach Paar 3 und 4 + Gag (1:50,8–2:06,9, 16 s). Kurzfassung für Folge 1–3: siehe Abschnitt oben. Mastering −14 LUFS; Karaoke-Text einblenden.
**Für Eltern (Beschreibung):** „Ihr Kind lernt Gegensätze kennen und benennen: groß und klein, oben und unten, laut und leise, schnell und langsam, lang und kurz, und zwar mit dem ganzen Körper. Die Botschaft: Jeder ist anders, und zusammen geht alles leichter. Spielidee für danach: ein Gegenteil-Spiel auf dem Weg. Sie sagen ‚groß‘, Ihr Kind macht sich ganz klein, bei ‚laut‘ flüstert es, bei ‚schnell‘ geht es langsam. Oder suchen Sie beim Spazierengehen etwas Langes und etwas Kurzes.“
## Offene Fragen
1. **Refrain-Länge:** Der Refrain allein ist 13,8 s lang (Regel: 20–30 s), weil Folge 1–3 dieses Format schon vorgeben. Short 1 nimmt deshalb Strophe 1 dazu (27,7 s). Reicht das, oder soll der Refrain im langen Lied um einen Klatsch-Takt verlängert werden? Dann passt die Kurzfassung nicht mehr in 40 s.
2. **Hook-Zeile mit 7 Silben** (Regel: höchstens 6). Wörtlich vorgegeben, deshalb nicht änderbar. Sie steht auf nur vier Tönen (F# G A H).
3. **ES/FR für die gesungene Fassung:** Die vorhandenen Zeilen in Folge 1–3 sind teils zu lang (ES 10 Silben), und die FR-Reihenfolge weicht ab. Wer entscheidet, ob die JSON-Texte (`es.json`, `fr.json`) dafür gekürzt werden? Sie laufen im Untertitel und in den gesprochenen Zeilen. Ich habe nichts geändert.
4. **Kinderpsychologie:** (a) Ist „Kurz, ganz kurz ist Pinos Zeh … Duck dich klein“ in Strophe 4 in Ordnung, oder stellt es Pino zu sehr als den Kleinen hin? Kürzungsoption: Strophe 4 streichen. (b) Reicht es, dass „Klein!“ im Mitmach-Teil nur eine Feststellung ist? (c) Ist Pino als der Leise in Strophe 2 gut gewählt, oder soll auch Pino einmal laut sein dürfen?
5. **Termin:** Folge 1 soll am 08.11. erscheinen, die Kurzfassung braucht dafür das fertige Suno-Lied (Suno Pro ist laut `wissen/stand-und-entscheidungen.md` noch nicht abgeschlossen). Das Lied müsste also vor dem Schnitt von Folge 1 erzeugt werden. Ist das bis dahin zu schaffen? Wenn nicht, bleibt in Folge 1 der bisherige Instrumental-Track mit gesprochenem Refrain.
6. **Sprachen:** Bleibt die Melodie beim ES/FR-Erzeugen gleich? Suno-Audio-Vorlage testen, sonst pro Sprache die Referenz-Variante hörbar vergleichen.
7. **Trommel als neues Teil** in Strophe 2: einverstanden, oder lieber nur klatschen? Dann braucht Zeile 1 ein neues Reimwort.
8. Karaoke-Text im Bild: ja, empfohlen (plan.md, Frage 4).
9. Melodie-Ähnlichkeit: nach dem Suno-Hören prüfen (siehe oben).

View file

@ -0,0 +1,86 @@
# Lied 3 ES: „Uno chico y una grande“
Status: Entwurf dolmetscher-es, 03.11.2026. Strophe 4 gestrichen (wie DE). Nicht muttersprachlich gegengelesen.
Reihen-Ansage: „Este es el libro de canciones de Pino. Aquí Pino siempre canta con nosotros.“
## Suno-Text
```text
[Intro]
(glockenspiel plays a simple four-note hook, two bars)
[Chorus – children's choir joins]
Uno chico y una grande,
¿y en el medio quién será?
¡Noa en el medio, ahí está!
¡Juntos todo lo logramos!
[Verse 1]
Arriba cuelga una manzana,
Lulu la alcanza con ganas.
Abajo hay una flor,
Pino la toma con amor.
[Chorus – children's choir joins]
Uno chico y una grande,
¿y en el medio quién será?
¡Noa en el medio, ahí está!
¡Juntos todo lo logramos!
[Verse 2]
Fuerte toca Noa: ¡bum!
Aplaude fuerte: ¡bum, bum!
Pino susurra bajito,
Lulu escucha: ¡qué bonito!
[Verse 3]
Pino corre muy deprisa,
pisa fuerte, ¡con sonrisa!
Lulu va muy despacio,
pisa tú, ¡paso a paso!
[Chorus – children's choir joins]
Uno chico y una grande,
¿y en el medio quién será?
¡Noa en el medio, ahí está!
¡Juntos todo lo logramos!
[Break: call and response]
Pino es chico, y Lulu es …
...
(¡Grande!)
La manzana está arriba, la flor …
...
(¡Abajo!)
Noa toca fuerte, y Pino …
...
(¡Bajito!)
Pino va rápido, y Lulu …
...
(¡Despacio!)
[Instrumental break]
(three bars, soft groove, no singing)
[Chorus – softer, children's choir, slowing down at the end]
Uno chico y una grande,
¿y en el medio quién será?
¡Noa en el medio, ahí está!
¡Juntos todo lo logramos!
[Outro]
(glockenspiel, gentle ending, two bars)
```
## Gesprochen (ElevenLabs)
- Intro NOA: „¡Hola, soy Noa! ¡Ellos son Pino y Lulu!“
- Gag: *Lulu se encoge, el cuello se enrosca. Pino se pone de puntillas, las púas se mueven.* LULU: „¡Me hago pequeña!“ PINO: „¡Yo me hago grande!“ NOA *(se ríe)*: „¡Nariz con nariz! ¡Ahora miden lo mismo!“
- Outro Erzähler: „Cada uno es diferente. Juntos, todo se puede.“
## Kritische Stellen
- „Uno chico y una grande“ ersetzt „Uno pequeño y otra alta“; neutral wäre „uno grande“. Folgen 1–3 ggf. angleichen.
- „chico“ kann in Spanien „Junge“ heißen; Alternative „pequeño“.
- Strophe 2: „susurra“ für Igelfüße nicht ideal; „bum“ evtl. „pum“.

View file

@ -0,0 +1,85 @@
# Lied 3 FR: « Un tout petit, un très grand »
Status: Entwurf dolmetscher-fr, 03.11.2026. Strophe 4 gestrichen. Nicht muttersprachlich gegengelesen.
Reihen-Ansage: « Voici le livre de chansons de Pino. Ici, Pino chante toujours avec nous. »
## Suno-Text
```text
[Intro]
(glockenspiel plays a simple four-note hook, two bars)
[Chorus – children's choir joins]
Un tout petit, un très grand,
et au milieu, qui, dis-moi ?
Noa se tient entre les deux,
ensemble, on fait de notre mieux !
[Verse 1]
Une pomme, tout là-haut,
Lulu l'attrape, bravo !
Une fleur bleue, tout en bas,
Pino la cueille, hop-là !
[Chorus – children's choir joins]
Un tout petit, un très grand,
et au milieu, qui, dis-moi ?
Noa se tient entre les deux,
ensemble, on fait de notre mieux !
[Verse 2]
Le tambour de Noa : boum !
Frappe fort dans tes mains : boum !
Pino glisse doucement,
Lulu l'entend, c'est charmant.
[Verse 3]
Vite, Pino va et vient,
tape des pieds, tout va bien.
Lentement, Lulu s'en va,
tape, tape, pas à pas.
[Chorus – children's choir joins]
Un tout petit, un très grand,
et au milieu, qui, dis-moi ?
Noa se tient entre les deux,
ensemble, on fait de notre mieux !
[Break: call and response]
Pino est petit, Lulu est …
...
(Grande !)
La pomme est en haut, et la fleur …
...
(En bas !)
Noa tape fort, et Pino …
...
(Doucement !)
Pino va vite, Lulu va …
...
(Lentement !)
[Instrumental break]
(three bars, soft groove, no singing)
[Chorus – softer, children's choir, slowing down at the end]
Un tout petit, un très grand,
et au milieu, qui, dis-moi ?
Noa se tient entre les deux,
ensemble, on fait de notre mieux !
[Outro]
(glockenspiel, gentle ending, two bars)
```
## Gesprochen (ElevenLabs)
- NOA: « Coucou, je suis Noa – et voici Pino et Lulu ! »
- LULU *(s'accroupit)*: « Je me fais toute petite ! » PINO *(sur la pointe des pieds)*: « Je me fais tout grand ! » NOA *(rit)*: « Nez à nez – vous voilà de la même taille ! »
- ERZ Outro: « Chacun est différent. Ensemble, on y arrive. »
## Kritische Stellen
- Weicht von `remotion/src/folge01/texte/fr.json` ab („Un tout petit, une très grande“); falls Lied die gesprochenen Zeilen ersetzt, fr.json `lied/r1–r4`, `w1–w4`, `s1–s4` anpassen.
- „qui, dis-moi ?“ reimt nicht (Alternative „qui, vraiment ?“); „c'est charmant“ eher erwachsen.

View file

@ -0,0 +1,280 @@
# Lied 4: „Wer hat den längsten Hals?“ (Körperteile antippen, Tempo steigert sich)
Entwurf vom 03.11.2026 (Komponist). **Überarbeitet 03.11. nach Team-Check:** zwei neue Strophen (Beine, Arme; Wunsch Nutzerin + Eltern-Mehrwert), Turbo endet langsam (96 → 104 → 88 BPM, Kinderpsychologie), Hinweis „auch im Sitzen“, Hals nur sanft antippen. Länge jetzt ca. 2:32. Intro-Ansage der Reihe: „Das ist Pinos Liederbuch. Hier singt Pino immer mit.“ Text und Melodie sind neu geschrieben. Web-Kurzcheck (03.11.2026): kein Lied mit diesem Titel oder diesen Zeilen gefunden (Treffer nur zu „Körperteil Blues“ der Lichterkinder, anderer Text und andere Idee, und zu „Head, Shoulders, Knees and Toes“). Bewusst vermieden: die Wörter Kopf, Schulter, Knie, die feste Reihenfolge von oben nach unten und die „Wort weglassen“-Spielregel. Die Melodie lässt sich im Web nicht prüfen, sie bewegt sich in Dur-Stufen mit Wiederholungstönen (Hook „tipp, tipp, tipp“) und hat nichts mit der bekannten Melodie gemeinsam.
## Steckbrief
| | |
| --- | --- |
| Titel des Liedes DE | Wer hat den längsten Hals? |
| Vorschlag ES / FR | „¿Quién tiene el cuello más largo?“ / „Qui a le cou le plus long ?“ (Dolmetscher dichten neu) |
| Lernziel | Körperteile benennen und am eigenen Körper zeigen: Hals, Nase, Bauch, Ohren, Hände, Füße, Zeh |
| Alter | 3–6 Jahre (3: antippen und nachsagen, 5–6: schnelles Tippen im Tempo) |
| Länge | ca. 2:12 Min. (53 Takte) |
| Tempo / Takt / Tonart | 96 BPM, 4/4 (1 Takt = 2,5 s), F-Dur. **Turbo-Teil:** 96 → 102 → 108 BPM, danach zurück auf 96 |
| Tonumfang | C4–A4 (Sexte) |
| Einsatz | Mittwochs-Lied (Lied 4 der Reihe „Pinos Liederbuch“), eigenständiges Einzelvideo, 2 Shorts |
### Titel, Thumbnail, Shorts (je Sprache)
| | DE | ES | FR |
| --- | --- | --- | --- |
| YouTube-Titel | Körperteile lernen für Kinder – Mitmachlied zum Antippen \| Pinos kleine Welt | Aprender las partes del cuerpo – canción infantil para tocar y cantar \| El pequeño mundo de Pino | Apprendre les parties du corps – chanson pour enfants à toucher et chanter \| Le petit monde de Pino |
| Thumbnail-Text (max. 3 Wörter) | Tipp, tipp, tipp! | ¡Toca, toca, toca! | Tape, tape, tape ! |
| Short 1 (Refrain) | Wer hat den längsten Hals? | ¿Quién tiene el cuello más largo? | Qui a le cou le plus long ? |
| Short 2 (Turbo + Gag) | Wie schnell kannst du tippen? | ¿Cuántas veces puedes tocar? / ¿A qué velocidad? | Tu tapes combien vite ? |
**Thumbnail-Idee:** Lulu streckt den Hals bis über den oberen Bildrand (Pose `lulu_B_kopf-profil` oder `lulu_A_hals-unten` gespiegelt), Pino unten tippt sich an die Nase (`pino_A4_staunen`), Schrift „Tipp, tipp, tipp!“ mit drei bunten Punkten.
## Idee
Lulu fragt (oder Pino): „Wer hat den längsten Hals?“ Alle strecken sich und rufen „Lulu!“. Dann tippt jeder auf seinen eigenen Körper: Ohren, Hände, Füße in den Strophen. Im Turbo-Teil kommen Nase, Bauch, Hals, Ohren, Hände, Füße und Zeh in einem kurzen Vierzeiler, der dreimal gesungen wird, jedes Mal schneller (96, 102, 108 BPM). Danach pustet alle „Puh!“, und der Gag: Lulu sucht ihre Füße, sie sind sehr weit weg („Ganz da unten, Lulu!“). Kein Vergleich wertet: jede Figur hat etwas Besonderes, Lulu den Hals, Pino die Nase (kommt im Bild), Noa Hände und Füße.
Einzelvideo: Pino sagt in den ersten zwei Takten „Hallo, ich bin Pino!“, mehr Vorwissen braucht es nicht.
**Wie das Tempo steigt:** Die Steigerung steckt (1) im Tempo des Turbo-Teils, 96 → 102 → 108 (alles innerhalb der 88–108 BPM der Reihe) und (2) in der Wiederholung desselben Vierzeilers, den die Kinder nach dem ersten Mal schon kennen. Refrain und Strophen bleiben immer bei 96. Plan A: Suno erzeugt das Lied in einem Durchgang. Plan B (wahrscheinlicher): Suno hält das Tempo nicht stufenweise. Dann erzeugt Suno den Turbo-Teil einmal bei 96 BPM, der Cutter dehnt die getrennten Spuren per ffmpeg (`atempo=1.0625` bzw. `1.125`, ohne Tonhöhenänderung) und setzt drei Durchgänge zusammen. Siehe Hinweise an den Cutter.
## Form
| Teil | Takte | Zeit | Inhalt |
| --- | --- | --- | --- |
| Intro | 2 | 0:00–0:05 | Glockenspiel spielt die Hook-Töne. Pino (gesprochen): „Hallo, ich bin Pino!“ |
| Refrain | 8 | 0:05–0:25 | alle, Kinderchor dabei; Takt 2 enthält den Rufplatz „Lulu!“ |
| Strophe 1: Ohren | 4 | 0:25–0:35 | Frage – freier Takt – Antwort – Chor-Wiederholung |
| Strophe 2: Hände | 4 | 0:35–0:45 | gleiches Muster |
| Refrain | 8 | 0:45–1:05 | |
| Turbo, Durchgang 1 (96 BPM) | 4 | 1:05–1:15 | Vierzeiler mit sieben Körperteilen |
| Turbo, Durchgang 2 (102 BPM) | 4 | 1:15–1:24,4 | gleicher Text, schneller |
| Turbo, Durchgang 3 (108 BPM) | 4 | 1:24,4–1:33,3 | gleicher Text, noch schneller |
| Puh-Takt | 1 | 1:33,3–1:35,8 | alle atmen aus, Tempo zurück auf 96 |
| Gag | 3 | 1:35,8–1:43,3 | Lulu sucht ihre Füße |
| Schluss-Refrain | 8 | 1:43,3–2:04,3 | leiser, deutlich langsamer (Ritardando, ca. 21 s) |
| Outro | 3 | 2:04,3–2:11,8 | Glockenspiel, Buch geht zu |
Der Refrain beginnt nach 5 s. Er kommt dreimal (0:05, 0:45, 1:43), immer gleich.
## Liedtext mit Bewegungen
Silben, Betonung: X = betont, x = unbetont.
**Refrain** *(alle; Takt 2 enthält den Rufplatz)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Wer hat den längsten Hals? *(Rufplatz: „Lulu!“)* | Arme und Hals ganz lang strecken, auf Zehenspitzen | 6 | x x x X x X |
| Lulu, Lulu, tipp, tipp, tipp! | mit einem Finger **sanft** dreimal an den eigenen Hals tippen | 7 | X x X x X X X |
| Das ist mein Körper, schau mal an, | Hände streichen von oben nach unten über den Körper | 8 | x x x X x X x X |
| tipp, tipp, tipp, wer tippen kann! | abwechselnd mit beiden Händen auf die Oberschenkel tippen | 7 | X X X x X x X |
Der Rufplatz: Takt 2 hat nur die Töne von „sten Hals“ (Schlag 1–2), Schlag 3–4 sind frei. Kinder rufen „Lu-lu!“. In der Suno-Fassung ruft beim **ersten** Refrain ein Kind oder der Kinderchor „Lulu!“ als Vorbild, beim zweiten und dritten bleibt die Stelle leer (Spuren im Schnitt stumm schalten).
Selbsttest: Refrain im Tempo gesprochen, 2 Sekunden je Zeile, nach der Frage ist eine Pause zum Rufen, kein Wort stolpert.
**Strophen** *(Muster fest, es wechselt nur das Körperteil)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| *Takt 1:* Wo sind meine Ohren? | mit der Hand die Ohren suchen | 6 | x X x x X x |
| *Takt 2: freier Takt* (Kinder fassen ans Ohr, rufen „Hier!“ oder „Ohren!“) | | – | – |
| *Takt 3:* Tipp, tipp auf die Ohren! | zweimal an die Ohren tippen | 6 | X X x x X x |
| *Takt 4:* Tipp, tipp auf die Ohren! *(Kinderchor wiederholt)* | noch einmal tippen | 6 | X X x x X x |
| Strophe | Körperteil | Bewegung |
| --- | --- | --- |
| 1 | Ohren | an die Ohren fassen und tippen |
| 2 | Hände | die Hände in die Luft strecken, dann aneinander tippen |
| 3 (neu) | Beine | mit beiden Händen auf die Oberschenkel tippen |
| 4 (neu) | Arme | mit der einen Hand auf den anderen Arm tippen, dann wechseln |
Strophe 3 und 4 stehen nach dem zweiten Refrain, direkt vor dem Turbo. Nicht auf die Augen tippen (Eltern-Mehrwert).
**Turbo-Teil** *(derselbe Vierzeiler dreimal: schnell, schneller, dann langsam; 1 Zeile = 1 Takt)*
Vor dem Turbo spricht der Erzähler (ElevenLabs): „Du kannst auch im Sitzen mitmachen.“ Tempo: Durchgang 1 = 96, Durchgang 2 = 104, Durchgang 3 = **88 BPM** (langsam, zum Runterkommen). Im dritten Durchgang heißt Zeile 4 „langsam, langsam, wie im Schnee“ (Hände sinken lassen).
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Tipp die Nase, tipp den Bauch, | Nase, dann Bauch antippen | 7 | X x X x X x X |
| Hals und Ohren, Hände auch! | der Reihe nach antippen | 7 | X x X x X x X |
| Tipp die Füße, tipp den Zeh, | nach unten beugen, Fuß, dann Zeh antippen | 7 | X x X x X x X |
| schneller, schneller – juchhe! | nach oben strecken, Hände hoch | 6 | X x X x X x |
**Puh-Takt und Gag** *(gesprochen, ElevenLabs, über leisem Groove)*
> ALLE *(Seufzer, „Puh!“)*: Der Puh-Takt ist ein ganzer Takt Pause mit Atemgeräusch.
>
> LULU *(schaut suchend an sich herunter)*: „Wo sind meine Füße?“
>
> PINO: „Ganz da unten, Lulu!“
>
> LULU *(beugt den langen Hals)*: „Hallo, Füße!“
**Schluss-Refrain** *(leiser, Ritardando, bei „wer tippen kann“ ganz langsam)*: Text wie Refrain, unverändert.
## Melodie-Skizze
Idee: Die Frage „Wer hat den längsten Hals?“ steigt bei „längsten“ auf den höchsten Ton A, das Wort wird dadurch hörbar „lang“. Der Hook „tipp, tipp, tipp“ steht auf Wiederholungstönen (F, G), die Tipp-Bewegung klingt wie ein Tupfen.
**Refrain** (Akkorde: `| F | F | F | C7 | Dm | Gm C7 | F | C7 F |`, alle Noten Viertel)
```
Wer hat den längsten Hals? F F G A | G F – – (Schlag 3–4 in Takt 2 frei: Ruf „Lulu!“)
Lu-lu, Lu-lu, tipp, tipp, tipp! A F A F | G G G –
Das ist mein Kör-per, schau mal an, C C D E | F E D C
tipp, tipp, tipp, wer tip-pen kann! F F F G | A G F –
```
**Strophe** (Akkorde: `| F | F | F | C7 F |`, Takt 1 und 3 in Achteln)
```
Takt 1 Wo sind mei-ne Oh-ren? C D E F G F (Achtel) + Viertelpause
Takt 2 (frei, nur Gitarre)
Takt 3 Tipp, tipp auf die Oh-ren! F F G A G G (Achtel) + Viertelpause
Takt 4 Tipp, tipp auf die Oh-ren! F F G A G F (Achtel) + Viertelpause
```
**Turbo** (Akkorde je Durchgang: `| F | C7 | Bb | F C7→F |`, Achtel plus Achtelpause, 96 / 102 / 108 BPM)
```
Tipp die Na-se, tipp den Bauch, C D E F E D C –
Hals und Oh-ren, Hän-de auch! D E F G F E D –
Tipp die Fü-ße, tipp den Zeh, F G A G F E D –
schnel-ler, schnel-ler – ju-chhe! A G A G F F – –
```
**Umfang:** C4–A4. Kein Sprung größer als eine Terz.
## Suno-Paket
**Stilangabe** (ca. 193 Zeichen, vor dem Einfügen nachzählen)
```text
Fun children's folk-pop singalong, clear friendly female voice, small children's choir joins on the chorus, glockenspiel, ukulele, acoustic guitar, soft claps, 96 bpm, F major, very clear words
```
**Exclude styles**
```text
electronic, autotune, heavy drums, rap, rock, dark, sad, synth pads, dubstep, trap, screaming
```
**Text für Suno**
```text
[Intro]
(glockenspiel plays a simple three-note hook)
[Chorus]
Wer hat den längsten Hals?
(Lulu!)
Lulu, Lulu, tipp, tipp, tipp!
Das ist mein Körper, schau mal an,
tipp, tipp, tipp, wer tippen kann!
[Verse 1]
Wo sind meine Ohren?
...
Tipp, tipp auf die Ohren!
Tipp, tipp auf die Ohren!
[Verse 2]
Wo sind meine Hände?
...
Tipp, tipp auf die Hände!
Tipp, tipp auf die Hände!
[Chorus]
Wer hat den längsten Hals?
...
Lulu, Lulu, tipp, tipp, tipp!
Das ist mein Körper, schau mal an,
tipp, tipp, tipp, wer tippen kann!
[Verse 3]
Wo sind meine Beine?
...
Tipp, tipp auf die Beine!
Tipp, tipp auf die Beine!
[Verse 4]
Wo sind meine Arme?
...
Tipp, tipp auf die Arme!
Tipp, tipp auf die Arme!
[Bridge, speeding up]
Tipp die Nase, tipp den Bauch,
Hals und Ohren, Hände auch!
Tipp die Füße, tipp den Zeh,
schneller, schneller – juchhe!
[Bridge, faster]
Tipp die Nase, tipp den Bauch,
Hals und Ohren, Hände auch!
Tipp die Füße, tipp den Zeh,
schneller, schneller – juchhe!
[Bridge, slow and calm]
Tipp die Nase, tipp den Bauch,
Hals und Ohren, Hände auch!
Tipp die Füße, tipp den Zeh,
langsam, langsam, wie im Schnee.
[Break]
(a short pause, everyone breathes out)
[Instrumental break]
[Chorus, softer, slowing down]
Wer hat den längsten Hals?
...
Lulu, Lulu, tipp, tipp, tipp!
Das ist mein Körper, schau mal an,
tipp, tipp, tipp, wer tippen kann!
[Outro]
(glockenspiel, gentle ending)
```
Hinweise zum Erzeugen:
- Das Tempo-Tag in `[Verse 3, speeding up]` kann Suno ignorieren. Dann gilt Plan B (siehe oben): den Turbo-Teil in einer Fassung bei 96 BPM erzeugen und den Cutter dehnen lassen. Alternativ die drei Turbo-Durchgänge einzeln erzeugen lassen.
- `(Lulu!)` nur im ersten Refrain stehen lassen (Kinderchor als Vorbild), in den anderen Refrains `...`.
- Gesprochene Teile (Pino-Begrüßung, „Puh!“, Gag-Dialog) kommen von ElevenLabs.
- 2–4 Varianten erzeugen. **Hörliste:** Text verständlich? Refrain in allen drei Vorkommen gleich? Kein Wort verschluckt (besonders „Hals“, „Zeh“)? Kinderchor im Refrain da? Turbo klingt sauber, ohne dass die Stimme hetzt? Schluss ruhig und nicht abgeschnitten?
- Fertigmachen: getrennte Spuren laden, Gesang vorn, Endmischung `loudnorm=I=-14:TP=-1.5:LRA=11`. Karaoke-/Instrumental-Fassung ablegen.
## Bildplan für Remotion
Ort durchgehend `garten` (ganzjährig). Pose-Namen aus `baukasten/posen.ts`.
| Teil / Zeile | Bild / Pose | Status |
| --- | --- | --- |
| Intro / Outro | Bilderbuch auf/zu, Pino winkt (`pino_A3_lachen`) | vorhanden (`buch.tsx`, Pose) |
| Refrain, Zeile 1 | Lulu streckt den Hals, Noa und Pino schauen hinauf (`noa_A_arme-hoch`, `pino_B_blick-nach-oben`); beim Rufplatz erscheint „Lulu!“ als Schriftzug | Posen vorhanden, Schriftzug neu (einfach) |
| Refrain, Zeile 2 | Lulu nickt (`lulu_A3_lachen`), kleine Tipp-Punkte poppen am Hals auf | Pose vorhanden, **Tipp-Punkte neu zu bauen** (Kreis, der pulsiert) |
| Refrain, Zeile 3 | Noa zeigt (`noa_B_zeigen`), Pino hüpft (`pino_C3_freudensprung`) | vorhanden |
| Refrain, Zeile 4 | Noa klatscht/tippt (`noa_A_klatschen`), Tipp-Punkte auf den Knien | vorhanden + Tipp-Punkte |
| Strophen | Ohren: Pino und Lulu im Profil (`lulu_B_kopf-profil`, `pino_A5_blick-links`), Tipp-Punkt am Ohr; Hände: Noa mit Armen hoch (`noa_A_arme-hoch`) | Posen vorhanden |
| Turbo | je Zeile Tipp-Punkt auf dem genannten Körperteil (Nase: Pino, Bauch: Noa, Hals/Ohren: Lulu, Hände/Füße/Zeh: Noa); Noa hockt bei „Füße“ (`noa_B_hocken`); kleine Tempo-Leiste (3 Stufen) am Bildrand wird mit jedem Durchgang voller | Posen vorhanden, **Tempo-Leiste neu zu bauen** (drei Balken) |
| Puh-Takt | Noa und Pino atmen aus, kleine Wölkchen (`noa_A2_augen-halb`, `pino_A2_augen-halb`) | vorhanden |
| Gag | Lulu schaut an sich herunter, beugt den Hals (`lulu_A_hals-unten`, `lulu_C9_hals-runter`), Pino zeigt nach unten (`pino_A5_blick-links`) | vorhanden |
| Schluss-Refrain | alle drei sitzen ruhig, Noa sitzt (`noa_B_sitzt`), Pino ruhig (`pino_ref_sitzend`), Lulu liegt (`lulu_B_liegt`) | vorhanden |
Neue Posen: keine. Neu zu bauen (einfache Formen): Tipp-Punkte, Tempo-Leiste, Schriftzug „Lulu!“. Higgsfield-Credits: 0. Karaoke-Text im Bild empfohlen.
## Hinweise
**An die Dolmetscher (ES/FR):** Silbenzahlen und Betonung oben einhalten. Hook „tipp, tipp, tipp“ braucht ein kurzes Tipp-Wort (ES „toca, toca, toca“, FR „tape, tape, tape“). Der Rufplatz „Lulu!“ bleibt, die Frage nach dem längsten Hals bleibt als Titelzeile (ES „cuello“ = 2 Silben, FR „cou“ = 1: Silbenzahl anpassen). Im Turbo-Vierzeiler stehen die Körperteile in dieser Reihenfolge: Nase, Bauch, Hals, Ohren, Hände, Füße, Zeh; die Reihenfolge darf sich ändern, wenn die Bewegung (nach unten) bleibt und Reim und Betonung auf dem Zeilenende passen. Bei den Strophen wechselt nur das Körperteil (Ohren, Hände). Plural nutzen, damit der Artikel für alle Wörter gleich bleibt. Kein Wort für „Kopf“, „Schulter“, „Knie“ in die Reihe nehmen.
**An den Cutter:** 1 Takt = 2,5 s bei 96 BPM. Taktmarken: Intro 0:00, Refrain 0:05, S1 0:25, S2 0:35, Refrain 0:45, Turbo 1:05, Turbo 2 1:15 (102 BPM), Turbo 3 1:24,4 (108 BPM), Puh 1:33,3, Gag 1:35,8, Schluss-Refrain 1:43,3, Outro 2:04,3, Ende 2:11,8. Bei Plan B: Turbo-Durchgang 1 bleibt bei 96 BPM, Durchgang 2 mit `atempo=1.0625`, Durchgang 3 mit `atempo=1.125` (Gesang und Instrumente gleich dehnen, danach Taktgitter prüfen). Freie Takte (Rufplatz im Refrain, 2. Takt jeder Strophe) nicht mit Sprache füllen. **Short 1** = Refrain + Strophe 1 (0:05–0:35, 30 s). **Short 2** = Turbo + Puh + Gag (1:05–1:43, 38 s).
**Für Eltern (Beschreibung):** „Ihr Kind lernt Körperteile zu benennen und am eigenen Körper zu zeigen: Hals, Nase, Bauch, Ohren, Hände, Füße und Zeh. Im Turbo-Teil übt es außerdem, im Takt zu bleiben, auch wenn es schneller wird. Spielidee für danach: Beim Anziehen oder Baden ‚Wo ist dein Ohr?‘ fragen und gemeinsam antippen.“
## Offene Fragen
1. **Reim:** Zeile 1 und 2 des Refrains sind Frage und Antwort und reimen sich nicht (Hals / tipp, tipp, tipp). Zeile 3 und 4 reimen (an / kann), im Turbo-Teil reimen Bauch / auch und Zeh / juchhe. Ist ein Frage-Antwort-Paar statt Reim für Kinderpsychologie und Dolmetscher in Ordnung?
2. **Tempo-Steigerung:** Plan A (Suno in einem Durchgang) oder Plan B (Cutter dehnt Spuren)? Erst Test mit Suno. Bei Plan B klingt die gedehnte Gesangsspur ab +12,5 % leicht metallisch, dann Turbo-Durchgänge einzeln erzeugen.
3. Kinderpsychologie: Steigerung bis 108 BPM für 3-Jährige zu schnell? Vorschlag als Fallback: 96 → 100 → 104.
4. Vergleich „längster Hals“: Das Lied wertet nicht, lobt aber Lulus Hals. Soll Pino im Bild als Gegenstück ausdrücklich etwas Eigenes bekommen (z. B. kleine Nase, kommt in Short 2)?
5. Reihenfolge der Körperteile im Turbo-Vierzeiler ist nicht „von oben nach unten“. Absicht: weicht von bekannten Spielen ab. Dolmetscher sollen das nicht angleichen.
6. Karaoke-Text im Bild ja oder nein (siehe Plan, Frage 4).

View file

@ -0,0 +1,96 @@
# Lied 4 ES: „¿Quién tiene el cuello más largo?“
Status: Entwurf dolmetscher-es, 03.11.2026. Nicht muttersprachlich gegengelesen.
Reihen-Ansage: „Este es el libro de canciones de Pino. Aquí Pino siempre canta con nosotros.“
## Suno-Text
```text
[Intro]
(glockenspiel plays a simple three-note hook)
[Chorus]
¿Quién tiene el cuello más largo?
(¡Lulu!)
Lulu, Lulu, ¡toc, toc, toc!
Este es mi cuerpo: ¡a tocar!
Toc, toc, toc, ¡y a jugar!
[Verse 1]
¿Dónde están mis orejas?
...
¡Toc, toc, mis orejas!
¡Toc, toc, mis orejas!
[Verse 2]
¿Dónde están mis manos?
...
¡Toc, toc, mis manos!
¡Toc, toc, mis manos!
[Chorus]
¿Quién tiene el cuello más largo?
...
Lulu, Lulu, ¡toc, toc, toc!
Este es mi cuerpo: ¡a tocar!
Toc, toc, toc, ¡y a jugar!
[Verse 3]
¿Dónde están mis piernas?
...
¡Toc, toc, mis piernas!
¡Toc, toc, mis piernas!
[Verse 4]
¿Dónde están mis brazos?
...
¡Toc, toc, mis brazos!
¡Toc, toc, mis brazos!
[Bridge, speeding up]
Nariz y barriga: ¡toc, toc!
Cuello, orejas, manos: ¡toc!
Pies y deditos: ¡toc, toc!
¡Más rápido, más! ¡Yupi!
[Bridge, faster]
Nariz y barriga: ¡toc, toc!
Cuello, orejas, manos: ¡toc!
Pies y deditos: ¡toc, toc!
¡Más rápido, más! ¡Yupi!
[Bridge, slow and calm]
Nariz y barriga: ¡toc, toc!
Cuello, orejas, manos: ¡toc!
Pies y deditos: ¡toc, toc!
Despacio, como la nieve.
[Break]
(a short pause, everyone breathes out)
[Instrumental break]
[Chorus, softer, slowing down]
¿Quién tiene el cuello más largo?
...
Lulu, Lulu, ¡toc, toc, toc!
Este es mi cuerpo: ¡a tocar!
Toc, toc, toc, ¡y a jugar!
[Outro]
(glockenspiel, gentle ending)
```
## Gesprochen (ElevenLabs)
- PINO: „¡Hola, soy Pino!“
- Erzähler vor dem Turbo: „También puedes jugar sentado o sentada.“
- Puh-Takt ALLE: „¡Uf!“
- Gag: LULU *(se mira hacia abajo)*: „¿Dónde están mis pies?“ PINO: „¡Allá abajo, Lulu!“ LULU *(estira el cuello)*: „¡Hola, pies!“
## Kritische Stellen
- Thumbnail-Text ES: „¡Toc, toc, toc!“ statt „¡Toca, toca, toca!“.
- Titelzeile 8 statt 6 Silben; „orejas“-Zeile 1 Silbe länger.
- „Yupi“ unsicher, Alternative „¡Hurra!“.

View file

@ -0,0 +1,96 @@
# Lied 4 FR: « Qui a le cou le plus long ? »
Status: Entwurf dolmetscher-fr, 03.11.2026. Nicht muttersprachlich gegengelesen.
Reihen-Ansage: « Voici le livre de chansons de Pino. Ici, Pino chante toujours avec nous. »
## Suno-Text
```text
[Intro]
(glockenspiel plays a simple three-note hook)
[Chorus]
Qui a le plus long cou ?
(Lulu !)
Lulu, Lulu, toc, toc, toc !
Voilà mon corps, regarde-moi,
toc, toc, toc, vas-y, à toi !
[Verse 1]
Où sont donc mes oreilles ?
...
Toc, toc sur mes oreilles !
Toc, toc sur mes oreilles !
[Verse 2]
Où sont donc mes deux mains ?
...
Toc, toc sur mes deux mains !
Toc, toc sur mes deux mains !
[Chorus]
Qui a le plus long cou ?
...
Lulu, Lulu, toc, toc, toc !
Voilà mon corps, regarde-moi,
toc, toc, toc, vas-y, à toi !
[Verse 3]
Où sont donc mes deux jambes ?
...
Toc, toc sur mes deux jambes !
Toc, toc sur mes deux jambes !
[Verse 4]
Où sont donc mes deux bras ?
...
Toc, toc sur mes deux bras !
Toc, toc sur mes deux bras !
[Bridge, speeding up]
Nez, ventre, cou – toc, toc, toc !
Oreilles, mains – toc, toc, toc !
Les pieds, l'orteil – toc, toc, toc !
Vite, vite – youpi !
[Bridge, faster]
Nez, ventre, cou – toc, toc, toc !
Oreilles, mains – toc, toc, toc !
Les pieds, l'orteil – toc, toc, toc !
Vite, vite – youpi !
[Bridge, slow and calm]
Nez, ventre, cou – toc, toc, toc !
Oreilles, mains – toc, toc, toc !
Les pieds, l'orteil – toc, toc, toc !
Tout doux, sans se presser.
[Break]
(a short pause, everyone breathes out)
[Instrumental break]
[Chorus, softer, slowing down]
Qui a le plus long cou ?
...
Lulu, Lulu, toc, toc, toc !
Voilà mon corps, regarde-moi,
toc, toc, toc, vas-y, à toi !
[Outro]
(glockenspiel, gentle ending)
```
## Gesprochen (ElevenLabs)
- PINO: « Coucou, je suis Pino ! »
- ERZ vor dem Turbo: « Tu peux aussi le faire sans te lever. »
- ALLE: « Ouf ! »
- Gag: LULU: « Où sont mes pieds ? » PINO: « Tout en bas, Lulu ! » LULU: « Coucou, mes pieds ! »
## Kritische Stellen
- Thumbnail/Short FR: « Toc, toc, toc ! ».
- Refrainzeile „Qui a le plus long cou ?“ weniger idiomatisch als Titel.
- Hals im Bild nur sanft antippen.

View file

@ -0,0 +1,249 @@
# Lied 5: „Bürste, Bürste, vielen Dank“ (Zähneputzen, Putz-Timer 2 Min.)
Entwurf vom 03.11.2026 (Komponist). **Überarbeitet 03.11. nach Team-Check** (Kinderpsychologie, Eltern-Mehrwert, Testpublikum, Content & Trends): Titel geändert, während der Putzzeit keine Bewegungen und kein Rufen (Kind putzt im Takt mit), „hier/da“ statt links/rechts, Zeile 2 wechselt in Zone 3–4, Vorlauf 10 s, Elterntext gekürzt. Als Einzelvideo gedacht: kein Vorwissen aus den Folgen nötig. Ganzjährig nutzbar. Intro-Ansage der Reihe (ElevenLabs): „Das ist Pinos Liederbuch. Hier singt Pino immer mit.“
## Steckbrief
| | |
| --- | --- |
| Titel DE | Bürste, Bürste, vielen Dank |
| Vorschlag ES / FR | Dolmetscher dichten neu; ES nicht „fru, fru“ (klingt erfunden), eher „cepi, cepi“ |
| Lernziel | Zähneputzen als Ritual: morgens und abends, Zahn für Zahn der Reihe nach (oben hier, oben da, unten hier, unten da, vorne; das Leuchten im Mundschema zeigt die Stelle) |
| Alter | 3–6 Jahre |
| Länge | 2:35 (62 Takte). **Putzzeit 0:10–2:10 = genau 2 Minuten** (Timer-Funktion; 10 s Vorlauf für die Zahnpasta) |
| Tempo / Takt / Tonart | 96 BPM, 4/4 (1 Takt = 2,5 s), G-Dur |
| Tonumfang | D4–H4 (Sexte) |
| Einsatz | Einzelvideo (Mittwochs-Lied Nr. 5), Dauerbrenner als Putz-Timer, Refrain + Gag als Shorts |
**Titel-Hinweis:** Es gibt ein Lied „Schrubb, Schrubb“ von Lars Dietrich / 3Berlin (ZDF „Der singende Zahn“). Deshalb heißt unser Lied nach der Refrainzeile 2 „Bürste, Bürste, vielen Dank“ (entschieden mit dem Team-Check 03.11.).
**Sicherheitsregel (Kinderpsychologie, Pflicht):** Während der Putzzeit nur putzen und stehen bleiben. Keine Arm-, Verbeugungs- oder Hüpfbewegungen mit der Bürste im Mund, kein Mitrufen. Die Figuren im Bild putzen auch nur. Klatschen und Lächeln erst im Schluss-Refrain nach dem Ausspucken.
## Idee
Ein Bad mit Spiegel. Oben im Bild ein großer Mund (Zahnschema, wie im Spiegel gesehen: „links“ = Bildschirm links). Bei jeder Strophe leuchtet die Zone, die gerade dran ist. Ein Balken oben füllt sich in 2 Minuten. Pino hat winzige Zähne und eine winzige Bürste, Lulu ganz große Zähne und eine riesige Bürste, Noa putzt in der Mitte. Am Schluss lächeln alle drei in die Kamera.
## Form
| Teil | Takte | Zeit | Inhalt |
| --- | --- | --- | --- |
| Intro | 4 | 0:00–0:10 | Glockenspiel, Bürsten-Geräusch (Shaker). Ansage „Das ist Pinos Liederbuch …“, Zahnpasta drauf. Bild: Bad, Zeitbalken wartet |
| Refrain | 8 | 0:10–0:30 | Chor, alle Zähne rundherum; Zeitbalken startet |
| Zone 1: oben hier | 6 | 0:30–0:45 | 4 Takte Strophe, 1 Takt Ruf, 1 Takt Shaker (Kind putzt im Takt) |
| Zone 2: oben da | 6 | 0:45–1:00 | gleiches Muster |
| Refrain | 8 | 1:00–1:20 | |
| Zone 3: unten hier | 6 | 1:20–1:35 | Zeile 2 „Innen fegt sie, wie ich kann“ |
| Zone 4: unten da | 6 | 1:35–1:50 | Zeile 2 „Innen fegt sie, wie ich kann“ |
| Zone 5: vorne | 6 | 1:50–2:05 | |
| Gag | 2 | 2:05–2:10 | Riesenzähne, Winzigzähne (gesprochen) |
| Schluss-Refrain | 8 | 2:10–2:30 | nach dem Ausspucken; leiser, in den letzten 2 Takten etwas langsamer; jetzt klatschen und lächeln |
| Outro | 2 | 2:30–2:35 | Glockenspiel, alle lächeln |
Refrain beginnt bei 0:10 (Regel: höchstens 10 s). Putzzeit 0:10–2:10 = 120 s. Der Schluss-Refrain läuft zum Ausspucken und Lächeln.
## Liedtext mit Bewegungen
Betonung: X = betont, x = unbetont. Jede Zeile beginnt auf Schlag 1, danach bleibt Luft zum Atmen.
**Refrain** *(Chor, 8 Takte, je Zeile 2 Takte)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Schrubb, schrubb, Zähne blank, | weiterputzen, stehen bleiben (im Schluss-Refrain: Zeigefinger als Bürste) | 5 | X X X x X |
| Bürste, Bürste, vielen Dank! | weiterputzen (im Schluss-Refrain: Hand aufs Herz) | 7 | X x X x X x X |
| Morgens, abends, jeden Tag, | weiterputzen (im Schluss-Refrain: Arme hoch, dann runter) | 7 | X x X x X x X |
| putz ich Zähne, weil ich’s mag. | weiterputzen (im Schluss-Refrain: breit lächeln) | 7 | X x X x x x X |
Selbsttest: laut im Tempo gesprochen, kein Stolpern; „Schrubb“ hat den Schlag.
**Strophe** *(fest, nur die Zone wechselt; Solo-Stimme; Kind putzt nur)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| **Oben hier**, jetzt bin ich dran, | Bürste an die leuchtende Stelle (Noa zeigt an ihrem Mund) | 7 | X x X x x x X |
| Bürste kreist, so gut ich kann. *(Zone 3 und 4: „Innen fegt sie, wie ich kann.“)* | kleine Kreise putzen | 7 | X x X x x x X |
| Schrubb, schrubb, schrubb! *(Ruf, Noa + Chor)* | im Takt putzen | 3 | X X X |
| *(1 Takt nur Shaker als Bürstengeräusch, kein Gesang; Kind putzt im Takt mit, ruft nicht)* | im Takt putzen | – | – |
Die fünf Zonen (nur dieses Wort wechselt):
1. Oben hier
2. Oben da
3. Unten hier
4. Unten da
5. Ganz vorne
Alle Zonen haben 3 Silben, die Zeile bleibt gleich lang. „Links/rechts“ unterscheiden viele Kinder erst im Schulalter sicher, deshalb zeigt das Leuchten im Mundschema die Stelle; links/rechts nur in der Elternbeschreibung.
**Gag** *(gesprochen, ElevenLabs, über leisem Groove, 2 Takte)*
> LULU *(Riesenbürste)*: „Riesenzähne!“
> PINO *(Mini-Bürste)*: „Winzigzähne!“
> NOA: „Alle blank!“
**Schluss-Refrain** *(leiser, Ritardando in den letzten 2 Takten)*: Text wie Refrain, unverändert.
## Melodie-Skizze
Grundidee: Der Refrain springt nicht, er steigt zu „blank“ und fällt wieder. Die Strophe ist tiefer und ruhiger, damit der Refrain heraussticht. Ruf: drei Töne aufwärts.
**Refrain** (Akkorde: `| G | G | G | D | Em | C | G | D G |`)
```
Schrubb, schrubb, Zäh-ne blank, G G A B | G – – –
Bürs-te, Bürs-te, vie-len Dank! B A B A | G A G –
Mor-gens, A-bends, je-den Tag, E E G G | A G E –
putz ich Zäh-ne, weil ich's mag. E G A G | E F# G –
```
(Zeilenaufbau: je Zeile 2 Takte, Silben in Takt 1, Takt 2 hält den letzten Ton und atmet. Takt 8: D auf 1–2, G auf 3–4.) Tonumfang D4–H4 in der Strophe, Refrain E4–H4.
**Strophe** (Akkorde: `| G | D | C | G | G | G |`)
```
O-ben links, jetzt bin ich dran, G A B A | G E D –
Bürs-te kreist, so gut ich kann. D E G E | G A G –
Schrubb, schrubb, schrubb! G A B – (Ruf, Takt 5)
(Echo, Takt frei) G A B – (Kinder, Takt 6, nur Gitarre und Shaker)
```
Rhythmus: Achtel in der Strophe, Viertel auf den Reimwörtern. Kein Sprung über eine Terz hinaus, keine Tonartwechsel.
**Hinweis zur Ähnlichkeit:** Die Tonfolge G G A B ist als Viertonmotiv sehr allgemein. Es gibt keine erkennbare Übereinstimmung mit einem bekannten Kinder- oder Zahnputzlied. Websuche: bekannte Zahnputzlieder nutzen meist umgetextete Volksmelodien oder „Putz, putz, putz, runter mit dem Schmutz“, „Putz Putz Blitzeblank“; das wurde bewusst vermieden. Da Suno die Melodie selbst erzeugt, muss das Ergebnis nach dem Hören nochmals geprüft werden (siehe Offene Fragen).
## Suno-Paket
**Stilangabe** (ca. 196 Zeichen)
```text
Warm cheerful children's singalong, clear friendly female lead, small children's choir on the chorus. Glockenspiel, acoustic guitar, ukulele, soft claps, shaker. 96 bpm, G major. Very clear words.
```
**Exclude styles**
```text
electronic, autotune, heavy drums, rap, rock, dark, sad, synthesizer, dubstep, trap, screaming, spoken word
```
**Text für Suno**
```text
[Intro]
(glockenspiel, soft brushing sounds, four bars)
[Chorus – children's choir joins]
Schrubb, schrubb, Zähne blank,
Bürste, Bürste, vielen Dank!
Morgens, abends, jeden Tag,
putz ich Zähne, weil ich's mag.
[Verse 1]
Oben hier, jetzt bin ich dran,
Bürste kreist, so gut ich kann.
Schrubb, schrubb, schrubb!
(one bar shaker only, no singing)
[Verse 2]
Oben da, jetzt bin ich dran,
Bürste kreist, so gut ich kann.
Schrubb, schrubb, schrubb!
(one bar shaker only, no singing)
[Chorus – children's choir joins]
Schrubb, schrubb, Zähne blank,
Bürste, Bürste, vielen Dank!
Morgens, abends, jeden Tag,
putz ich Zähne, weil ich's mag.
[Verse 3]
Unten hier, jetzt bin ich dran,
innen fegt sie, wie ich kann.
Schrubb, schrubb, schrubb!
(one bar shaker only, no singing)
[Verse 4]
Unten da, jetzt bin ich dran,
innen fegt sie, wie ich kann.
Schrubb, schrubb, schrubb!
(one bar shaker only, no singing)
[Verse 5]
Ganz vorne, jetzt bin ich dran,
Bürste kreist, so gut ich kann.
Schrubb, schrubb, schrubb!
(one bar shaker only, no singing)
[Instrumental break]
(two bars, soft groove, no singing)
[Chorus – softer, children's choir, slowing down]
Schrubb, schrubb, Zähne blank,
Bürste, Bürste, vielen Dank!
Morgens, abends, jeden Tag,
putz ich Zähne, weil ich's mag.
[Outro]
(glockenspiel, gentle ending)
```
**Zur Umsetzung in Suno:**
- Suno singt Ruf **und** Echo mit; der freie Echo-Takt entsteht im Schnitt: getrennte Spur „Gesang“ laden und im Echo-Takt stumm schalten. Lage der Takte nach Hören gegen das 2,5-s-Raster prüfen (Suno driftet leicht).
- „Schrubb“ ggf. als „Schrub“ schreiben, falls nicht verständlich. Beim Hören auf das „sch“ achten.
- Der Gag (Riesenzähne …) kommt von ElevenLabs, nicht von Suno.
- 2–4 Varianten erzeugen. Hörliste: Text verständlich? Refrain jedes Mal gleiche Melodie? Länge 2:20–2:40 (Tempo-Raster stimmt)? Ruf/Echo hörbar? Kein Wort verschluckt? Ende ruhig? Keine Ähnlichkeit mit bekanntem Lied?
- Fertigmachen: getrennte Spuren, −14 LUFS (`loudnorm=I=-14:TP=-1.5:LRA=11`), Instrumental-/Karaoke-Fassung ablegen.
- Zählt Suno zu schnell/langsam: Tempo im Schnitt anpassen, damit der Zeitbalken auf 2:00 Putzzeit trifft (Timer-Funktion!).
## Bildplan für Remotion
| Teil | Bild | Status |
| --- | --- | --- |
| Intro / Outro | Bilderbuch auf/zu | vorhanden (`baukasten/buch.tsx`) |
| Ort | Bad: Wand mit Spiegel, Waschbecken, Zahnputzbecher | `zimmer_wand` vorhanden; Spiegel, Becken, Becher **neu zu bauen** (einfache SVG-Teile) |
| Refrain | Noa mittig klatscht, Pino hüpft, Lulu nickt, kurz Zahnbürsten sichtbar | vorhanden (`noa_A_klatschen`, `pino_C3_freudensprung`, `lulu_A3_lachen`) |
| Strophe, Zone | großer Mund (Schema Zahnreihen oben/unten, aus Sicht Spiegel), aktive Zone leuchtet, Figuren klein am Rand | **neu zu bauen:** Mundschema mit 5 Zonen, Leucht-Effekt |
| Strophe, Figur | Noa zeigt in die Kamera, Pino und Lulu putzen dazu | `noa_B_zeigen`, `pino_A3_lachen`, `lulu_A_hals-unten`; Bürste als **neues Teil** (3 Größen: winzig, mittel, riesig), schwingt per Code vor dem Gesicht |
| Ruf / Echo | Bürsten schrubben 3×, Zahl-Punkte leuchten, im Echo leuchten sie bei den Kindern | Overlay **neu** (einfach) |
| Zeitbalken | oben Balken oder Sanduhr, füllt sich 0:05–2:05, Zonen-Marken | **neu zu bauen** (einfach, aus Rechtecken) |
| Gag | Lulu beugt Hals zur Riesenbürste, Pino mit Mini-Bürste | vorhanden (`lulu_C9_hals-runter`, `pino_A3_lachen`); Bürsten neu |
| Schluss | alle drei lächeln in die Kamera, Zähne glitzern | vorhanden (`*_A3_lachen`), Glitzer neu (einfach) |
Neue Posen: keine nötig. Higgsfield-Credits: 0. Ohne Mundbewegung: das Putzen wird durch Bürste und Mundschema erzählt, nicht durch Lippen.
**Wichtig fürs Mundschema:** wie im Spiegel zeichnen („oben links“ = Bildschirm links), Noa zeigt dazu an ihren eigenen Mund; sonst verwechseln Kinder links und rechts.
## Titel, Thumbnail, Shorts
**Titel (Suchbegriff zuerst, dann Figur/Kanal)**
| Sprache | Titel |
| --- | --- |
| DE | Zähneputzen Lied für Kinder – 2 Minuten Putz-Timer zum Mitsingen \| Pinos kleine Welt |
| ES | Canción para cepillarse los dientes – temporizador de 2 minutos para niños \| El pequeño mundo de Pino |
| FR | Chanson pour se brosser les dents – minuteur de 2 minutes pour enfants \| Le petit monde de Pino |
**Thumbnail:** Pino mit riesiger Bürste vor strahlend blanken Zähnen. Text (max. 3 Wörter): DE „Zähne blank!“, ES „¡Dientes limpios!“, FR „Dents propres !“. Kleine Uhr „2:00“ als Zusatz.
**Shorts**
1. Refrain (0:05–0:25, 20 s): alle drei putzen im Takt, am Ende Lächeln.
2. Gag (Zone 5 + Gag, 1:50–2:05, 15 s): Riesenzähne, Winzigzähne, „Alle blank!“.
Short-Titel: DE „Schrubb, schrubb, Zähne blank! #Zähneputzen“ / ES „¡Fru, fru, dientes limpios! #cepillado“ / FR „Frotte, frotte, dents propres ! #brossage“.
## Hinweise
**An die Dolmetscher (ES/FR):** Silbenzahlen und Betonung einhalten, die 5 Zonen in gleicher Reihenfolge, jede Zone hat 3 Silben (ES „arriba a la izquierda“ ist zu lang: kurze Form suchen, ggf. Komponist anpassen lassen). Lautmalerei „Schrubb“ neu wählen (ES „fru-fru“, FR „frotte“), Hook höchstens 6 Silben. Reim nicht wörtlich, aber Lernziel und Bewegungen bleiben. Keine Wörter wie Karies, Löcher, Bakterien einführen.
**An den Cutter:** 1 Takt = 2,5 s (siehe Form). Echo-Takte (37,5–40; 52,5–55; 87,5–90; 102,5–105; 117,5–120 s) nicht mit Sprache füllen. Zeitbalken muss bei 2:05 voll sein. Karaoke-Text einblenden. Instrumentalfassung zusätzlich als Timer-Video.
**Für Eltern (Beschreibung):** „Ihr Kind putzt zwei Minuten lang mit: erst oben links, oben rechts, unten links, unten rechts, dann vorne. Tipps: Kinderzahnpasta erbsengroß, nach dem Putzen ausspucken statt ausspülen, und putzen Sie bei Kindern bis ins Grundschulalter nach (auch Kau- und Innenflächen). Spielidee: Zeigt eurem Kuscheltier die Zähne und putzt gemeinsam.“ Bitte zahnmedizinisch gegenprüfen lassen (Empfehlung: zweimal täglich, fluoridhaltige Kinderzahnpasta mit 1000 ppm).
## Offene Fragen
1. Titel „Schrubb, schrubb“ gibt es schon (Lars Dietrich/3Berlin). Titel lassen, oder Alternative „Pino putzt: Zähne blank“?
2. Suno-Melodie nach dem Hören auf Ähnlichkeit zu bekannten Zahnputzliedern prüfen.
3. Reichen 5 Zonen? Zahnärzte empfehlen zusätzlich Kau- und Innenflächen (KAI); die Zonen sind eine Vereinfachung, im Elternhinweis ausgewiesen, nicht im Liedtext.
4. Zeitbalken/Timer im Bild: ja? (empfohlen)
5. Pino wach (Winterschlaf der Geschichte)? Siehe plan.md, Frage 3.
6. Karaoke-Text im Bild: ja (siehe plan.md, Frage 4).
7. Fachprüfung der Fluorid-/Mengenangaben (Eltern-Mehrwert, Zahnmedizin) steht aus.

View file

@ -0,0 +1,79 @@
# Lied 5 ES: „Cepi, cepi, gracias, gracias“
Status: Entwurf dolmetscher-es, 03.11.2026. Nicht muttersprachlich gegengelesen.
Reihen-Ansage: „Este es el libro de canciones de Pino. Aquí Pino siempre canta con nosotros.“
## Suno-Text
```text
[Intro]
(glockenspiel, soft brushing sounds, four bars)
[Chorus – children's choir joins]
¡Fru, fru, fru, a brillar!
¡Cepi, cepi, gracias, gracias!
Mañana y noche, cada día,
dientes limpios, ¡qué alegría!
[Verse 1]
Arriba acá, me toca a mí,
girando, girando, así.
¡Fru, fru, fru!
(one bar shaker only, no singing)
[Verse 2]
Arriba allá, me toca a mí,
girando, girando, así.
¡Fru, fru, fru!
(one bar shaker only, no singing)
[Chorus – children's choir joins]
¡Fru, fru, fru, a brillar!
¡Cepi, cepi, gracias, gracias!
Mañana y noche, cada día,
dientes limpios, ¡qué alegría!
[Verse 3]
Abajo acá, me toca a mí,
por dentro, por dentro, así.
¡Fru, fru, fru!
(one bar shaker only, no singing)
[Verse 4]
Abajo allá, me toca a mí,
por dentro, por dentro, así.
¡Fru, fru, fru!
(one bar shaker only, no singing)
[Verse 5]
Los de enfrente, me toca a mí,
girando, girando, así.
¡Fru, fru, fru!
(one bar shaker only, no singing)
[Instrumental break]
(two bars, soft groove, no singing)
[Chorus – softer, children's choir, slowing down]
¡Fru, fru, fru, a brillar!
¡Cepi, cepi, gracias, gracias!
Mañana y noche, cada día,
dientes limpios, ¡qué alegría!
[Outro]
(glockenspiel, gentle ending)
```
## Gesprochen (ElevenLabs)
- LULU *(con el cepillo gigante)*: „¡Dientes gigantes!“
- PINO *(con el cepillo diminuto)*: „¡Dientes chiquitos!“
- NOA: „¡Todos limpios!“
## Kritische Stellen
- „Fru“ und „cepi“ unsicher, Muttersprachler hören lassen (Alternative „cepillito“).
- Zonen „acá/allá“ (LatAm-üblich), „Los de enfrente“ = Vorderzähne.
- Refrain Zeile 3 hat 9 statt 7 Silben; Ausweichzeile „Cada noche, cada día“.
- Elterntext ES: „arriba a la izquierda/derecha“.

View file

@ -0,0 +1,79 @@
# Lied 5 FR: « Ma brosse, merci, merci »
Status: Entwurf dolmetscher-fr, 03.11.2026. Nicht muttersprachlich gegengelesen.
YouTube-Vorschlag: « Comptine pour se brosser les dents (2 minutes) : Ma brosse, merci, merci ». Short: « Frotte, c'est parti ! #brossage ».
Reihen-Ansage: « Voici le livre de chansons de Pino. Ici, Pino chante toujours avec nous. »
## Suno-Text
```text
[Intro]
(glockenspiel, soft brushing sounds, four bars)
[Chorus – children's choir joins]
Frotte, c'est parti !
Ma brosse, merci, merci !
Matin, soir, je prends mon temps,
pour brosser toutes mes dents.
[Verse 1]
En haut ici, maintenant,
je brosse bien, doucement.
Frotte, frotte, frotte !
(one bar shaker only, no singing)
[Verse 2]
En haut par là, maintenant,
je brosse bien, doucement.
Frotte, frotte, frotte !
(one bar shaker only, no singing)
[Chorus – children's choir joins]
Frotte, c'est parti !
Ma brosse, merci, merci !
Matin, soir, je prends mon temps,
pour brosser toutes mes dents.
[Verse 3]
En bas ici, maintenant,
dedans, dedans, doucement.
Frotte, frotte, frotte !
(one bar shaker only, no singing)
[Verse 4]
En bas par là, maintenant,
dedans, dedans, doucement.
Frotte, frotte, frotte !
(one bar shaker only, no singing)
[Verse 5]
Devant, devant, maintenant,
je brosse bien, doucement.
Frotte, frotte, frotte !
(one bar shaker only, no singing)
[Instrumental break]
(two bars, soft groove, no singing)
[Chorus – softer, children's choir, slowing down]
Frotte, c'est parti !
Ma brosse, merci, merci !
Matin, soir, je prends mon temps,
pour brosser toutes mes dents.
[Outro]
(glockenspiel, gentle ending)
```
## Gesprochen (ElevenLabs)
- LULU *(brosse géante)*: « Des dents géantes ! »
- PINO *(mini-brosse)*: « Des dents toutes petites ! »
- NOA: « Toutes propres ! »
## Kritische Stellen
- Ruf „Frotte, frotte, frotte !“ 6 statt 3 Silben; Alternative Hook „Frotte, c'est joli !“.
- „weil ich's mag“ → „je prends mon temps“ (stützt 2 Minuten).
- „Ma brosse“ evtl. als Haarbürste gehört.

View file

@ -0,0 +1,273 @@
# Lied 12: „Gute Nacht, kleine Welt“ (Einschlafritual, mit 10-Min.-Schlaffassung)
Entwurf vom 03.11.2026 (Komponist). **Überarbeitet 03.11. nach Team-Check:** kein lauter Gag mehr (Lulu gähnt ansteckend), „der Mond ist wach“, „atme aus – und schlaf schön ein“, „ganz leise, in der Nacht“; Schlaffassung 30 statt 10 Minuten (Content & Trends, Eltern; Kinderpsychologie-Votum zur Bildschirmzeit steht noch aus). Intro-Ansage der Reihe: „Das ist Pinos Liederbuch. Hier singt Pino immer mit.“ Text und Melodie sind neu geschrieben. Als Einzelvideo gedacht: kein Vorwissen aus den Folgen nötig. Ganzjährig nutzbar.
## Steckbrief
| | |
| --- | --- |
| Titel DE | Gute Nacht, kleine Welt |
| Vorschlag ES / FR | „Buenas noches, pequeño mundo“ / „Bonne nuit, petit monde“ (Dolmetscher dichten neu) |
| Lernziel | Abendritual: Gute Nacht sagen, ruhig ein- und ausatmen, zur Ruhe kommen |
| Alter | 3–6 Jahre |
| Länge | 2:00 (72 Takte). Dazu Schlaffassung 10:00 (Instrumental) |
| Tempo / Takt / Tonart | 72 BPM (punktierte Viertel), 6/8 (1 Takt = 1,67 s), F-Dur |
| Tonumfang | C4–A4 (Sexte) |
| Einsatz | Einzelvideo (Mittwochs-Lied Nr. 12), Schlaffassung als eigenes Video, Refrain + Gag als Shorts |
Tempo unter 88 BPM ist hier gewollt (Schlaflied). Tonumfang und Schritte bleiben singbar.
## Idee
Eine Nacht im Garten, der Mond leuchtet leise. Nacheinander sagen Noa, Lulu und Pino Gute Nacht. Nach jedem „Gute Nacht“ ist ein Takt frei: das Kind flüstert mit. Pino rollt sich ein, die Stacheln legen sich glatt. Kleiner Gag: Lulu sagt „Gute Nacht“ aus Versehen viel zu laut, Noa legt den Finger auf die Lippen, Lulu flüstert es noch einmal. Der Refrain atmet mit: die Melodie steigt beim Einatmen und fällt beim Ausatmen.
## Form
| Teil | Takte | Zeit | Inhalt |
| --- | --- | --- | --- |
| Intro | 4 | 0:00–0:07 | Spieluhr/Glockenspiel, sanfte Gitarre. Nacht, Mond geht auf |
| Refrain | 12 | 0:07–0:27 | eine sanfte Stimme |
| Strophe 1: **Noa** | 8 | 0:27–0:40 | 6 Takte gesungen, 2 Takte frei zum Flüstern |
| Strophe 2: **Lulu** | 8 | 0:40–0:53 | gleiches Muster |
| Refrain | 12 | 0:53–1:13 | |
| Strophe 3: **Pino** | 8 | 1:13–1:27 | Pino rollt sich ein |
| Gag | 3 | 1:27–1:32 | gesprochen, leise |
| Schluss-Refrain | 12 | 1:32–1:52 | leiser, langsamer in den letzten 2 Takten |
| Outro | 5 | 1:52–2:00 | Glockenspiel, Mond, Sterne, Bild wird dunkler |
Refrain beginnt bei 0:07 (Regel Schlaflied: höchstens 12 s). 72 Takte × 1,667 s = 120 s.
## Liedtext mit Bewegungen
Alle Bewegungen langsam und leise, im Sitzen oder Liegen möglich. Betonung: X = betont, x = unbetont. Im 6/8-Takt trägt „Gu“ und „Nacht“ den Schlag.
**Refrain** *(12 Takte, 6 Zeilen à 2 Takte)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| Gute Nacht, gute Nacht, | Hände falten, Wange darauflegen | 6 | X x X X x X |
| der Mond ist wach. | Arme als Bogen über den Kopf (Mond) | 4 | x X x X |
| Augen zu, atme ein, | Augen zu, Arme langsam heben | 6 | X x X X x X |
| atme aus – und schlaf schön ein. | Arme langsam sinken lassen, ausatmen | 7 | X x X x X x X |
| Schlaf gut, schlaf gut, | sanft links-rechts wiegen | 4 | X X X X |
| schlaf gut, kleine Welt. | wiegen, Hände unter die Wange | 5 | X X x X X |
Hook: „Gute Nacht, gute Nacht“ (6 Silben, wiederholt in der Zeile).
**Strophe** *(fest, nur der Name wechselt: Noa, Lulu, Pino)*
| Zeile | Bewegung | Silben | Betonung |
| --- | --- | --- | --- |
| **Noa** sagt: Gute Nacht, | leise winken | 6 | X x X X x X |
| ganz leise, in der Nacht. | Finger an die Lippen | 6 | x X x x x X |
| Sag auch du: Gute Nacht! | sanft auf sich zeigen | 6 | X X X X x X |
| *(2 Takte frei: Kind flüstert „Gute Nacht“)* | Hände falten, flüstern | – | – |
Strophe 2: „**Lulu** sagt: Gute Nacht“. Strophe 3: „**Pino** sagt: Gute Nacht“. Alle Namen sind 2 Silben.
**Gag** *(gesprochen, ElevenLabs, 3 Takte, ruhiger Teppich)*
> LULU *(gähnt lang und langsam)*: „Uaaah …“
> NOA *(flüstert, kichert)*: „Jetzt gähne ich auch.“
> PINO *(aus der Kugel, verschlafen)*: „Mmh.“
(Der frühere laute „GUTE NACHT!“-Gag ist gestrichen, auch im Short.)
**Schluss-Refrain**: Text wie Refrain, unverändert, leiser.
## Melodie-Skizze
Grundidee: **Die Melodie atmet.** Bei „atme ein“ steigt sie, bei „Sonnenschein“ fällt sie. Wenige Töne, Wiegen im 6/8. Pro Takt: zwei Schläge, Gu-te = Viertel + Achtel, Nacht = punktierte Viertel.
**Refrain** (Akkorde: `| F | F | C | F | C | F | Dm | C | F | F | C | F |`)
```
Gu-te Nacht, gu-te Nacht, A G F | A G A
der Mond gibt acht. G F | E F
Au-gen zu, at-me ein, C E D | F E G
mor-gen kommt der Son-nen-schein. A G F | E D E C
Schlaf gut, schlaf gut, A G A F
schlaf gut, kle-i-ne Welt. G F E D F
```
Tonumfang C4–A4. Die Töne bei „Augen zu, atme ein“ gehen in Terzen (C E D F E G) und nicht als reine Tonleiter, damit keine Ähnlichkeit mit bekannten Liedern entsteht. Takt 8 endet auf C (offen), Takt 12 auf F (Ruhe).
**Strophe** (Akkorde: `| F | F | Dm | C | C | F | F | F |`)
```
No-a sagt: Gu-te Nacht, F G A | A G F
sagt es ganz, ganz sacht. A G F | G F
Sag auch du: Gu-te Nacht! E F G | A G E
(2 Takte frei, nur Gitarre und Glockenspiel, F-Akkord)
```
Das Kind flüstert in den freien Takten. Tonart bleibt durchgehend F-Dur.
**Hinweis zur Ähnlichkeit:** „Guten Abend, gut’ Nacht“ (Brahms, Wiegenlied) und „Weißt du, wie viel Sternlein stehen“ wurden bewusst gemieden. Text: kein „Sternlein“, kein „Rosen bedacht“, kein „Engel“. „Der Mond gibt acht“ (statt „Mond ist aufgegangen“). Die Websuche nach dem Titel „Gute Nacht, kleine Welt“ ergab kein bestehendes Lied. Suno erzeugt die Melodie selbst: nach dem Hören nochmals auf Ähnlichkeit prüfen.
## Suno-Paket
**Stilangabe** (ca. 188 Zeichen, nur eine sanfte Stimme)
```text
Gentle lullaby, slow 6/8 rocking feel, one soft warm female voice, sung quietly. Music box, celesta, soft nylon guitar, warm low bass, no drums. 72 bpm, F major. Clear words, calm ending.
```
**Exclude styles**
```text
choir, children's choir, drums, percussion, claps, shaker, electronic, autotune, rap, rock, dark, sad, scary, loud, brass
```
**Text für Suno**
```text
[Intro]
(music box, soft guitar)
[Chorus]
Gute Nacht, gute Nacht,
der Mond ist wach.
Augen zu, atme ein,
atme aus – und schlaf schön ein.
Schlaf gut, schlaf gut,
schlaf gut, kleine Welt.
[Verse 1]
Noa sagt: Gute Nacht,
ganz leise, in der Nacht.
Sag auch du: Gute Nacht!
[Instrumental break]
[Verse 2]
Lulu sagt: Gute Nacht,
ganz leise, in der Nacht.
Sag auch du: Gute Nacht!
[Instrumental break]
[Chorus]
Gute Nacht, gute Nacht,
der Mond ist wach.
Augen zu, atme ein,
atme aus – und schlaf schön ein.
Schlaf gut, schlaf gut,
schlaf gut, kleine Welt.
[Verse 3]
Pino sagt: Gute Nacht,
ganz leise, in der Nacht.
Sag auch du: Gute Nacht!
[Instrumental break]
[Instrumental break]
(three bars, very soft)
[Chorus – softer, slowing down]
Gute Nacht, gute Nacht,
der Mond ist wach.
Augen zu, atme ein,
atme aus – und schlaf schön ein.
Schlaf gut, schlaf gut,
schlaf gut, kleine Welt.
[Outro]
(music box, gentle ending, fade out)
```
**Zur Umsetzung in Suno:**
- Der Gag (Lulu laut, Noa „Pst“ …) kommt von ElevenLabs, nicht von Suno. Im Schnitt über die ruhigen Takte legen.
- Suno singt „[Instrumental break]“ in Strophen manchmal durch. Dann die freien Takte aus der Gesangsspur herausschneiden. Das 1,67-s-Raster nach Hören prüfen.
- 2–4 Varianten erzeugen. Hörliste: nur eine Stimme, ruhig? Refrain immer gleiche Melodie? 6/8 spürbar wiegend? Nichts Lautes, kein Schlagzeug? Ende ruhig, nicht abgeschnitten?
- Fertigmachen: getrennte Spuren, **−16 bis −18 LUFS** für das Schlaflied (leiser als die −14 der Lernlieder; siehe Offene Fragen), Instrumental-Fassung ablegen.
- Optional, um die Melodie festzulegen: Skizze selbst einsingen/auf Klavier spielen und bei Suno als eigene Audio-Vorlage („Cover“) hochladen (nur eigene Aufnahme, keine Fremdmelodien).
## Schlaffassung (10 Minuten, Instrumental-Schleife)
**Ziel:** Eine ruhige Fassung zum Einschlafen, Lernziel „zur Ruhe kommen“. Ohne Gesang, ohne Überraschungen.
**Struktur der 10 Minuten**
| Zeit | Musik | Bild |
| --- | --- | --- |
| 0:00–0:10 | langes Einblenden | Nachtgarten, Mond |
| 0:10–2:00 | Refrain-Melodie als Spieluhr, 2× durch | Noa und Lulu am Rand, Pino eingerollt in der Mitte |
| 2:00–9:00 | nur Begleitung (Gitarren-Arpeggio, Bass, Glockenspiel), keine Melodie mehr, jede Minute etwas leiser | pro Minute etwas dunkler, Sterne tauchen auf |
| 9:00–10:00 | langsames Ausblenden bis Stille | Bild bleibt fast dunkel |
**Suno-Hinweise**
Stilangabe (ca. 181 Zeichen):
```text
Instrumental lullaby loop, very slow 6/8 rocking, music box melody, celesta, soft nylon guitar arpeggios, warm low bass, no drums, no vocals. 60 bpm, F major, steady, seamless, calm.
```
Exclude styles:
```text
vocals, voice, choir, drums, percussion, electronic, synthesizer, rap, rock, dark, scary, loud, climax, build-up, drop
```
Text: nur `[Instrumental]` (keine Worte). Vorgehen:
1. Suno: 3–4 Instrumentalvarianten mit gleicher Akkordfolge (F | F | C | F | C | F | Dm | C | F | F | C | F, 12 Takte ≈ 24 s bei 60 BPM) erzeugen, jede 2–3 Minuten.
2. Auswahl-Liste: gleichmäßig, keine Steigerung, kein plötzlicher Ton, Ende lässt sich ausblenden, Anfang und Ende gleiche Akkordlage (für die Schleife).
3. Getrennte Spuren: „Melodie“ nur in den ersten 2 Minuten, danach nur Begleitung und Bass (Spur der Melodie ausblenden).
4. Im Schnitt 2–3 Takes mit Überblendung 4 s aneinanderhängen, bis 10:00 erreicht sind, damit es nicht mechanisch wiederholt.
5. Prüfen: keine hörbare Naht an den Übergängen, Lautstärke fällt langsam.
Beispiel ffmpeg (Cutter prüft): `ffmpeg -stream_loop 2 -i schleife.wav -af "afade=t=in:d=8,afade=t=out:st=540:d=60,loudnorm=I=-18:TP=-2" -t 600 schlaf-10min.wav`. Nur bei wirklich nahtlosem Take; sonst Überblendung (`acrossfade`).
**Bild der Schlaffassung:** Garten bei Nacht, sehr langsame Bewegung (kein Schnitt, nur Blende), Atem-Kreis in der Ecke wächst und schrumpft im 6-s-Rhythmus. In den letzten 2 Minuten fast schwarz. Kein Text, keine Werbeeinblendung im Bild.
## Bildplan für Remotion
| Teil | Bild | Status |
| --- | --- | --- |
| Intro / Outro | Bilderbuch auf/zu | vorhanden (`baukasten/buch.tsx`) |
| Ort | Garten bei Nacht, Mond | vorhanden (`garten_nacht`; Mond bitte im Bild prüfen) |
| Refrain | alle drei wiegen leicht, Augen zu | vorhanden (`noa_A1_augen-zu`, `lulu_A1_augen-zu`, `pino_A1_augen-zu`; Wiegen per Code) |
| Atmen (Augen zu, atme ein / Sonnenschein) | weicher Kreis wächst beim Einatmen, schrumpft beim Ausatmen | **neu** (einfacher Kreis-Effekt) |
| Strophe Noa | Noa winkt leise, Finger an den Lippen | vorhanden (`noa_C4_winken`, `noa_B_zeigen`) |
| Strophe Lulu | Lulu beugt den Hals herunter, Augen halb zu | vorhanden (`lulu_A2_augen-halb`, `lulu_C9_hals-runter`) |
| Strophe Pino | Pino rollt sich ein, Stacheln glatt | vorhanden (`pino_C7_einrollen`, `pino_B_schlaeft-eingerollt`) |
| Freie Takte | Mond/Sterne leuchten, Kamera nickt leicht, Kind-Hand-Symbol (Finger an Lippen) | Stern-Leuchten neu (einfach) |
| Gag | Lulu zu laut (Hals hebt sich), Noa Pst, Lulu leise, Pino Stacheln zittern leicht | vorhanden (`lulu_A4_staunen`, `noa_B_zeigen`, `lulu_A2_augen-halb`, `pino_A_kugel`) |
| Schluss | alle liegen/sitzen, Bild blendet langsam ab | vorhanden (`lulu_B_liegt`, `noa_B3_schlafen`, `pino_B3_schlafen`, `Blende`, `Vignette`) |
Neue Posen: keine nötig. Higgsfield-Credits: 0.
## Titel, Thumbnail, Shorts
**Titel (Suchbegriff zuerst, dann Figur)**
| Sprache | Titel |
| --- | --- |
| DE | Gute-Nacht-Lied für Kinder – Einschlaflied zum Mitsingen | Pinos kleine Welt |
| ES | Canción de buenas noches para niños – nana para dormir | El pequeño mundo de Pino |
| FR | Chanson de bonne nuit pour enfants – berceuse pour s’endormir | Le petit monde de Pino |
Schlaffassung: DE „Einschlafmusik für Kinder – 10 Minuten Schlaflied | Pinos kleine Welt“, ES „Música para dormir niños – 10 minutos | El pequeño mundo de Pino“, FR „Musique pour endormir les enfants – 10 minutes | Le petit monde de Pino“.
**Thumbnail:** Pino eingerollt unter dem Mond, Text „Gute Nacht“ (ES „Buenas noches“, FR „Bonne nuit“). Ein Motiv, max. 3 Wörter.
**Shorts**
1. Refrain (0:07–0:27, 20 s): wiegen und atmen, mit Mond.
2. Gag (1:27–1:32 plus Pino-Strophe-Ende, ca. 15 s): Lulu laut, Noa „Pst“, Lulu flüstert.
## Hinweise
**An die Dolmetscher (ES/FR):** Silbenzahlen und Betonung einhalten (siehe Tabellen), 6/8: Gute Nacht = Viertel + Achtel + punktierte Viertel. Ein Reimpaar (Nacht/acht) neu finden. Lernziel „Atem“ bleibt: ein Satz steigt („Augen zu, atme ein“), einer fällt („Sonnenschein“). Namen der Figuren in Strophe 1–3 behalten, nur der Name wechselt. Gag-Wörter in der Sprache der Figur neu dichten.
**An den Cutter:** 1 Takt = 1,667 s (Zeiten oben). Freie Takte (Ende jeder Strophe: 0:36,7–0:40; 0:50–0:53,3; 1:23,3–1:26,7) nicht mit Sprache füllen. Short 1 = Refrain (0:07–0:27). Short 2 = Gag. Karaoke-Text einblenden. Ton leiser mastern (−16 bis −18 LUFS).
**Für Eltern (Beschreibung):** „Ihr Kind übt ein Abendritual: Gute Nacht sagen, einmal tief ein- und ausatmen und zur Ruhe kommen. Spielidee: Sagt nacheinander jedem Kuscheltier leise Gute Nacht und atmet dabei dreimal tief. Tipp: Für die Schlaffassung den Bildschirm abdecken oder nur den Ton laufen lassen; gedimmtes Licht, leise Lautstärke.“
## Offene Fragen
1. Lautstärke: −14 LUFS (wie die Lernlieder) oder −16 bis −18 LUFS für Schlaflied und Schlaffassung? Empfehlung: leiser. Cutter entscheidet.
2. Pino schläft in den Lieder-Folgen? Passt zum Winterschlaf der Geschichte, aber siehe plan.md, Frage 3 (Pino in Liedern wach?). Kinderpsychologie fragen.
3. Schlaffassung mit Bild (Garten dunkelt ab) oder nur Ton? Empfehlung: Bild mit Dunkelwerden, dazu Elternhinweis „Bildschirm abdecken“.
4. Reicht „Der Mond gibt acht“ als Beruhigung für 3-Jährige? Kinderpsychologie prüfen (soll Geborgenheit sein, nicht Überwachung).
5. Suno-Melodie nach dem Hören auf Ähnlichkeit zu „Guten Abend, gut’ Nacht“, „Weißt du, wie viel Sternlein stehen“ u. a. prüfen.
6. Karaoke-Text im Bild: bei einem Schlaflied eher nein (Licht). Entscheidung offen (siehe plan.md, Frage 4).
7. Zusätzlich eine ES- und FR-Fassung der Schlaffassung ist nicht nötig (Instrumental). Nur Titel und Beschreibung übersetzen.

View file

@ -0,0 +1,69 @@
# Lied 12 ES: „Buenas noches, pequeño mundo“
Status: Entwurf dolmetscher-es, 03.11.2026 (Basis: aktueller Suno-Text „der Mond ist wach“). Nicht muttersprachlich gegengelesen.
Reihen-Ansage: „Este es el libro de canciones de Pino. Aquí Pino siempre canta con nosotros.“
## Suno-Text
```text
[Intro]
(music box, soft guitar)
[Chorus]
Buenas noches, buenas noches,
la luna está despierta.
Cierra los ojos, respira,
suelta el aire y a soñar.
Duerme, duerme,
duerme, pequeño mundo.
[Verse 1]
Noa dice: buenas noches,
muy bajito, en la noche.
Di tú también: buenas noches.
[Instrumental break]
[Verse 2]
Lulu dice: buenas noches,
muy bajito, en la noche.
Di tú también: buenas noches.
[Instrumental break]
[Chorus]
Buenas noches, buenas noches,
la luna está despierta.
Cierra los ojos, respira,
suelta el aire y a soñar.
Duerme, duerme,
duerme, pequeño mundo.
[Verse 3]
Pino dice: buenas noches,
muy bajito, en la noche.
Di tú también: buenas noches.
[Instrumental break]
[Instrumental break]
(three bars, very soft)
[Chorus – softer, slowing down]
Buenas noches, buenas noches,
la luna está despierta.
Cierra los ojos, respira,
suelta el aire y a soñar.
Duerme, duerme,
duerme, pequeño mundo.
[Outro]
(music box, gentle ending, fade out)
```
## Gesprochen (ElevenLabs)
- Gag leise: LULU *(bosteza)*: „Uaaah …“ NOA *(susurra)*: „Ahora yo también bostezo.“ PINO *(medio dormido)*: „Mmh.“
## Kritische Stellen
- Reim Nacht/wach geht verloren; Zeilen 1, 2, 6 länger als DE.
- „Luna despierta“ bewusst nicht gekürzt (klänge wie Befehl).

View file

@ -0,0 +1,69 @@
# Lied 12 FR: « Bonne nuit, petit monde »
Status: Entwurf dolmetscher-fr, 03.11.2026 (Basis: aktueller Suno-Text). Nicht muttersprachlich gegengelesen.
Reihen-Ansage: « Voici le livre de chansons de Pino. Ici, Pino chante toujours avec nous. »
## Suno-Text
```text
[Intro]
(music box, soft guitar)
[Chorus]
Bonne nuit, bonne nuit,
la lune luit.
Ferme les yeux, inspire,
souffle – tu vas t'endormir.
Dors bien, dors bien,
dors bien, petit monde.
[Verse 1]
Noa dit : bonne nuit,
tout bas, dans cette nuit.
Dis aussi : bonne nuit !
[Instrumental break]
[Verse 2]
Lulu dit : bonne nuit,
tout bas, dans cette nuit.
Dis aussi : bonne nuit !
[Instrumental break]
[Chorus]
Bonne nuit, bonne nuit,
la lune luit.
Ferme les yeux, inspire,
souffle – tu vas t'endormir.
Dors bien, dors bien,
dors bien, petit monde.
[Verse 3]
Pino dit : bonne nuit,
tout bas, dans cette nuit.
Dis aussi : bonne nuit !
[Instrumental break]
[Instrumental break]
(three bars, very soft)
[Chorus – softer, slowing down]
Bonne nuit, bonne nuit,
la lune luit.
Ferme les yeux, inspire,
souffle – tu vas t'endormir.
Dors bien, dors bien,
dors bien, petit monde.
[Outro]
(music box, gentle ending, fade out)
```
## Gesprochen (ElevenLabs)
- LULU *(bâille)*: « Ouaaah … » NOA *(chuchote)*: « Maintenant, je bâille aussi. » PINO *(à moitié endormi)*: « Mmh. »
## Kritische Stellen
- Singt Suno „bonn' nuit“, fehlt eine Silbe → „Bon-ne nuit“ schreiben.
- „la lune luit“ etwas literarisch; „veille“ bewusst vermieden.

View file

@ -0,0 +1,64 @@
# Pinos Liederbuch – Plan für die Lernlieder-Reihe
Entwurf vom 03.11.2026 (Komponist), noch nicht entschieden. Baut auf dem Vorschlag „Ab Januar: zwei Termine pro Woche“ auf (`ideen/ab-januar-zwei-termine.md`, Mittwochs-Format „Mitmach-Lied“).
## Die Idee
Eine eigene Reihe aus kurzen Lernliedern: **„Pinos Liederbuch“** (ES „El cancionero de Pino“, FR „Les chansons de Pino“, Dolmetscher prüfen). Jede Folge ist ein Lied von 2–2:30 Min. mit einem Lernziel, Bewegungen zum Mitmachen und einer Mitmach-Lücke. Das Bilderbuch-Intro zeigt statt der Geschichte ein Liederbuch, so sind die Lieder vom Ablauf der Geschichte (Winterschlaf) unabhängig und passen das ganze Jahr.
**Warum Lieder:** Kinder von 3–6 Jahren hören dasselbe Lied immer wieder. Das bringt viel Wiedergabezeit für wenig Aufwand. Lernlieder werden von Eltern gezielt gesucht („Zahlen lernen“, „Zähneputzlied“). Aus jedem Refrain wird ein Short, aus 6–10 Liedern eine lange Zusammenstellung.
## Feste Form jeder Liedfolge
| Teil | Dauer |
| --- | --- |
| Liederbuch geht auf, Ansage (ERZ, 1 Satz zum Lernziel) | ca. 10 s |
| Refrain – Strophe – Refrain – Strophe | ca. 75 s |
| Mitmach-Teil (Echo oder Frage mit freiem Takt) | ca. 25 s |
| kleiner Gag mit Lulu oder Pino | ca. 10 s |
| leiser Schluss-Refrain, Buch geht zu | ca. 25 s |
Immer gleich: Glockenspiel, Gitarre, weiche Klatscher, 88–108 BPM, Tonumfang höchstens eine Sexte. Gesungen von Suno (eine Stimme für alle Lieder je Sprache), gesprochene Teile von ElevenLabs mit den festen Figurenstimmen.
## Die ersten 12 Lieder
| Nr. | Titel (Arbeitstitel) | Lernziel | Figur und Kniff | Bewegung | Jahreszeit |
| --- | --- | --- | --- | --- | --- |
| 1 | **Eins, zwei – Pino ist dabei!** | Zählen 1–10, Hand = 5 | Pino sammelt Äpfel, Lulu frisst einen | Finger zeigen | ganzjährig |
| 2 | **Rot wie Noas Stiefel** | Farben | Jede Farbe gehört zu einer Figur: Stiefel rot, Jacke gelb, Mütze blau, Schal grün | auf Farben zeigen | ganzjährig |
| 3 | **Einer klein und einer groß** (lange Fassung) | Gegensätze: groß/klein, oben/unten, laut/leise | Erkennungslied aus Folge 1 mit neuen Strophen | strecken und ducken | ganzjährig |
| 4 | **Wer hat den längsten Hals?** | Körperteile | Lulu zeigt den Hals, Pino die Nase, Noa Hände und Füße | Körperteile antippen | ganzjährig |
| 5 | **Schrubb, schrubb, Zähne blank** | Zähneputzen (Ritual) | Pino hat winzige Zähne, Lulu ganz große | putzen im Takt, ca. 2 Min. | ganzjährig |
| 6 | **Wenn Pinos Stacheln hoch sind** | Gefühle erkennen: froh, traurig, wütend, ängstlich | Pinos Stacheln zeigen das Gefühl, Noa hilft mit tiefem Atmen | Gesicht machen, atmen | ganzjährig |
| 7 | **Hände waschen, eins, zwei, drei** | Hände waschen | Seifenblasen, Lulu bekommt Schaum auf die Nase | reiben im Takt | ganzjährig |
| 8 | **Wer wohnt im Garten?** | Tiere und ihre Laute | Vögel, Maus, Schnecke, Eichhörnchen aus den Folgen | Tiere nachmachen | Frühling/Sommer |
| 9 | **Kreis, Dreieck, Viereck** | Formen | Apfel = Kreis, Tannenbaum = Dreieck, Fenster vom Gartenhaus = Viereck | Formen in die Luft malen | ganzjährig |
| 10 | **Aufräumlied** | Aufräumen | Pino räumt sein Nest auf, Lulu stellt Sachen oben aufs Regal | einsammeln | ganzjährig |
| 11 | **Sonne, Regen, Schnee** | Wetter und Jahreszeiten | Noas Gummistiefel im Regen, Lulu fängt Schneeflocken | Wetter mit Händen zeigen | ganzjährig |
| 12 | **Gute Nacht, kleine Welt** | Ritual zum Einschlafen | Alle drei sagen nacheinander Gute Nacht, Pino rollt sich ein | ruhig, nur wiegen | ganzjährig |
Lied 12 bekommt zusätzlich eine 10-Min.-Schlaffassung (Instrumental-Schleife, langsam dunkler werdendes Bild).
## Reihenfolge und Takt (Vorschlag)
- **Lied 1 und 2 zuerst:** Zählen und Farben werden am häufigsten gesucht und brauchen fast keine neuen Bilder.
- **Takt:** ein Lied pro Woche, mittwochs (wie im Januar-Plan). Ab Lied 6 zusätzlich eine Zusammenstellung „Alle Lieder“ (ca. 15 Min.), danach mit jedem neuen Lied erweitern.
- **Shorts:** je Lied 2 (Refrain + Gag), in allen drei Sprachen.
- **Zeit bis Januar:** Wenn die Reihe am Mi 06.01.2027 startet, müssen bis Ende Dezember mindestens Lied 1–4 fertig sein. Suno Pro läuft laut Plan nur bis 28.11. → entweder bis dahin alle Lieder 1–4 in drei Sprachen erzeugen (12 Fassungen) oder Suno im Dezember einen Monat neu buchen (Finanzen fragen).
## Ablauf je Lied
1. **Komponist:** Text DE, Melodie-Skizze, Suno-Paket, Bildplan (`liedNN-<name>/de.md`).
2. **Qualität:** Kinderpsychologie + Eltern-Mehrwert prüfen Text und Lernziel.
3. **Dolmetscher ES/FR:** neu dichten nach Silbenraster (`es.md`, `fr.md`).
4. **Suno:** je Sprache erzeugen, getrennte Spuren laden. Erst beim ersten Lied testen, ob die Melodie über die drei Sprachen gleich bleibt.
5. **Remotion:** Bilder nach Bildplan, gesprochene Teile per ElevenLabs.
6. **Cutter:** Schnitt, −14 LUFS, Shorts, Kapitel.
## Offen zur Entscheidung
1. Soll es die eigene Reihe „Pinos Liederbuch“ geben oder laufen Lieder im Wechsel mit „Noa und Lulu im Winter“ (Januar-Plan)?
2. Ab wann: schon im Dezember (zwischen den Türchen) oder ab Januar?
3. Pino in den Liedern wach, auch während des Winterschlafs der Geschichte? (Kinderpsychologie)
4. Karaoke-Text im Bild?
5. Suchbedarf je Thema in DE/ES/FR von Content & Trends prüfen lassen, bevor die Reihenfolge feststeht.

View file

@ -0,0 +1,36 @@
# Suno: Stimme, Stil und ausgewählte Fassungen
Stand 03.11.2026. Suno Pro (Abrechnung bis 03.12.), Konto larakristin_l.
## Feste Stimme und Stil der Reihe
- **Suno-Stimme „Pinos kleine Welt“** (privat), angelegt aus dem Favoriten „Noa in der Mitte“
(Song-ID 25385c27-bb5d-40d6-b3b6-cea78bfdaa0b) über Song-Menü → Remix → Voice. Für jedes neue Lied auswählen.
- **Modell:** v6-mini.
- **Stil (Vorlage, nur BPM und Tonart anpassen):**
`Folk-pop; low, dark-register female half-spoken talk-sing, with a small children's choir joining the chorus; very clear diction, warm clean production, simple four-note glockenspiel hook; soft <BPM> bpm singalong pulse in <Tonart>; glockenspiel lead, acoustic guitar, ukulele, and soft claps, with <Besonderheit> and gentle slowing outro`
- **Exclude styles:** `electronic, autotune, heavy drums, rap, rock` („dark, sad“ nicht, beißt sich mit „dark-register“).
- Schlaflied: „Gentle folk lullaby; … sung softly and quietly, a small children's choir hums gently on the chorus; … slow 72 bpm rocking 6/8 in F major; glockenspiel lead, soft acoustic guitar, ukulele, no drums, calm fading outro“.
## Ausgewählte Fassungen (DE)
| Lied | Fassung | Länge | Suno-Song-ID | Datei (Pino-Kanal\ton\lieder\) |
| --- | --- | --- | --- | --- |
| 1 Eins, zwei – Pino ist dabei! | A | 1:33 | 77404860-d5d7-43ca-8c06-a8347b5f7282 | lied01-zaehlen.wav (noch laden) |
| 2 Rot wie Noas Stiefel | A | 2:06 | c21c3b7c-ecb7-406d-b860-9bbf628507e5 | lied02-farben.wav (noch laden) |
| 3 Einer klein und einer groß | Favorit | 2:19,7 | 25385c27-bb5d-40d6-b3b6-cea78bfdaa0b | lied03-einer-klein-einer-gross.wav ✓ |
| 4 Wer hat den längsten Hals? | A | 2:17 | ea9ccc3b-… | lied04-koerperteile.wav (noch laden) |
| 5 Schrubb, schrubb, Zähne blank | A | 2:07 | 40c407dc-8f8a-4483-9d99-ac3eabb11e68 | lied05-zaehneputzen.wav (noch laden) |
| 12 Gute Nacht, kleine Welt | B | 2:42 | 3b4a3375-ac4e-402d-a1f3-be58e4da7c2a | lied12-gute-nacht.wav (noch laden) |
Titel in Suno: „… (Favorit-Stil)“. Ältere Fassungen „… (DE)“, „(Pro)“, „(Pro mini)“, „(Pro eingängig)“ werden nicht verwendet.
Rechte: alles mit aktivem Pro heruntergeladen = kommerziell (siehe `wissen/suno-lizenz-noa-in-der-mitte.md`).
Download nur als WAV, 20 Downloads pro Monat.
## Hinweise
- Lied 4: Lulu tippt im Video nicht selbst. Sie nickt, Tipp-Punkte poppen am Hals auf (Bildplan in `lied04-koerperteile/de.md`).
- Lied 1 ist mit 1:33 kürzer als geplant (1:45–2:30).
- Bedienung per Claude in Chrome: Liedtext steht im contenteditable `[aria-label="Lyrics editor"]` (fokussieren, Strg+A, Entf, Strg+V aus Set-Clipboard).
Create-Knopf schluckt Klicks, solange er beschäftigt ist → je Lied ~10 s warten und prüfen.
- Melodie-Skizzen (ohne Gesang): `werkzeuge/vorschau.py`, Leseseite: `werkzeuge/lieder-html.mjs` (Ausgabe in `C:\Users\lk-lo\Pino-Kanal\`).

View file

@ -0,0 +1,35 @@
import fs from 'fs'; import path from 'path';
const base = 'C:/Users/lk-lo/youtube/drehbuecher/lieder';
const dirs = fs.readdirSync(base).filter(d => d.startsWith('lied')).sort();
const songs = dirs.map(d => ({id: d, md: fs.readFileSync(path.join(base, d, 'de.md'), 'utf8')}));
const plan = fs.readFileSync(path.join(base, 'plan.md'), 'utf8');
songs.push({id: 'plan', md: plan});
const titles = songs.map(s => (s.md.match(/^#\s+(.+)$/m) || [, s.id])[1].replace(/^Lied \d+:\s*/, ''));
const html = `<!doctype html><html lang="de"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Pinos Liederbuch</title>
<script src="https://cdn.jsdelivr.net/npm/marked@12.0.2/marked.min.js"></script>
<style>
:root{--bg:#fbf7ef;--fg:#2b2620;--muted:#7a6f60;--acc:#c0462e;--line:#e6dccb;--card:#fff}
@media (prefers-color-scheme:dark){:root{--bg:#1d1a16;--fg:#eee6d8;--muted:#a89c8a;--acc:#f08a6c;--line:#3a332a;--card:#26221c}}
body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.55 Georgia,serif}
nav{position:sticky;top:0;background:var(--bg);border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;gap:6px;padding:10px 16px;z-index:2}
nav button{font:inherit;font-size:14px;border:1px solid var(--line);background:var(--card);color:var(--fg);border-radius:999px;padding:5px 12px;cursor:pointer}
nav button.on{background:var(--acc);border-color:var(--acc);color:#fff}
main{max-width:860px;margin:0 auto;padding:16px}
h1{font-size:28px;color:var(--acc)} h2{margin-top:2em;border-bottom:1px solid var(--line);padding-bottom:4px}
table{border-collapse:collapse;width:100%;font-size:14px;display:block;overflow-x:auto} td,th{border:1px solid var(--line);padding:5px 8px;vertical-align:top} th{background:var(--card)}
pre{background:var(--card);border:1px solid var(--line);padding:12px;overflow-x:auto;font-size:13px;white-space:pre-wrap} code{font-size:13px}
.hoer{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px;margin:8px 0 16px;font-size:14px}.hoer audio{display:block;width:100%;margin-top:8px}
blockquote{border-left:3px solid var(--acc);margin-left:0;padding-left:12px;color:var(--muted)}
</style></head><body>
<nav>${titles.map((t,i)=>`<button data-i="${i}">${i<songs.length-1?songs[i].id.match(/\d+/)[0]*1+'. ':''}${t.replace(/[„“"]/g,'').slice(0,34)}</button>`).join('')}</nav>
<main id="m"></main>
<script>
const S=${JSON.stringify(songs.map(s=>s.md))};const A=${JSON.stringify(songs.map(s=>fs.existsSync('C:/Users/lk-lo/Pino-Kanal/Lieder-Vorschau/'+s.id+'.mp3')?'Lieder-Vorschau/'+s.id+'.mp3':''))};
const B=[...document.querySelectorAll('nav button')];
function show(i){document.getElementById('m').innerHTML=(A[i]?'<div class="hoer"><b>▶ Melodie-Vorschau</b> (Refrain – Strophe – Refrain, ohne Gesang; nur zum Hören der Melodie, nicht der Klang des fertigen Lieds)<audio controls preload="none" src="'+A[i]+'"></audio></div>':'')+marked.parse(S[i]);B.forEach((b,j)=>b.classList.toggle('on',i==j));scrollTo(0,0);try{localStorage.lied=i}catch(e){}}
B.forEach(b=>b.onclick=()=>show(+b.dataset.i));
let s=0;try{s=+localStorage.lied||0}catch(e){} show(s<S.length?s:0);
</script></body></html>`;
fs.writeFileSync('C:/Users/lk-lo/Pino-Kanal/Liederbuch-Entwuerfe.html', html);
console.log(titles.join('\n'));

View file

@ -0,0 +1,166 @@
# Melodie-Vorschau der Lied-Entwürfe (Refrain – Strophe – Refrain), ohne Gesang.
import numpy as np, wave, os, sys, subprocess
SR = 44100
OUT = r"C:\Users\lk-lo\Pino-Kanal\Lieder-Vorschau"
os.makedirs(OUT, exist_ok=True)
rng = np.random.default_rng(1)
NAMES = {'C':0,'C#':1,'Db':1,'D':2,'D#':3,'Eb':3,'E':4,'F':5,'F#':6,'Gb':6,'G':7,'G#':8,'Ab':8,'A':9,'A#':10,'Bb':10,'B':11}
def midi(n): # 'F#4'
return 12*(int(n[-1])+1) + NAMES[n[:-1]]
def hz(m): return 440*2**((m-69)/12)
def lead(f, dur):
n = int(SR*(dur+0.25)); t = np.arange(n)/SR
vib = 1 + 0.004*np.sin(2*np.pi*5.2*t)*np.clip((t-0.18)/0.2,0,1)
ph = 2*np.pi*f*np.cumsum(vib)/SR
s = np.sin(ph) + 0.28*np.sin(2*ph) + 0.08*np.sin(3*ph)
env = np.clip(t/0.03,0,1) * np.where(t < dur, 1.0, np.exp(-(t-dur)/0.06)) * (0.85+0.15*np.exp(-t/0.3))
return 0.22*s*env
def glocken(f, dur):
n = int(SR*1.6); t = np.arange(n)/SR
s = np.sin(2*np.pi*2*f*t)*np.exp(-t/0.55) + 0.25*np.sin(2*np.pi*2*f*2.76*t)*np.exp(-t/0.12)
return 0.07*s*np.clip(t/0.002,0,1)
def pluck(f, dur, amp=0.09):
N = int(SR/f); n = int(SR*min(dur+0.4, 3.0))
buf = rng.uniform(-1,1,N); blocks = []
for _ in range(n//N + 1):
blocks.append(buf.copy()); buf = 0.498*(buf + np.roll(buf,-1))
out = np.concatenate(blocks)[:n]
return amp*out*np.clip(np.arange(n)/(SR*0.002),0,1)
def bass(f, dur):
n = int(SR*(dur+0.1)); t = np.arange(n)/SR
s = np.sin(2*np.pi*f*t) + 0.2*np.sin(4*np.pi*f*t)
return 0.16*s*np.exp(-t/0.6)*np.clip(t/0.01,0,1)
def clap():
n = int(SR*0.12); t = np.arange(n)/SR
s = rng.uniform(-1,1,n); s = np.convolve(s, np.ones(6)/6, 'same')
return 0.12*s*np.exp(-t/0.03)
def chord_notes(c):
root = c[0] + (c[1] if len(c)>1 and c[1] in '#b' else '')
rest = c[len(root):]
r = NAMES[root]
iv = [0,3,7] if rest.startswith('m') else [0,4,7]
if '7' in rest: iv = iv + [10]
base = 48 + r if r <= 7 else 36 + r # Gitarrenlage um C3–G3
notes = [base+i for i in iv]
return 40 + (r-4) % 12, notes # Bass-Grundton
def add(mix, sig, at):
i = int(at*SR); j = min(len(mix), i+len(sig))
if j > i: mix[i:j] += sig[:j-i]
def render(name, bpm, sections, strum_every, claps=None, end_chord=None, intro=None):
beat = 60/bpm
total = sum(sum(d for _,d in mel) for mel,_ in sections)
total += sum(d for _,d in intro[1]) if intro else 0
mix = np.zeros(int(SR*(total*beat + 4)))
t0 = 0.0
parts = ([intro] if intro else []) + sections
for mel, chords in parts:
# Melodie
t = t0
for n, d in mel:
if n:
f = hz(midi(n)); add(mix, lead(f, d*beat*0.92), t*beat); add(mix, glocken(f, d*beat), t*beat)
t += d
# Akkorde
t = t0
for c, d in chords:
b, notes = chord_notes(c)
add(mix, bass(hz(b), d*beat), t*beat)
k = 0.0
while k < d - 1e-9:
for idx, m in enumerate(notes):
add(mix, pluck(hz(m), strum_every*beat, 0.07), (t+k)*beat + idx*0.014)
k += strum_every
if claps:
for cb in claps:
pass
t += d
t0 = t
if claps: # Klatscher auf festen Positionen (in Beats ab Start)
for cb in claps: add(mix, clap(), cb*beat)
if end_chord:
b, notes = chord_notes(end_chord)
add(mix, bass(hz(b), 2.5), t0*beat)
for idx, m in enumerate(notes + [notes[0]+12]):
add(mix, pluck(hz(m), 3.0, 0.08), t0*beat + idx*0.03)
add(mix, glocken(hz(m+12), 2), t0*beat + idx*0.03)
# Hall (einfach) + Normalisieren
d = int(0.11*SR); rev = np.zeros_like(mix); rev[d:] = mix[:-d]*0.22
d2 = int(0.23*SR); rev[d2:] += mix[:-d2]*0.12
mix = mix + rev
mix = mix[:int(SR*(t0*beat+3.2))]
mix *= 0.89/np.max(np.abs(mix))
fade = int(SR*1.0); mix[-fade:] *= np.linspace(1,0,fade)
wavp = os.path.join(OUT, name + '.wav')
with wave.open(wavp, 'w') as w:
w.setnchannels(1); w.setsampwidth(2); w.setframerate(SR)
w.writeframes((mix*32767).astype(np.int16).tobytes())
mp3 = os.path.join(OUT, name + '.mp3')
subprocess.run(['ffmpeg','-y','-loglevel','error','-i',wavp,'-af','loudnorm=I=-14:TP=-1.5:LRA=11','-ar','44100','-b:a','160k',mp3], check=True)
os.remove(wavp)
print(name, round(t0*beat+3.2,1), 's')
def L(s): # "G4:1 E4:1 -:2" -> [(note,beats)]
out = []
for tok in s.split():
n, d = tok.split(':'); out.append((None if n == '-' else n, float(d)))
return out
def C(s): return [(c.split(':')[0], float(c.split(':')[1])) for c in s.split()]
# Lied 1 – Zählen, C-Dur, 100 BPM
r1 = (L("G4:1 E4:1 G4:1 E4:1 -:4 A4:1 A4:1 G4:1 G4:1 E4:1 D4:1 -:2 C4:1 D4:1 E4:1 F4:1 G4:1 G4:1 G4:2 A4:.5 G4:.5 F4:.5 E4:.5 D4:1 E4:1 C4:4"),
C("C:4 F:2 G:2 C:4 G:4 C:4 F:4 G:4 C:4"))
s1 = (L("C4:2 D4:2 E4:1 E4:1 D4:1 C4:1 E4:2 F4:2 G4:1 G4:1 F4:1 E4:1 G4:2 A4:.5 G4:.5 F4:.5 E4:.5 E4:.5 D4:.5 D4:1 E4:2 C4:4 -:4"),
C("C:4 G:4 C:4 G:4 F:4 G:4 C:4 C:4"))
render('lied01-zaehlen', 100, [r1, s1, r1], 1, intro=([], C("C:4")), end_chord='C')
# Lied 2 – Farben, G-Dur, 96 BPM
r2 = (L("G4:1 G4:1 G4:1 A4:1 B4:4 B4:1 A4:1 G4:1 A4:1 B4:1 A4:1 A4:2 D4:1 D4:1 E4:1 E4:1 G4:1 G4:1 A4:2 B4:1 B4:1 A4:1 G4:1 A4:1 G4:1 G4:2"),
C("G:4 G:4 C:4 D:4 G:4 C:4 Em:4 G:4"))
s2 = (L("D4:.5 E4:.5 G4:1 D4:.5 E4:.5 G4:1 -:4 G4:.5 A4:.5 B4:.5 A4:.5 G4:.5 E4:.5 -:1 G4:.5 A4:.5 B4:.5 A4:.5 G4:.5 G4:.5 -:1"),
C("G:4 G:4 C:4 G:4"))
render('lied02-farben', 96, [r2, s2, s2, r2], 1, intro=([], C("G:4")), end_chord='G')
# Lied 3 – Einer klein und einer groß, D-Dur, 104 BPM, Zeile = 6 Schläge, Klatscher auf Schlag 5
r3 = (L("F#4:.5 G4:.5 F#4:.5 F#4:.5 A4:.5 A4:.5 B4:1 -:1.5 G4:.25 G4:.25 "
"A4:.5 G4:.5 B4:.5 A4:.5 A4:2 -:2 "
"G4:.5 G4:.5 A4:.5 G4:.25 F#4:.25 G4:.5 F#4:.5 G4:1 -:1.75 A4:.25 "
"B4:.5 A4:.5 G4:.5 F#4:.5 E4:.25 F#4:.25 E4:.5 D4:1 -:2"),
C("D:6 G:3 A7:3 G:6 D:1.5 G:1.5 A:1.5 D:1.5"))
s3 = (L("D4:.5 D4:.5 E4:.5 F#4:.5 A4:.5 F#4:.5 E4:1 -:2 D4:.5 D4:.5 E4:.5 F#4:.5 G4:.5 F#4:.5 D4:1 -:2 "
"D4:.5 D4:.5 E4:.5 F#4:.5 A4:.5 F#4:.5 E4:1 -:2 D4:.5 D4:.5 E4:.5 F#4:.5 G4:.5 F#4:.5 D4:1 -:2"),
C("D:6 G:3 D:3 D:6 G:2 A:2 D:2"))
intro3 = C("D:4")
claps3 = [4 + 6*i + 4 for i in range(12)]
render('lied03-einer-klein-einer-gross', 104, [r3, s3, r3], 2, intro=([], intro3), end_chord='D', claps=claps3)
# Lied 4 – Körperteile, F-Dur, 96 BPM
r4 = (L("F4:1 F4:1 G4:1 A4:1 G4:1 F4:1 -:2 A4:1 F4:1 A4:1 F4:1 G4:1 G4:1 G4:2 C4:1 C4:1 D4:1 E4:1 F4:1 E4:1 D4:1 C4:1 F4:1 F4:1 F4:1 G4:1 A4:1 G4:1 F4:2"),
C("F:4 F:4 F:4 C7:4 Dm:4 Gm:2 C7:2 F:4 C7:2 F:2"))
s4 = (L("C4:.5 D4:.5 E4:.5 F4:.5 G4:.5 F4:.5 -:1 -:4 F4:.5 F4:.5 G4:.5 A4:.5 G4:.5 G4:.5 -:1 F4:.5 F4:.5 G4:.5 A4:.5 G4:.5 F4:.5 -:1"),
C("F:4 F:4 F:4 C7:2 F:2"))
render('lied04-koerperteile', 96, [r4, s4, r4], 1, intro=([], C("F:4")), end_chord='F')
# Lied 5 – Zähneputzen, G-Dur, 96 BPM (Notenname „B“ im Entwurf = H)
r5 = (L("G4:1 G4:1 A4:1 B4:1 G4:4 B4:1 A4:1 B4:1 A4:1 G4:1 A4:1 G4:2 E4:1 E4:1 G4:1 G4:1 A4:1 G4:1 E4:2 E4:1 G4:1 A4:1 G4:1 E4:1 F#4:1 G4:2"),
C("G:4 G:4 G:4 D:4 Em:4 C:4 G:4 D:2 G:2"))
s5 = (L("G4:1 A4:1 B4:1 A4:1 G4:1 E4:1 D4:2 D4:1 E4:1 G4:1 E4:1 G4:1 A4:1 G4:2 G4:1 A4:1 B4:2 -:4"),
C("G:4 D:4 C:4 G:4 G:4 G:4"))
render('lied05-zaehneputzen', 96, [r5, s5, r5], 1, intro=([], C("G:4")), end_chord='G')
# Lied 12 – Gute Nacht, F-Dur, 6/8, 72 punktierte Viertel = 216 Achtel/Min.
r12 = (L("A4:2 G4:1 F4:3 A4:2 G4:1 A4:3 G4:2 F4:1 E4:3 F4:6 C4:2 E4:1 D4:3 F4:2 E4:1 G4:3 "
"A4:2 G4:1 F4:2 E4:1 D4:2 E4:1 C4:3 A4:3 G4:3 A4:3 F4:3 G4:2 F4:1 E4:2 D4:1 F4:6"),
C("F:6 F:6 C:6 F:6 C:6 F:6 Dm:6 C:6 F:6 F:6 C:6 F:6"))
s12 = (L("F4:2 G4:1 A4:3 A4:2 G4:1 F4:3 A4:2 G4:1 F4:3 G4:3 F4:3 E4:2 F4:1 G4:3 A4:2 G4:1 E4:3 -:12"),
C("F:6 F:6 Dm:6 C:6 C:6 F:6 F:6 F:6"))
render('lied12-gute-nacht', 216, [r12, s12, r12], 3, intro=([], C("F:6 F:6")), end_chord='F')

View file

@ -62,3 +62,6 @@ lulu_B_kopf-profil.png 23_806c2339-90e8-42af-92b0-36b390e7d
noa_B1_traurig.png 030f14b3-a839-44d0-90bf-5a89e1fc92a9
pino_B3_schlafen.png dc751ba2-c05b-493b-95e1-c92668f1c627
noa_A_klatschen.png cbb2880c-95c7-4276-9cdf-a7eef639c5a7
lulu_B1_traurig_ohne-schal.png 9bdfe841-8e76-4fda-98db-36251ad27291
lulu_A6_blick-rechts_ohne-schal.png 4780afd7-e375-4135-9ace-51216a25e283
lulu_A4_staunen_ohne-schal.png 6e9c4b48-0ef2-404b-a7b6-69ce79731452

1 noa_A1_augen-zu.png 46_c019cf04-d4ca-4e0c-8567-85858231b
62 noa_B1_traurig.png 030f14b3-a839-44d0-90bf-5a89e1fc92a9
63 pino_B3_schlafen.png dc751ba2-c05b-493b-95e1-c92668f1c627
64 noa_A_klatschen.png cbb2880c-95c7-4276-9cdf-a7eef639c5a7
65 lulu_B1_traurig_ohne-schal.png 9bdfe841-8e76-4fda-98db-36251ad27291
66 lulu_A6_blick-rechts_ohne-schal.png 4780afd7-e375-4135-9ace-51216a25e283
67 lulu_A4_staunen_ohne-schal.png 6e9c4b48-0ef2-404b-a7b6-69ce79731452

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 MiB

1
remotion/.gitignore vendored
View file

@ -2,3 +2,4 @@ node_modules/
out/
public/bibliothek/clips
public/stimmen
public/musik

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View file

@ -8,12 +8,18 @@ import {NEST_BILD} from './baukasten/natur';
import {NestStill, ORTE, OrtStill} from './baukasten/orte';
import {F01} from './folge01/Folge01';
import {F02} from './folge02/Folge02';
import {F03} from './folge03/Folge03';
import {Banner, BannerRahmen, Profilbild} from './kanal/KanalBilder';
import {ShortKompositionen} from './shorts/Short';
import {SHORTS_F01} from './shorts/folge01';
import {SZENEN as SZENEN_F01} from './folge01/Folge01';
import {LIED03_DAUER, Lied03} from './lieder/lied03/Lied03';
const BILD = {fps: 30, width: 1920, height: 1080} as const;
export const Root: React.FC = () => (
<>
<Composition id="Lied03-DE" component={Lied03} durationInFrames={LIED03_DAUER} {...BILD} />
<Composition id="LaterneTest" component={LaterneTest} durationInFrames={420} {...BILD} />
<Composition id="VerformTest" component={VerformTest} durationInFrames={240} {...BILD} />
<Composition id="HintergrundAbend" component={HintergrundAbend} durationInFrames={1} {...BILD} />
@ -21,6 +27,8 @@ export const Root: React.FC = () => (
<Composition id="PapierStruktur" component={PapierStruktur} durationInFrames={1} {...BILD} />
<FolgenKompositionen folge={F01} />
<FolgenKompositionen folge={F02} />
<FolgenKompositionen folge={F03} />
<ShortKompositionen szenen={SZENEN_F01} shorts={SHORTS_F01} />
<Composition id="Kanal-Profilbild" component={Profilbild} durationInFrames={1} fps={30} width={800} height={800} />
<Composition id="Kanal-Banner" component={Banner} durationInFrames={1} fps={30} width={2560} height={1440} />
<Composition id="Kanal-Banner-Rahmen" component={BannerRahmen} durationInFrames={1} fps={30} width={2560} height={1440} />

View file

@ -1,5 +1,6 @@
import React from 'react';
import {AbsoluteFill, Composition, Series, getInputProps, useCurrentFrame} from 'remotion';
import {Musik, type MusikEintrag} from './musik';
import {SCHRIFT} from './untertitel';
import type {Geplant} from './zeit';
@ -15,6 +16,7 @@ export type SzenenEintrag = {
datei: string; // Quelldatei der Szene (für werkzeuge/render.mjs)
plan: {dauer: number; liste: Geplant[]};
K: React.FC;
musik?: MusikEintrag; // Hintergrundmusik der Szene (siehe baukasten/musik.tsx)
};
const BILD = {fps: 30, width: 1920, height: 1080} as const;
@ -65,10 +67,11 @@ const versatzVon = (szenen: SzenenEintrag[], index: number) => szenen.slice(0, i
export const folgenDauer = (szenen: SzenenEintrag[]) => versatzVon(szenen, szenen.length);
const EinzelSzene: React.FC<{szenen: SzenenEintrag[]; index: number}> = ({szenen, index}) => {
const {K} = szenen[index];
const {K, musik, plan} = szenen[index];
return (
<AbsoluteFill style={{background: '#f4ead8'}}>
<K />
{musik && <Musik {...musik} dauer={plan.dauer} zeilen={plan.liste} />}
{istEntwurf() && <Entwurf szenen={szenen} index={index} versatz={versatzVon(szenen, index)} />}
</AbsoluteFill>
);

View file

@ -0,0 +1,59 @@
import React from 'react';
import {Audio, getInputProps, getStaticFiles, interpolate, staticFile, useVideoConfig} from 'remotion';
import type {Geplant} from './zeit';
// Hintergrundmusik einer Szene. Erzeugt mit werkzeuge/musik.mts nach
// public/musik/folgeNN/<name>.mp3. In FolgeNN.tsx je Szene eintragen:
// {name: 'Lied', …, musik: {datei: 'musik/folge01/lied.mp3', lautstaerke: 0.5, ducken: false}}
// Läuft ein Stück über zwei Szenen weiter, bekommt die zweite `ab` = Länge der ersten (Sekunden).
// Abschalten beim Rendern: --props='{"musik": false}'
export type MusikEintrag = {
datei: string;
lautstaerke?: number; // Grundlautstärke 0–1 (ohne Sprache)
ducken?: boolean | number; // während gesprochen wird absenken (true = auf 40 %, oder Faktor)
ab?: number; // Sekunden in das Stück hinein starten
rein?: number; // Einblenden in Sekunden
raus?: number; // Ausblenden in Sekunden
};
const VORHANDEN = new Set(getStaticFiles().map((d) => d.name));
export const Musik: React.FC<MusikEintrag & {dauer: number; zeilen: Geplant[]}> = ({
datei,
lautstaerke = 0.25,
ducken = true,
ab = 0,
rein = 1,
raus = 1.5,
dauer,
zeilen,
}) => {
const {fps} = useVideoConfig();
if (getInputProps().musik === false || !VORHANDEN.has(datei)) return null;
const faktor = ducken === false ? 1 : ducken === true ? 0.4 : ducken;
// Sprechstellen mit etwas Luft davor/danach, damit die Musik weich ausweicht
const sprechen = zeilen.filter((l) => l.audio).map((l) => [l.start - 6, l.ende + 8] as const);
const nah = (f: number) => {
let d = Infinity;
for (const [a, e] of sprechen) d = Math.min(d, f < a ? a - f : f > e ? f - e : 0);
return d;
};
const reinF = Math.max(1, rein * fps);
const rausF = Math.max(1, raus * fps);
return (
<Audio
src={staticFile(datei)}
startFrom={Math.round(ab * fps)}
loop
volume={(f) => {
const blende = Math.min(
interpolate(f, [0, reinF], [0, 1], {extrapolateRight: 'clamp'}),
interpolate(f, [dauer - rausF, dauer], [1, 0], {extrapolateLeft: 'clamp', extrapolateRight: 'clamp'}),
);
const duck = faktor === 1 ? 1 : interpolate(nah(f), [0, 10], [faktor, 1], {extrapolateRight: 'clamp'});
return lautstaerke * blende * duck;
}}
/>
);
};

View file

@ -575,6 +575,173 @@ export const KalenderMalen: React.FC<{p: number; wackeln: number}> = ({p, wackel
);
};
// ---------------------------------------------------------------------------
// Folge 3: Garten mit Raureif (Morgen und Nacht) und Waldrand mit hoher Tanne.
// Lage der Dinge im Frostgarten, die Szenen brauchen sie:
export const HAUS = {x: 540, b: 340, wand: 640, first: 470}; // Gartenhaus: links, Breite, Wandoberkante, Dachfirst
export const BANK = {x: 960, b: 250, sitz: 785}; // Gartenbank: links, Breite, Sitzhöhe (Pino passt darunter)
export const STAPEL_X = 1260; // Holzstapel (wie in Folge 2)
export const FADEN = {x: 1750, y: 700}; // grüner Faden am Zweig rechts vom Holzstapel
const Reif: React.FC<{d: string; breite?: number}> = ({d, breite = 7}) => (
<path d={d} stroke="#f7fbff" strokeWidth={breite} strokeLinecap="round" fill="none" opacity={0.85} filter="url(#aq)" />
);
const Gartenhaus: React.FC<{nacht?: boolean}> = ({nacht}) => {
const {x, b, wand, first} = HAUS;
return (
<g>
<rect x={x + 20} y={wand} width={b - 40} height={BODEN - wand - 20} fill={nacht ? '#4a4256' : '#b98a5e'} filter="url(#aq)" />
{new Array(6).fill(0).map((_, i) => (
<line key={i} x1={x + 40 + i * 52} y1={wand + 10} x2={x + 40 + i * 52} y2={BODEN - 24} stroke={nacht ? '#3c364a' : '#9c7048'} strokeWidth={4} />
))}
<rect x={x + b / 2 - 45} y={wand + 70} width={90} height={BODEN - wand - 90} rx={6} fill={nacht ? '#36304a' : '#7d5a3c'} />
<rect x={x + 50} y={wand + 50} width={70} height={60} fill={nacht ? '#e9c27a' : '#cfe0e6'} stroke={nacht ? '#3c364a' : '#8a6544'} strokeWidth={6} />
{/* Dach */}
<path d={`M ${x - 30} ${wand + 6} L ${x + b / 2} ${first} L ${x + b + 30} ${wand + 6} Z`} fill={nacht ? '#5a3e4a' : '#a8553e'} filter="url(#aq)" />
<Reif d={`M ${x - 26} ${wand + 2} L ${x + b / 2} ${first + 4} L ${x + b + 26} ${wand + 2}`} breite={10} />
</g>
);
};
const Bank: React.FC<{nacht?: boolean}> = ({nacht}) => {
const {x, b, sitz} = BANK;
const holz = nacht ? '#4a3e48' : '#8a6544';
return (
<g>
<rect x={x + 10} y={sitz - 120} width={b - 20} height={18} rx={4} fill={holz} filter="url(#aq)" />
<rect x={x + 10} y={sitz - 80} width={b - 20} height={18} rx={4} fill={holz} filter="url(#aq)" />
<rect x={x} y={sitz} width={b} height={22} rx={5} fill={holz} filter="url(#aq)" />
{[x + 18, x + b - 34].map((lx, i) => (
<rect key={i} x={lx} y={sitz - 130} width={16} height={BODEN - sitz + 128} fill={holz} />
))}
<Reif d={`M ${x + 4} ${sitz + 2} L ${x + b - 4} ${sitz + 2}`} breite={6} />
<Reif d={`M ${x + 14} ${sitz - 120} L ${x + b - 14} ${sitz - 120}`} breite={5} />
</g>
);
};
const Frostwiese: React.FC<{nacht?: boolean}> = ({nacht}) => (
<g>
<path d="M -50 790 C 400 760, 900 780, 1300 770 S 1800 760, 1990 780 L 1990 1100 L -50 1100 Z" fill={nacht ? '#33454e' : '#b9c4b0'} filter="url(#aq)" />
<path d="M -50 900 C 500 880, 1100 900, 1990 880 L 1990 1100 L -50 1100 Z" fill={nacht ? '#2c3d46' : '#aab8a2'} filter="url(#aq)" opacity={0.8} />
{/* Reif-Glitzer im Gras */}
{new Array(160).fill(0).map((_, i) => (
<circle key={i} cx={random('fg' + i) * B} cy={790 + random('fgy' + i) * 290} r={1.5 + random('fgr' + i) * 2.5} fill="#ffffff" opacity={0.5 + random('fgo' + i) * 0.5} />
))}
{/* ein paar braune Blätter, bereift */}
{new Array(18).fill(0).map((_, i) => {
const bx = random('fl' + i) * B;
const by = 830 + random('fly' + i) * 240;
return <ellipse key={i} cx={bx} cy={by} rx={13} ry={6} transform={`rotate(${random('fld' + i) * 50 - 25} ${bx} ${by})`} fill={nacht ? '#4a4048' : '#9a6a4a'} stroke="#f2f6fa" strokeWidth={2} opacity={0.8} />;
})}
</g>
);
export const GartenFrostSVG: React.FC<{nacht?: boolean}> = ({nacht = false}) => (
<svg viewBox={`0 0 ${B} ${H}`} style={{position: 'absolute', inset: 0, width: '100%', height: '100%'}}>
<Filter />
<defs>
<linearGradient id="himmelF" x1="0" y1="0" x2="0" y2="1">
{nacht ? (
<>
<stop offset="0" stopColor="#1d2547" />
<stop offset="0.7" stopColor="#36406b" />
<stop offset="1" stopColor="#4f5a80" />
</>
) : (
<>
<stop offset="0" stopColor="#bcd3e2" />
<stop offset="0.6" stopColor="#e4ecef" />
<stop offset="1" stopColor="#f4f1ea" />
</>
)}
</linearGradient>
<radialGradient id="sonneF">
<stop offset="0" stopColor="#fff8e0" stopOpacity="0.9" />
<stop offset="1" stopColor="#fff8e0" stopOpacity="0" />
</radialGradient>
</defs>
<rect width={B} height={H} fill="url(#himmelF)" />
{nacht ? (
<>
{new Array(50).fill(0).map((_, i) => (
<circle key={i} cx={random('st' + i) * B} cy={random('sty' + i) * 450} r={1.2 + random('str' + i) * 2.2} fill="#fffbe8" opacity={0.5 + random('sto' + i) * 0.5} />
))}
<circle cx={1580} cy={170} r={54} fill="#fbf1d2" filter="url(#aq)" />
</>
) : (
<circle cx={1650} cy={200} r={200} fill="url(#sonneF)" />
)}
<path d="M -50 640 C 300 560, 700 600, 1000 620 S 1600 560, 1990 600 L 1990 900 L -50 900 Z" fill={nacht ? '#3a4566' : '#cfd6d8'} filter="url(#aq)" />
<path d="M -50 700 C 400 650, 800 690, 1200 680 S 1700 650, 1990 690 L 1990 900 L -50 900 Z" fill={nacht ? '#34405a' : '#bcc8c4'} filter="url(#aq)" />
{/* Waldrand in der Ferne rechts (dorthin führt der Faden) */}
{new Array(7).fill(0).map((_, i) => {
const tx = 1560 + i * 62;
const th = 120 + random('ft' + i) * 60;
return <path key={i} d={`M ${tx - 34} 700 L ${tx} ${700 - th} L ${tx + 34} 700 Z`} fill={nacht ? '#26344a' : '#7d9486'} filter="url(#aq)" />;
})}
<Zaun y={600} farbe={nacht ? '#4a4a5c' : '#d2c2a8'} dunkel={nacht ? '#3a3a4c' : '#b4a084'} />
<Reif d="M -20 632 L 1940 632" breite={5} />
<Gartenhaus nacht={nacht} />
<Holzstapel x={STAPEL_X} y={880} nacht={nacht} />
<Reif d={`M ${STAPEL_X - 36} ${880 - 262} L ${STAPEL_X + 466} ${880 - 262}`} breite={9} />
{/* kleiner Strauch rechts vom Holzstapel (daran hängt der Faden) */}
<Ast x={FADEN.x + 20} y={BODEN - 30} w={-100} l={120} d={9} tiefe={3} farbe={nacht ? '#2e2a36' : '#6e5a48'} seed="fs" />
<Frostwiese nacht={nacht} />
<Bank nacht={nacht} />
<Apfelbaum x={300} y={900} s={1.0} farbe={nacht ? '#2e2a36' : '#6e5a4c'} blaetter={false} />
<Korn staerke={nacht ? 0.12 : 0.16} />
</svg>
);
// Waldrand mit der hohen Tanne. Oben in der Tanne hängt der Schal (eigenes Teil in der Szene).
export const TANNE = {x: 1180, spitze: 70, schal: {x: 1150, y: 300}};
const Tanne: React.FC<{x: number; spitze: number; breite: number; farbe: string; dunkel: string; reif?: boolean}> = ({x, spitze, breite, farbe, dunkel, reif = true}) => {
const hoehe = BODEN - spitze;
const lagen = 8;
return (
<g>
<rect x={x - breite * 0.05} y={BODEN - hoehe * 0.12} width={breite * 0.1} height={hoehe * 0.12} fill="#5e4636" />
{new Array(lagen).fill(0).map((_, i) => {
const t = i / (lagen - 1); // 0 oben … 1 unten
const yOben = spitze + t * hoehe * 0.78;
const yUnten = yOben + hoehe * 0.2;
const w = breite * (0.18 + t * 0.82);
return (
<g key={i}>
<path d={`M ${x} ${yOben} L ${x + w / 2} ${yUnten} Q ${x} ${yUnten - 18} ${x - w / 2} ${yUnten} Z`} fill={i % 2 ? farbe : dunkel} filter="url(#aq)" />
{reif && <Reif d={`M ${x - w / 2 + 8} ${yUnten - 4} Q ${x} ${yUnten - 22} ${x + w / 2 - 8} ${yUnten - 4}`} breite={4} />}
</g>
);
})}
</g>
);
};
export const WaldrandSVG: React.FC = () => (
<svg viewBox={`0 0 ${B} ${H}`} style={{position: 'absolute', inset: 0, width: '100%', height: '100%'}}>
<Filter />
<defs>
<linearGradient id="himmelW" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" stopColor="#bcd3e2" />
<stop offset="1" stopColor="#eef0ea" />
</linearGradient>
</defs>
<rect width={B} height={H} fill="url(#himmelW)" />
{/* Wald dahinter */}
{new Array(16).fill(0).map((_, i) => (
<Tanne key={i} x={-40 + i * 130 + random('wt' + i) * 40} spitze={330 + random('wh' + i) * 160} breite={200} farbe="#8aa196" dunkel="#7a9488" reif={false} />
))}
<Frostwiese />
<Tanne x={420} spitze={360} breite={330} farbe="#5f7f62" dunkel="#4f6f55" />
<Tanne x={TANNE.x} spitze={TANNE.spitze} breite={560} farbe="#4f7258" dunkel="#40624a" />
<Tanne x={1760} spitze={300} breite={360} farbe="#5f7f62" dunkel="#4f6f55" />
<Korn staerke={0.16} />
</svg>
);
// Vorberechnete Bilder einbinden
// Orte mit Schrift im Bild gibt es je Sprache (orte/kalender_es.webp …)
export const SPRACH_ORTE = ['kalender'];
@ -594,6 +761,9 @@ export const ORTE: Record<string, React.FC> = {
zimmer_tisch: () => <TischSVG />,
kalender: () => <KalenderSVG />,
kalender_leer: () => <KalenderSVG leer />,
garten_frost: () => <GartenFrostSVG />,
garten_frost_nacht: () => <GartenFrostSVG nacht />,
waldrand: () => <WaldrandSVG />,
};
// Fertiges Nest zum Vorberechnen (440 × 260, Anker bei NEST_BILD.x/y)
export const NestStill: React.FC<{seite: 'hinten' | 'vorne'}> = ({seite}) => (

View file

@ -904,6 +904,62 @@ export const POSEN: Record<string, Pose> = {
924,
723
]
},
"lulu_B1_traurig_ohne-schal": {
"figur": "lulu",
"datei": "bibliothek/figuren/lulu_B1_traurig_ohne-schal.webp",
"x": 322,
"y": 23,
"b": 698,
"h": 736,
"box": [
495,
49,
872,
727
]
},
"lulu_A4_staunen_ohne-schal": {
"figur": "lulu",
"datei": "bibliothek/figuren/lulu_A4_staunen_ohne-schal.webp",
"x": 322,
"y": 23,
"b": 698,
"h": 736,
"box": [
540,
29,
872,
738
]
},
"lulu_A6_blick-rechts_ohne-schal": {
"figur": "lulu",
"datei": "bibliothek/figuren/lulu_A6_blick-rechts_ohne-schal.webp",
"x": 322,
"y": 23,
"b": 698,
"h": 736,
"box": [
571,
35,
857,
733
]
},
"lulu_A5_blick-links_ohne-schal": {
"figur": "lulu",
"datei": "bibliothek/figuren/lulu_A5_blick-links_ohne-schal.webp",
"x": 374.0,
"y": 23,
"b": 698,
"h": 736,
"box": [
519,
35,
805,
733
]
}
};

View file

@ -15,15 +15,15 @@ import {S7, Szene7} from './szene7';
const INTRO = plane('intro', introZeilen(TITEL), INTRO_OPTIONEN);
export const SZENEN: SzenenEintrag[] = [
{name: 'Intro', datei: 'Folge01.tsx', plan: INTRO, K: () => <Intro plan={INTRO} titel={TITEL} posen={['pino_A3_lachen', 'noa_A3_lachen', 'lulu_A3_lachen']} />},
{name: 'Intro', datei: 'Folge01.tsx', plan: INTRO, K: () => <Intro plan={INTRO} titel={TITEL} posen={['pino_A3_lachen', 'noa_A3_lachen', 'lulu_A3_lachen']} />, musik: {datei: 'musik/folge01/intro.mp3', lautstaerke: 0.35, rein: 0.2, raus: 1.2}},
{name: 'Wer raschelt da', datei: 'szene2.tsx', plan: S2, K: Szene2},
{name: 'Der Apfel ist zu hoch', datei: 'szene3.tsx', plan: S3, K: Szene3},
{name: 'Ein Baum mit Flecken', datei: 'szene4.tsx', plan: S4, K: Szene4},
{name: 'Die Blume ist zu tief', datei: 'szene5.tsx', plan: S5, K: Szene5},
{name: 'Zusammen gehts', datei: 'szene6.tsx', plan: S6, K: Szene6},
{name: 'Lied', datei: 'lied.tsx', plan: LIED, K: Lied},
{name: 'Pino ist muede', datei: 'szene7.tsx', plan: S7, K: Szene7},
{name: 'Outro', datei: 'Folge01.tsx', plan: OUTRO, K: () => <Outro posen={['pino_B3_schlafen', 'noa_A_arm-hoch-winken', 'lulu_A3_lachen']} />},
{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 ist muede', datei: 'szene7.tsx', plan: S7, K: Szene7, musik: {datei: 'musik/folge01/schlaflied.mp3', lautstaerke: 0.3, rein: 3, raus: 0.1}},
{name: 'Outro', datei: 'Folge01.tsx', plan: OUTRO, K: () => <Outro posen={['pino_B3_schlafen', 'noa_A_arm-hoch-winken', 'lulu_A3_lachen']} />, musik: {datei: 'musik/folge01/schlaflied.mp3', lautstaerke: 0.3, ab: S7.dauer / 30, rein: 0.1, raus: 2}},
];
export const F01 = baueFolge('F01', SZENEN);

View file

@ -0,0 +1,14 @@
{
"intro": {
"sekunden": 14,
"beschreibung": "Short cheerful instrumental opening jingle for a gentle preschool cartoon. Ukulele, glockenspiel, soft hand claps and light acoustic bass, warm and friendly, major key, 110 bpm. Clear start and a soft, happy ending. No vocals."
},
"lied": {
"sekunden": 42,
"beschreibung": "Instrumental backing track for a simple children's sing-along song, 95 bpm, 4/4, major key. Acoustic guitar strumming, ukulele, glockenspiel melody, soft kick on every beat and light claps on beats 2 and 4. Bright, bouncy and warm, like a picture-book song for 4-year-olds. Steady groove from the very first beat, gentle ending in the last two seconds. No vocals, no lead melody that would compete with singing."
},
"schlaflied": {
"sekunden": 46,
"beschreibung": "Very calm, slow instrumental lullaby for a preschool cartoon at sunset. Music box and soft celesta melody over warm felt piano and quiet strings pad, 60 bpm, major key, dreamy and safe. Fades in softly and fades out at the end. No vocals, no drums."
}
}

View file

@ -1 +1,322 @@
{}
{
"s4/p1": {
"datei": "s4-p1.mp3",
"dauer": 4.28,
"text": "Bäume haben keine Flecken. Und Bäume laufen nicht!"
},
"s4/l1": {
"datei": "s4-l1.mp3",
"dauer": 3.4,
"text": "Hallo, ihr zwei da unten! Ich bin Lulu."
},
"s4/e1": {
"datei": "s4-e1.mp3",
"dauer": 2.43,
"text": "Das ist Lulu, die Giraffe."
},
"s4/e2": {
"datei": "s4-e2.mp3",
"dauer": 4.99,
"text": "Lulu ist sooo groß, dass ihr Kopf fast in den Wolken steckt."
},
"s4/p2": {
"datei": "s4-p2.mp3",
"dauer": 2.85,
"text": "Du bist ja noch viel größer als Noa!"
},
"s4/l2": {
"datei": "s4-l2.mp3",
"dauer": 2.77,
"text": "Von hier oben sehe ich alles."
},
"s4/l3": {
"datei": "s4-l3.mp3",
"dauer": 5.41,
"text": "Ich sehe den Zaun, das Dach und … einen roten Apfel!"
},
"s4/p3": {
"datei": "s4-p3.mp3",
"dauer": 0.91,
"text": "Für mich?"
},
"s4/l4": {
"datei": "s4-l4.mp3",
"dauer": 0.99,
"text": "Für dich."
},
"s4/p4": {
"datei": "s4-p4.mp3",
"dauer": 1.23,
"text": "Danke, Lulu!"
},
"intro/t1": {
"datei": "intro-t1.mp3",
"dauer": 1.96,
"text": "Pinos kleine Welt."
},
"intro/t2": {
"datei": "intro-t2.mp3",
"dauer": 3.24,
"text": "Heute: Zu klein, zu groß."
},
"s2/e1": {
"datei": "s2-e1.mp3",
"dauer": 1.57,
"text": "Das ist Noa."
},
"s2/e2": {
"datei": "s2-e2.mp3",
"dauer": 2.27,
"text": "Noa liebt den Herbst."
},
"s2/e3": {
"datei": "s2-e3.mp3",
"dauer": 4.05,
"text": "Und am allermeisten liebt sie es, in Blätter zu springen."
},
"s2/n1": {
"datei": "s2-n1.mp3",
"dauer": 1.07,
"text": "Hui!"
},
"s2/n2": {
"datei": "s2-n2.mp3",
"dauer": 2.19,
"text": "Oh! Wer bist du denn?"
},
"s2/e4": {
"datei": "s2-e4.mp3",
"dauer": 3.79,
"text": "Schau mal, die Stacheln sind ganz hoch aufgestellt."
},
"s2/e5": {
"datei": "s2-e5.mp3",
"dauer": 3.71,
"text": "Was meinst du: Wie fühlt sich der Kleine gerade?"
},
"s2/e6": {
"datei": "s2-e6.mp3",
"dauer": 2.27,
"text": "Er hat ein bisschen Angst."
},
"s2/e7": {
"datei": "s2-e7.mp3",
"dauer": 2.35,
"text": "Noa kam ja so plötzlich."
},
"s2/n3": {
"datei": "s2-n3.mp3",
"dauer": 3.55,
"text": "Keine Angst. Ich tu dir nichts. Ich bin Noa."
},
"s2/p1": {
"datei": "s2-p1.mp3",
"dauer": 3.32,
"text": "Ich bin Pino. Du bist aber groß."
},
"s2/n4": {
"datei": "s2-n4.mp3",
"dauer": 4.28,
"text": "Groß? Ich bin doch noch klein. Ich bin erst fünf!"
},
"s2/p2": {
"datei": "s2-p2.mp3",
"dauer": 2.27,
"text": "Für mich bist du riesig."
},
"s3/p1": {
"datei": "s3-p1.mp3",
"dauer": 4.52,
"text": "Hmm, ein Apfel! Der letzte vom ganzen Baum."
},
"s3/p2": {
"datei": "s3-p2.mp3",
"dauer": 1.49,
"text": "Hopp! Hopp!"
},
"s3/p3": {
"datei": "s3-p3.mp3",
"dauer": 1.65,
"text": "Ich bin zu klein."
},
"s3/n1": {
"datei": "s3-n1.mp3",
"dauer": 1.88,
"text": "Warte, ich helfe dir!"
},
"s3/n2": {
"datei": "s3-n2.mp3",
"dauer": 3.32,
"text": "Hmpf. Für den Apfel bin ich auch zu klein."
},
"s3/e1": {
"datei": "s3-e1.mp3",
"dauer": 3.87,
"text": "Pino ist zu klein. Noa ist auch zu klein."
},
"s3/e2": {
"datei": "s3-e2.mp3",
"dauer": 2.59,
"text": "Wer könnte den Apfel wohl erreichen?"
},
"s4/n1": {
"datei": "s4-n1.mp3",
"dauer": 3.24,
"text": "Pino, guck mal! Ein Baum mit Flecken!"
},
"s5/l1": {
"datei": "s5-l1.mp3",
"dauer": 3.71,
"text": "Oh, wie schön! Eine blaue Blume."
},
"s5/l2": {
"datei": "s5-l2.mp3",
"dauer": 2.69,
"text": "Die möchte ich so gern riechen."
},
"s5/l3": {
"datei": "s5-l3.mp3",
"dauer": 3.4,
"text": "Uiuiui! Ich komme nicht runter."
},
"s5/l4": {
"datei": "s5-l4.mp3",
"dauer": 1.96,
"text": "Ich bin zu groß!"
},
"s5/e1": {
"datei": "s5-e1.mp3",
"dauer": 2.51,
"text": "Lulu ist zu groß für die Blume."
},
"s5/e2": {
"datei": "s5-e2.mp3",
"dauer": 4.6,
"text": "Aber wer ist ganz klein und ganz nah am Boden?"
},
"s5/n1": {
"datei": "s5-n1.mp3",
"dauer": 2.19,
"text": "Ja, genau! Pino!"
},
"s6/l1": {
"datei": "s6-l1.mp3",
"dauer": 2.59,
"text": "Mmmh! Danke, ihr zwei!"
},
"s6/e1": {
"datei": "s6-e1.mp3",
"dauer": 2.77,
"text": "Lulu kommt an die Sachen ganz oben."
},
"s6/e2": {
"datei": "s6-e2.mp3",
"dauer": 2.77,
"text": "Pino kommt an die Sachen ganz unten."
},
"s6/e3": {
"datei": "s6-e3.mp3",
"dauer": 2.85,
"text": "Und Noa ist genau in der Mitte."
},
"s6/e4": {
"datei": "s6-e4.mp3",
"dauer": 2.59,
"text": "Zusammen kommen sie überall hin."
},
"lied/r1": {
"datei": "lied-r1.mp3",
"dauer": 2.59,
"text": "Einer klein und einer groß,"
},
"lied/r2": {
"datei": "lied-r2.mp3",
"dauer": 3.24,
"text": "und dazwischen – na, wer bloß?"
},
"lied/r3": {
"datei": "lied-r3.mp3",
"dauer": 2.35,
"text": "Noa steht in der Mitte drin,"
},
"lied/r4": {
"datei": "lied-r4.mp3",
"dauer": 2.35,
"text": "zusammen kriegen wir alles hin!"
},
"lied/s1": {
"datei": "lied-s1.mp3",
"dauer": 2.43,
"text": "Oben hängt ein Apfel rund,"
},
"lied/s2": {
"datei": "lied-s2.mp3",
"dauer": 2.19,
"text": "Lulu holt ihn mit dem Mund."
},
"lied/s3": {
"datei": "lied-s3.mp3",
"dauer": 2.27,
"text": "Unten blüht die Blume blau,"
},
"lied/s4": {
"datei": "lied-s4.mp3",
"dauer": 2.77,
"text": "Pino pflückt sie, ganz genau!"
},
"lied/w1": {
"datei": "lied-w1.mp3",
"dauer": 2.59,
"text": "Einer klein und einer groß,"
},
"lied/w2": {
"datei": "lied-w2.mp3",
"dauer": 3.32,
"text": "und dazwischen – na, wer bloß?"
},
"lied/w3": {
"datei": "lied-w3.mp3",
"dauer": 2.35,
"text": "Noa steht in der Mitte drin,"
},
"lied/w4": {
"datei": "lied-w4.mp3",
"dauer": 2.27,
"text": "zusammen kriegen wir alles hin!"
},
"s7/p1": {
"datei": "s7-p1.mp3",
"dauer": 3.71,
"text": "Hoaaah. Ich bin auf einmal so müde."
},
"s7/n1": {
"datei": "s7-n1.mp3",
"dauer": 3.24,
"text": "Jetzt schon? Es ist doch noch gar nicht Nacht."
},
"s7/e1": {
"datei": "s7-e1.mp3",
"dauer": 3.79,
"text": "Pino ist müde. Heute war ein langer Tag."
},
"s7/e2": {
"datei": "s7-e2.mp3",
"dauer": 3.32,
"text": "Und du? Was kannst du schon richtig gut?"
},
"s7/e3": {
"datei": "s7-e3.mp3",
"dauer": 4.21,
"text": "Jeder kann etwas gut. Und jeder braucht mal Hilfe."
},
"s7/e4": {
"datei": "s7-e4.mp3",
"dauer": 1.41,
"text": "Zusammen geht’s."
},
"s7/t1": {
"datei": "s7-t1.mp3",
"dauer": 1.8,
"text": "Tschüss! Bis bald!"
}
}

View file

@ -1 +1,292 @@
{}
{
"intro/t1": {
"datei": "intro-t1.mp3",
"dauer": 2.12,
"text": "El pequeño mundo de Pino."
},
"intro/t2": {
"datei": "intro-t2.mp3",
"dauer": 2.69,
"text": "Hoy: Pino tiene sueño."
},
"s2/e1": {
"datei": "s2-e1.mp3",
"dauer": 2.77,
"text": "En el jardín de Noa ya hace frío."
},
"s2/e2": {
"datei": "s2-e2.mp3",
"dauer": 3.55,
"text": "Los árboles han perdido casi todas sus hojas."
},
"s2/p1": {
"datei": "s2-p1.mp3",
"dauer": 1.57,
"text": "Uaaaah."
},
"s2/n1": {
"datei": "s2-n1.mp3",
"dauer": 2.43,
"text": "¡Buenos días, Pino! ¿Jugamos?"
},
"s2/p2": {
"datei": "s2-p2.mp3",
"dauer": 5.25,
"text": "¡Sí! Estoy muy despierto. Muuuy… despierto…"
},
"s2/n2": {
"datei": "s2-n2.mp3",
"dauer": 1.8,
"text": "¿Pino? ¡Pino!"
},
"s2/p3": {
"datei": "s2-p3.mp3",
"dauer": 2.59,
"text": "¿Qué? ¡Yo no estaba durmiendo!"
},
"s2/e3": {
"datei": "s2-e3.mp3",
"dauer": 2.19,
"text": "Sí que estaba durmiendo."
},
"s2/e4": {
"datei": "s2-e4.mp3",
"dauer": 3.47,
"text": "¿Tú qué crees? ¿Por qué tiene Pino tanto sueño?"
},
"s3/l1": {
"datei": "s3-l1.mp3",
"dauer": 1.96,
"text": "¡Buenos días a los dos!"
},
"s3/l2": {
"datei": "s3-l2.mp3",
"dauer": 6.77,
"text": "Desde aquí arriba lo veo: los pájaros se van volando, muy lejos, hacia el sur."
},
"s3/l3": {
"datei": "s3-l3.mp3",
"dauer": 4.05,
"text": "Y los árboles están desnudos. Ya llega el invierno."
},
"s3/e1": {
"datei": "s3-e1.mp3",
"dauer": 4.28,
"text": "Cuando hace frío, los erizos casi no encuentran comida."
},
"s3/e2": {
"datei": "s3-e2.mp3",
"dauer": 3.71,
"text": "Por eso hacen algo muy especial: duermen."
},
"s3/e3": {
"datei": "s3-e3.mp3",
"dauer": 4.99,
"text": "Todo el invierno, hasta la primavera. Eso se llama hibernar."
},
"s3/p1": {
"datei": "s3-p1.mp3",
"dauer": 4.68,
"text": "¿Todo el invierno? ¡Pero entonces me pierdo la Fiesta del Invierno!"
},
"s3/e4": {
"datei": "s3-e4.mp3",
"dauer": 3.55,
"text": "Mira, las púas de Pino cuelgan hacia abajo."
},
"s3/e5": {
"datei": "s3-e5.mp3",
"dauer": 2.12,
"text": "¿Cómo se siente Pino ahora?"
},
"s3/e6": {
"datei": "s3-e6.mp3",
"dauer": 2.59,
"text": "Sí. Pino está triste."
},
"s3/n1": {
"datei": "s3-n1.mp3",
"dauer": 4.52,
"text": "Ay, Pino. Todavía falta mucho para la Fiesta del Invierno."
},
"s4/n1": {
"datei": "s4-n1.mp3",
"dauer": 4.28,
"text": "Si tienes tanto sueño, necesitas una cama calentita."
},
"s4/e1": {
"datei": "s4-e1.mp3",
"dauer": 3.63,
"text": "Para el invierno, los erizos se hacen un nido."
},
"s4/e2": {
"datei": "s4-e2.mp3",
"dauer": 5.25,
"text": "Con muchísimas hojas, debajo de un seto o de un montón de leña."
},
"s4/e3": {
"datei": "s4-e3.mp3",
"dauer": 2.43,
"text": "Allí está seco y calentito."
},
"s4/n2": {
"datei": "s4-n2.mp3",
"dauer": 1.49,
"text": "¿Cuentas conmigo?"
},
"s4/c1": {
"datei": "s4-c1.mp3",
"dauer": 0.99,
"text": "Uno…"
},
"s4/c2": {
"datei": "s4-c2.mp3",
"dauer": 0.99,
"text": "Dos…"
},
"s4/c3": {
"datei": "s4-c3.mp3",
"dauer": 0.99,
"text": "Tres…"
},
"s4/c4": {
"datei": "s4-c4.mp3",
"dauer": 1.15,
"text": "Cuatro…"
},
"s4/c5": {
"datei": "s4-c5.mp3",
"dauer": 0.91,
"text": "¡Cinco!"
},
"s4/l1": {
"datei": "s4-l1.mp3",
"dauer": 4.36,
"text": "¡Aquí arriba quedan algunas! Nadie más llega hasta aquí."
},
"s4/l2": {
"datei": "s4-l2.mp3",
"dauer": 1.96,
"text": "¡Uy! ¡Perdón!"
},
"s4/n3": {
"datei": "s4-n3.mp3",
"dauer": 3.63,
"text": "No pasa nada. Así tenemos todavía más hojas."
},
"s4/e4": {
"datei": "s4-e4.mp3",
"dauer": 3.55,
"text": "Un nido de erizo necesita muchas hojas."
},
"s4/e5": {
"datei": "s4-e5.mp3",
"dauer": 7.89,
"text": "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."
},
"lied/r1": {
"datei": "lied-r1.mp3",
"dauer": 2.35,
"text": "Uno pequeño y otra alta,"
},
"lied/r2": {
"datei": "lied-r2.mp3",
"dauer": 3.24,
"text": "y en el medio… ¿quién nos falta?"
},
"lied/r3": {
"datei": "lied-r3.mp3",
"dauer": 3.24,
"text": "Noa, Noa, en el centro está,"
},
"lied/r4": {
"datei": "lied-r4.mp3",
"dauer": 2.19,
"text": "¡y juntos sí se podrá!"
},
"s5/p1": {
"datei": "s5-p1.mp3",
"dauer": 4.6,
"text": "¡No! ¡No quiero dormir hasta que llegue la Fiesta del Invierno!"
},
"s5/l1": {
"datei": "s5-l1.mp3",
"dauer": 3.63,
"text": "¡Pero Pino, si tienes muchísimo sueño!"
},
"s5/e1": {
"datei": "s5-e1.mp3",
"dauer": 6.61,
"text": "Mmm. ¿Qué pueden hacer Noa y Lulu para que Pino se quede despierto hasta la Fiesta del Invierno?"
},
"s5/e2": {
"datei": "s5-e2.mp3",
"dauer": 1.31,
"text": "¿Tú qué crees?"
},
"s5/n1": {
"datei": "s5-n1.mp3",
"dauer": 1.41,
"text": "¡Tengo una idea!"
},
"s6/l1": {
"datei": "s6-l1.mp3",
"dauer": 2.12,
"text": "¿Qué estás dibujando, Noa?"
},
"s6/n1": {
"datei": "s6-n1.mp3",
"dauer": 3.63,
"text": "¡Un calendario! Con veinticuatro ventanitas."
},
"s6/n2": {
"datei": "s6-n2.mp3",
"dauer": 6.69,
"text": "Cada día abrimos una. Y detrás de cada ventanita hay algo que mantiene despierto a Pino."
},
"s6/p1": {
"datei": "s6-p1.mp3",
"dauer": 1.23,
"text": "¿Qué cosa?"
},
"s6/n3": {
"datei": "s6-n3.mp3",
"dauer": 5.49,
"text": "Algo para descubrir, para hacer manualidades, para hornear y para cantar."
},
"s6/n4": {
"datei": "s6-n4.mp3",
"dauer": 4.83,
"text": "¡Y cuando abramos la última ventanita, será la Fiesta del Invierno!"
},
"s6/p2": {
"datei": "s6-p2.mp3",
"dauer": 2.43,
"text": "¡Me hacen cosquillas las púas!"
},
"s7/n1": {
"datei": "s7-n1.mp3",
"dauer": 2.93,
"text": "Que duermas bien, Pino. Solo hasta mañana."
},
"s7/e1": {
"datei": "s7-e1.mp3",
"dauer": 6.43,
"text": "A partir del uno de diciembre, Noa, Lulu y Pino abren una ventanita cada día."
},
"s7/e2": {
"datei": "s7-e2.mp3",
"dauer": 4.91,
"text": "¡Y tú puedes participar! ¿Llegarás con Pino hasta la Fiesta del Invierno?"
},
"s7/t1": {
"datei": "s7-t1.mp3",
"dauer": 2.19,
"text": "¡Adiós! ¡Hasta pronto!"
},
"s7/p1": {
"datei": "s7-p1.mp3",
"dauer": 1.41,
"text": "…hasta pronto…"
}
}

View file

@ -1 +1,292 @@
{}
{
"intro/t1": {
"datei": "intro-t1.mp3",
"dauer": 2.04,
"text": "Le petit monde de Pino."
},
"intro/t2": {
"datei": "intro-t2.mp3",
"dauer": 2.77,
"text": "Aujourd'hui : Pino a sommeil."
},
"s2/e1": {
"datei": "s2-e1.mp3",
"dauer": 2.27,
"text": "Il fait froid dans le jardin de Noa."
},
"s2/e2": {
"datei": "s2-e2.mp3",
"dauer": 3.16,
"text": "Les arbres ont perdu presque toutes leurs feuilles."
},
"s2/p1": {
"datei": "s2-p1.mp3",
"dauer": 1.65,
"text": "Ouaaaah."
},
"s2/n1": {
"datei": "s2-n1.mp3",
"dauer": 1.96,
"text": "Bonjour, Pino ! On joue ?"
},
"s2/p2": {
"datei": "s2-p2.mp3",
"dauer": 4.91,
"text": "Oui ! Je suis tout réveillé. Tout… ré…veillé…"
},
"s2/n2": {
"datei": "s2-n2.mp3",
"dauer": 1.96,
"text": "Pino ? Pino !"
},
"s2/p3": {
"datei": "s2-p3.mp3",
"dauer": 2.12,
"text": "Quoi ? Je ne dormais pas !"
},
"s2/e3": {
"datei": "s2-e3.mp3",
"dauer": 1.96,
"text": "Mais si, il dormait."
},
"s2/e4": {
"datei": "s2-e4.mp3",
"dauer": 4.05,
"text": "Qu'est-ce que tu en penses : pourquoi Pino a-t-il tellement sommeil ?"
},
"s3/l1": {
"datei": "s3-l1.mp3",
"dauer": 1.65,
"text": "Bonjour, vous deux !"
},
"s3/l2": {
"datei": "s3-l2.mp3",
"dauer": 4.99,
"text": "D'ici, je vois que les oiseaux s'envolent, très loin, vers le sud."
},
"s3/l3": {
"datei": "s3-l3.mp3",
"dauer": 3.55,
"text": "Et les arbres sont tout nus. L'hiver arrive."
},
"s3/e1": {
"datei": "s3-e1.mp3",
"dauer": 4.36,
"text": "Quand il fait froid, les hérissons ne trouvent presque plus rien à manger."
},
"s3/e2": {
"datei": "s3-e2.mp3",
"dauer": 4.36,
"text": "Alors ils font quelque chose de très spécial : ils dorment."
},
"s3/e3": {
"datei": "s3-e3.mp3",
"dauer": 4.36,
"text": "Tout l'hiver, jusqu'au printemps. Ça s'appelle l'hibernation."
},
"s3/p1": {
"datei": "s3-p1.mp3",
"dauer": 3.47,
"text": "Tout l'hiver ? Mais alors je vais rater la fête de l'hiver !"
},
"s3/e4": {
"datei": "s3-e4.mp3",
"dauer": 3.4,
"text": "Regarde, les piquants de Pino pendent tout mous."
},
"s3/e5": {
"datei": "s3-e5.mp3",
"dauer": 2.04,
"text": "Comment se sent Pino maintenant ?"
},
"s3/e6": {
"datei": "s3-e6.mp3",
"dauer": 2.51,
"text": "Oui. Pino est triste."
},
"s3/n1": {
"datei": "s3-n1.mp3",
"dauer": 4.83,
"text": "Oh, Pino. La fête de l'hiver, c'est encore dans très longtemps."
},
"s4/n1": {
"datei": "s4-n1.mp3",
"dauer": 3.79,
"text": "Si tu as tellement sommeil, il te faut un lit bien chaud."
},
"s4/e1": {
"datei": "s4-e1.mp3",
"dauer": 3.4,
"text": "Pour l'hiver, les hérissons se construisent un nid."
},
"s4/e2": {
"datei": "s4-e2.mp3",
"dauer": 4.05,
"text": "Avec plein de feuilles, sous une haie ou sous un tas de bois."
},
"s4/e3": {
"datei": "s4-e3.mp3",
"dauer": 2.51,
"text": "Là, c'est sec et bien chaud."
},
"s4/n2": {
"datei": "s4-n2.mp3",
"dauer": 1.31,
"text": "Tu comptes avec moi ?"
},
"s4/c1": {
"datei": "s4-c1.mp3",
"dauer": 0.91,
"text": "Un…"
},
"s4/c2": {
"datei": "s4-c2.mp3",
"dauer": 0.84,
"text": "Deux…"
},
"s4/c3": {
"datei": "s4-c3.mp3",
"dauer": 0.99,
"text": "Trois…"
},
"s4/c4": {
"datei": "s4-c4.mp3",
"dauer": 0.99,
"text": "Quatre…"
},
"s4/c5": {
"datei": "s4-c5.mp3",
"dauer": 0.91,
"text": "Cinq !"
},
"s4/l1": {
"datei": "s4-l1.mp3",
"dauer": 3.63,
"text": "Il en reste là-haut ! Personne d'autre ne peut les attraper."
},
"s4/l2": {
"datei": "s4-l2.mp3",
"dauer": 1.65,
"text": "Oh ! Pardon !"
},
"s4/n3": {
"datei": "s4-n3.mp3",
"dauer": 3.63,
"text": "Ce n'est pas grave. Comme ça, on a encore plus de feuilles."
},
"s4/e4": {
"datei": "s4-e4.mp3",
"dauer": 2.93,
"text": "Un nid de hérisson a besoin de beaucoup de feuilles."
},
"s4/e5": {
"datei": "s4-e5.mp3",
"dauer": 7.24,
"text": "Chers parents : si vous laissez un tas de feuilles dans votre jardin, vous offrez peut-être un petit lit d'hiver à un hérisson."
},
"lied/r1": {
"datei": "lied-r1.mp3",
"dauer": 3,
"text": "Un tout petit, une très grande,"
},
"lied/r2": {
"datei": "lied-r2.mp3",
"dauer": 2.12,
"text": "Noa au milieu de la bande."
},
"lied/r3": {
"datei": "lied-r3.mp3",
"dauer": 2.93,
"text": "En haut, en bas, et entre les deux –"
},
"lied/r4": {
"datei": "lied-r4.mp3",
"dauer": 2.27,
"text": "ensemble, on fait de notre mieux !"
},
"s5/p1": {
"datei": "s5-p1.mp3",
"dauer": 3.47,
"text": "Non ! Je ne veux pas dormir avant la fête de l'hiver !"
},
"s5/l1": {
"datei": "s5-l1.mp3",
"dauer": 3.16,
"text": "Mais Pino, tu es tellement fatigué !"
},
"s5/e1": {
"datei": "s5-e1.mp3",
"dauer": 5.88,
"text": "Hmm. Que peuvent faire Noa et Lulu pour que Pino reste réveillé jusqu'à la fête de l'hiver ?"
},
"s5/e2": {
"datei": "s5-e2.mp3",
"dauer": 1.57,
"text": "Qu'est-ce que tu en penses ?"
},
"s5/n1": {
"datei": "s5-n1.mp3",
"dauer": 1.23,
"text": "J'ai une idée !"
},
"s6/l1": {
"datei": "s6-l1.mp3",
"dauer": 1.8,
"text": "Qu'est-ce que tu dessines, Noa ?"
},
"s6/n1": {
"datei": "s6-n1.mp3",
"dauer": 3.71,
"text": "Un calendrier ! Avec vingt-quatre petites portes."
},
"s6/n2": {
"datei": "s6-n2.mp3",
"dauer": 7,
"text": "Chaque jour, on en ouvre une. Et derrière chaque petite porte, il y a quelque chose qui garde Pino réveillé."
},
"s6/p1": {
"datei": "s6-p1.mp3",
"dauer": 0.99,
"text": "Quoi donc ?"
},
"s6/n3": {
"datei": "s6-n3.mp3",
"dauer": 4.83,
"text": "Quelque chose à découvrir, à bricoler, à cuisiner et à chanter."
},
"s6/n4": {
"datei": "s6-n4.mp3",
"dauer": 4.91,
"text": "Et quand la dernière petite porte sera ouverte, ce sera la fête de l'hiver !"
},
"s6/p2": {
"datei": "s6-p2.mp3",
"dauer": 2.12,
"text": "Mes piquants me chatouillent !"
},
"s7/n1": {
"datei": "s7-n1.mp3",
"dauer": 2.69,
"text": "Dors bien, Pino. Juste jusqu'à demain."
},
"s7/e1": {
"datei": "s7-e1.mp3",
"dauer": 6.53,
"text": "À partir du premier décembre, Noa, Lulu et Pino ouvrent une petite porte chaque jour."
},
"s7/e2": {
"datei": "s7-e2.mp3",
"dauer": 5.49,
"text": "Et toi aussi, tu peux participer ! Est-ce que tu arriveras avec Pino jusqu'à la fête de l'hiver ?"
},
"s7/t1": {
"datei": "s7-t1.mp3",
"dauer": 2.04,
"text": "Au revoir ! À bientôt !"
},
"s7/p1": {
"datei": "s7-p1.mp3",
"dauer": 1.15,
"text": "…à bientôt…"
}
}

View file

@ -0,0 +1,27 @@
import React from 'react';
import {INTRO_OPTIONEN, Intro, OUTRO, Outro, introZeilen} from '../baukasten/buch';
import {baueFolge, type SzenenEintrag} from '../baukasten/folge';
import {LIED, Lied} from './lied';
import {TITEL, plane} from './plan';
import {S2, Szene2} from './szene2';
import {S3, Szene3} from './szene3';
import {S4, Szene4} from './szene4';
import {S5, Szene5} from './szene5';
import {S6, Szene6} from './szene6';
// Folge 3 „Lulus Schal ist weg“ (1. Advent) – per Code aus der Figuren-Bibliothek.
const INTRO = plane('intro', introZeilen(TITEL), INTRO_OPTIONEN);
export const SZENEN: SzenenEintrag[] = [
{name: 'Intro', datei: 'Folge03.tsx', plan: INTRO, K: () => <Intro plan={INTRO} titel={TITEL} posen={['pino_A4_staunen', 'noa_A4_staunen', 'lulu_B1_traurig_ohne-schal']} />},
{name: 'Wo ist der Schal', datei: 'szene2.tsx', plan: S2, K: Szene2},
{name: 'Suchen', datei: 'szene3.tsx', plan: S3, K: Szene3},
{name: 'In der Tanne', datei: 'szene4.tsx', plan: S4, K: Szene4},
{name: 'Refrain', datei: 'lied.tsx', plan: LIED, K: Lied},
{name: 'Der Kranz', datei: 'szene5.tsx', plan: S5, K: Szene5},
{name: 'Gute Nacht', datei: 'szene6.tsx', plan: S6, K: Szene6},
{name: 'Outro', datei: 'Folge03.tsx', plan: OUTRO, K: () => <Outro posen={['pino_B3_schlafen', 'noa_A_arm-hoch-winken', 'lulu_A3_lachen']} />},
];
export const F03 = baueFolge('F03', SZENEN);

View file

@ -0,0 +1,65 @@
import React from 'react';
import {random, useCurrentFrame} from 'remotion';
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 {TEXTE, plane} from './plan';
// Refrain „Einer klein und einer groß“ am Waldrand (wie in Folge 1, nur der Refrain).
const TAKT = 19;
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: React.FC = () => {
const f = useCurrentFrame();
const {z, dauer} = LIED;
const schlag = Math.abs(Math.sin((f * Math.PI) / TAKT));
const wipp = (phase: number, h: number) => -Math.abs(Math.sin((f * Math.PI) / TAKT + phase)) * h;
const schwank = (phase: number, g: number) => Math.sin((f * Math.PI) / (2 * TAKT) + phase) * g;
const noaPose: [number, string][] = [[0, 'noa_A3_lachen'], ...klatschFolge(z.r1.start, z.r4.start, TAKT), [z.r4.start, 'noa_A_arme-hoch']];
return (
<>
<Kamera x={1000} y={640} zoom={1.25}>
<Ort name="waldrand" />
<Figur pose="lulu_A3_lachen" x={1300} y={BODEN} drehung={schwank(0.5, 2.2)} stauchY={1 - 0.012 * schlag} />
<Figur pose={noaPose} x={980} y={BODEN + wipp(0.3, 10)} drehung={schwank(0, 3)} blende={3} />
<Figur pose="pino_A3_lachen" x={760} y={BODEN + wipp(0, 16)} drehung={schwank(1, 4)} stauchY={1 - 0.03 * schlag} />
</Kamera>
{new Array(6).fill(0).map((_, i) => {
const t = ((f + i * 30) % 180) / 180;
return (
<div
key={i}
style={{
position: 'absolute',
left: 200 + random(`n${i}`) * 1500,
top: 700 - t * 600,
fontSize: 60,
color: ['#c8423a', '#3f5a8a', '#5f8a4a'][i % 3],
opacity: Math.sin(t * Math.PI) * 0.9,
}}
>
♪
</div>
);
})}
<div style={{position: 'absolute', top: 60, left: 0, right: 0, textAlign: 'center', fontFamily: SCHRIFT, fontWeight: 600, fontSize: 40, color: '#4f6a58', opacity: Math.min(1, f / 20)}}>
♫ {TEXTE.lied} ♫
</div>
<Vignette />
<Untertitel zeilen={LIED.liste} />
<Blende dauer={dauer} rein={12} raus={12} />
</>
);
};

View file

@ -0,0 +1,29 @@
import {SPRACHE, type FolgenTexte} from '../baukasten/sprache';
import {plane as basis, type PlanOptionen, type Zeile} from '../baukasten/zeit';
import DE from './texte/de.json';
import ES from './texte/es.json';
import FR from './texte/fr.json';
import STIMMEN_DE from './stimmen/de.json';
import STIMMEN_ES from './stimmen/es.json';
import STIMMEN_FR from './stimmen/fr.json';
// Sprechtexte stehen nur in texte/<sprache>.json (Schlüssel „szene/zeile“),
// die Szenen enthalten nur Ablauf und Bewegung. Aufnahmen je Sprache in
// stimmen/<sprache>.json bzw. public/stimmen/folge03/<sprache>/ (erzeugt von
// werkzeuge/stimmen.mts).
export const TEXTE: FolgenTexte = {de: DE, es: ES, fr: FR}[SPRACHE];
const AUFNAHMEN = {de: STIMMEN_DE, es: STIMMEN_ES, fr: STIMMEN_FR}[SPRACHE];
export const TITEL = TEXTE.titel;
// Zeitplan einer Szene dieser Folge, mit den Texten der gewählten Sprache
export const plane = (szene: string, zeilen: Zeile[], opt: PlanOptionen = {}) =>
basis(
zeilen.map((z) => {
if (z.text !== undefined || !z.wer) return z;
const text = TEXTE.zeilen[`${szene}/${z.id}`];
return {...z, text: text ?? `[fehlt: ${szene}/${z.id}]`};
}),
{...opt, szene, aufnahmen: AUFNAHMEN, ordner: `stimmen/folge03/${SPRACHE}`},
);

View file

@ -0,0 +1,242 @@
{
"intro/t1": {
"datei": "intro-t1.mp3",
"dauer": 2.04,
"text": "Pinos kleine Welt."
},
"intro/t2": {
"datei": "intro-t2.mp3",
"dauer": 3,
"text": "Heute: Lulus Schal ist weg."
},
"s2/e1": {
"datei": "s2-e1.mp3",
"dauer": 4.6,
"text": "Es ist ein kalter Morgen. Alles glitzert vom Raureif."
},
"s2/l1": {
"datei": "s2-l1.mp3",
"dauer": 5.56,
"text": "Brrr! Mein Hals! Mein ganzer langer Hals ist kalt!"
},
"s2/l2": {
"datei": "s2-l2.mp3",
"dauer": 3.47,
"text": "Mein Schal … mein Schal ist weg!"
},
"s2/n1": {
"datei": "s2-n1.mp3",
"dauer": 2.12,
"text": "Lulu! Was ist los?"
},
"s2/p1": {
"datei": "s2-p1.mp3",
"dauer": 2.93,
"text": "Hoaaah … was ist denn hier los?"
},
"s2/e2": {
"datei": "s2-e2.mp3",
"dauer": 6.03,
"text": "Lulu hat einen sehr langen Hals. Ohne Schal friert sie von oben bis unten."
},
"s2/e3": {
"datei": "s2-e3.mp3",
"dauer": 3.32,
"text": "Was meinst du, wo könnte der Schal sein?"
},
"s3/n1": {
"datei": "s3-n1.mp3",
"dauer": 3.55,
"text": "Wir suchen überall! Oben und unten!"
},
"s3/l1": {
"datei": "s3-l1.mp3",
"dauer": 1.96,
"text": "Ich schau auf dem Dach."
},
"s3/l2": {
"datei": "s3-l2.mp3",
"dauer": 2.93,
"text": "Nein. Da sitzt nur eine Krähe."
},
"s3/p1": {
"datei": "s3-p1.mp3",
"dauer": 3.63,
"text": "Und ich schau unter der Bank. Hier ist was Rotes!"
},
"s3/n2": {
"datei": "s3-n2.mp3",
"dauer": 5.07,
"text": "Mein Fäustling! Den such ich schon seit Tagen! Danke, Pino!"
},
"s3/n3": {
"datei": "s3-n3.mp3",
"dauer": 3.97,
"text": "Und hinter dem Holzstapel? Hm … nichts."
},
"s3/p2": {
"datei": "s3-p2.mp3",
"dauer": 2.59,
"text": "Doch! Da! Ein Faden!"
},
"s3/e1": {
"datei": "s3-e1.mp3",
"dauer": 2.19,
"text": "Welche Farbe hat der Faden?"
},
"s3/e2": {
"datei": "s3-e2.mp3",
"dauer": 2.51,
"text": "Grün! Wie Lulus Schal!"
},
"s3/p3": {
"datei": "s3-p3.mp3",
"dauer": 5.41,
"text": "Ich folge ihm. Mit der Nase. Hier lang … und hier lang …"
},
"s3/l3": {
"datei": "s3-l3.mp3",
"dauer": 4.28,
"text": "Und ich sehe von hier oben, wohin er führt. Zum Wald!"
},
"s3/e3": {
"datei": "s3-e3.mp3",
"dauer": 7.16,
"text": "Pino sieht, was unten ist. Lulu sieht, was weit weg ist. Zusammen finden sie den Weg."
},
"s4/n1": {
"datei": "s4-n1.mp3",
"dauer": 2.59,
"text": "Da! Ganz oben in der Tanne!"
},
"s4/l1": {
"datei": "s4-l1.mp3",
"dauer": 1.49,
"text": "Mein Schal!"
},
"s4/e1": {
"datei": "s4-e1.mp3",
"dauer": 4.68,
"text": "Wo ist der Schal: unter der Tanne oder oben in der Tanne?"
},
"s4/e2": {
"datei": "s4-e2.mp3",
"dauer": 4.44,
"text": "Oben in der Tanne! Der Wind hat ihn in der Nacht dorthin geweht."
},
"s4/l2": {
"datei": "s4-l2.mp3",
"dauer": 4.13,
"text": "Ganz vorsichtig … so. Hab ihn!"
},
"s4/e3": {
"datei": "s4-e3.mp3",
"dauer": 3.55,
"text": "Beim Herausziehen brechen ein paar Tannenzweige ab."
},
"s4/l3": {
"datei": "s4-l3.mp3",
"dauer": 6.84,
"text": "Aaah. Warm! Danke, Pino. Ohne dich hätte ich den Faden nie gesehen."
},
"s4/p1": {
"datei": "s4-p1.mp3",
"dauer": 3.24,
"text": "Und ohne dich wären wir nie so hoch gekommen."
},
"lied/r1": {
"datei": "lied-r1.mp3",
"dauer": 2.93,
"text": "Einer klein und einer groß,"
},
"lied/r2": {
"datei": "lied-r2.mp3",
"dauer": 3.16,
"text": "und dazwischen – na, wer bloß?"
},
"lied/r3": {
"datei": "lied-r3.mp3",
"dauer": 2.27,
"text": "Noa steht in der Mitte drin,"
},
"lied/r4": {
"datei": "lied-r4.mp3",
"dauer": 2.35,
"text": "zusammen kriegen wir alles hin!"
},
"s5/n1": {
"datei": "s5-n1.mp3",
"dauer": 5.8,
"text": "Schaut mal, die vielen Tannenzweige! Daraus machen wir einen Adventskranz!"
},
"s5/e1": {
"datei": "s5-e1.mp3",
"dauer": 9.48,
"text": "Ein Adventskranz ist ein Kranz aus Tannenzweigen mit vier Kerzen. An jedem Sonntag im Advent brennt eine Kerze mehr."
},
"s5/l1": {
"datei": "s5-l1.mp3",
"dauer": 1.49,
"text": "Ich halte fest."
},
"s5/p1": {
"datei": "s5-p1.mp3",
"dauer": 2.19,
"text": "Und ich hab das rote Band!"
},
"s5/n2": {
"datei": "s5-n2.mp3",
"dauer": 2.27,
"text": "Und jetzt vier Kerzen."
},
"s5/e2": {
"datei": "s5-e2.mp3",
"dauer": 5.72,
"text": "Heute ist der erste Advent. Die erste Kerze hat ein Großer angezündet."
},
"s5/a1": {
"datei": "s5-a1.mp3",
"dauer": 3.63,
"text": "Ein Licht am Kranz, so warm und klein,"
},
"s5/a2": {
"datei": "s5-a2.mp3",
"dauer": 2.43,
"text": "es leuchtet in die Nacht hinein."
},
"s5/a3": {
"datei": "s5-a3.mp3",
"dauer": 2.93,
"text": "Wir zählen mit und warten fein,"
},
"s5/a4": {
"datei": "s5-a4.mp3",
"dauer": 2.35,
"text": "bald wird das Winterfest hier sein!"
},
"s5/e3": {
"datei": "s5-e3.mp3",
"dauer": 4.52,
"text": "Wie viele Kerzen hat der Kranz? Und wie viele brennen schon?"
},
"s5/e4": {
"datei": "s5-e4.mp3",
"dauer": 2.69,
"text": "Vier Kerzen. Eine brennt."
},
"s6/l1": {
"datei": "s6-l1.mp3",
"dauer": 2.85,
"text": "Den Schal lass ich nie mehr los."
},
"s6/p1": {
"datei": "s6-p1.mp3",
"dauer": 3.24,
"text": "Noch zwei Tage, dann hängt unser Kalender."
},
"s6/t1": {
"datei": "s6-t1.mp3",
"dauer": 1.57,
"text": "Gute Nacht, Pino!"
}
}

View file

@ -0,0 +1,242 @@
{
"intro/t1": {
"datei": "intro-t1.mp3",
"dauer": 2.19,
"text": "El pequeño mundo de Pino."
},
"intro/t2": {
"datei": "intro-t2.mp3",
"dauer": 3.55,
"text": "Hoy: La bufanda de Lulu ha desaparecido."
},
"s2/e1": {
"datei": "s2-e1.mp3",
"dauer": 4.36,
"text": "Es una mañana fría. Todo brilla con la escarcha."
},
"s2/l1": {
"datei": "s2-l1.mp3",
"dauer": 5.56,
"text": "¡Brrr! ¡Mi cuello! ¡Tengo todo mi largo cuello helado!"
},
"s2/l2": {
"datei": "s2-l2.mp3",
"dauer": 3.16,
"text": "Mi bufanda… ¡mi bufanda no está!"
},
"s2/n1": {
"datei": "s2-n1.mp3",
"dauer": 1.8,
"text": "¡Lulu! ¿Qué pasa?"
},
"s2/p1": {
"datei": "s2-p1.mp3",
"dauer": 2.51,
"text": "Uaaah… ¿qué pasa aquí?"
},
"s2/e2": {
"datei": "s2-e2.mp3",
"dauer": 6.03,
"text": "Lulu tiene un cuello muy largo. Sin bufanda, tiene frío de arriba abajo."
},
"s2/e3": {
"datei": "s2-e3.mp3",
"dauer": 3.08,
"text": "¿Tú qué crees? ¿Dónde puede estar la bufanda?"
},
"s3/n1": {
"datei": "s3-n1.mp3",
"dauer": 3.79,
"text": "¡Busquemos por todas partes! ¡Arriba y abajo!"
},
"s3/l1": {
"datei": "s3-l1.mp3",
"dauer": 1.96,
"text": "Yo miro en el tejado…"
},
"s3/l2": {
"datei": "s3-l2.mp3",
"dauer": 2.85,
"text": "No. Solo hay un cuervo."
},
"s3/p1": {
"datei": "s3-p1.mp3",
"dauer": 3.71,
"text": "Y yo miro debajo del banco. ¡Aquí hay algo rojo!"
},
"s3/n2": {
"datei": "s3-n2.mp3",
"dauer": 5.49,
"text": "¡Mi manopla! ¡La estaba buscando desde hace días! ¡Gracias, Pino!"
},
"s3/n3": {
"datei": "s3-n3.mp3",
"dauer": 3.97,
"text": "¿Y detrás del montón de leña? Mmm… nada."
},
"s3/p2": {
"datei": "s3-p2.mp3",
"dauer": 2.43,
"text": "¡Sí! ¡Ahí! ¡Un hilo!"
},
"s3/e1": {
"datei": "s3-e1.mp3",
"dauer": 1.96,
"text": "¿De qué color es el hilo?"
},
"s3/e2": {
"datei": "s3-e2.mp3",
"dauer": 2.85,
"text": "¡Verde! ¡Como la bufanda de Lulu!"
},
"s3/p3": {
"datei": "s3-p3.mp3",
"dauer": 4.99,
"text": "Lo sigo. Con la nariz. Por aquí… y por aquí…"
},
"s3/l3": {
"datei": "s3-l3.mp3",
"dauer": 4.05,
"text": "Y yo veo desde aquí arriba adónde lleva. ¡Al bosque!"
},
"s3/e3": {
"datei": "s3-e3.mp3",
"dauer": 6.69,
"text": "Pino ve lo que está abajo. Lulu ve lo que está lejos. Juntos encuentran el camino."
},
"s4/n1": {
"datei": "s4-n1.mp3",
"dauer": 3.16,
"text": "¡Allí! ¡Arriba del todo en el abeto!"
},
"s4/l1": {
"datei": "s4-l1.mp3",
"dauer": 1.49,
"text": "¡Mi bufanda!"
},
"s4/e1": {
"datei": "s4-e1.mp3",
"dauer": 4.91,
"text": "¿Dónde está la bufanda: debajo del abeto o arriba en el abeto?"
},
"s4/e2": {
"datei": "s4-e2.mp3",
"dauer": 4.68,
"text": "¡Arriba en el abeto! El viento la llevó hasta allí durante la noche."
},
"s4/l2": {
"datei": "s4-l2.mp3",
"dauer": 3.79,
"text": "Con mucho cuidado… así. ¡La tengo!"
},
"s4/e3": {
"datei": "s4-e3.mp3",
"dauer": 3.55,
"text": "Al sacarla, se rompen algunas ramas del abeto."
},
"s4/l3": {
"datei": "s4-l3.mp3",
"dauer": 6.77,
"text": "Aaah. ¡Qué calentita! Gracias, Pino. Sin ti, nunca habría visto el hilo."
},
"s4/p1": {
"datei": "s4-p1.mp3",
"dauer": 3.71,
"text": "Y sin ti, nunca habríamos llegado tan alto."
},
"lied/r1": {
"datei": "lied-r1.mp3",
"dauer": 2.51,
"text": "Uno pequeño y otra alta,"
},
"lied/r2": {
"datei": "lied-r2.mp3",
"dauer": 3.24,
"text": "y en el medio… ¿quién nos falta?"
},
"lied/r3": {
"datei": "lied-r3.mp3",
"dauer": 3.4,
"text": "Noa, Noa, en el centro está,"
},
"lied/r4": {
"datei": "lied-r4.mp3",
"dauer": 2.35,
"text": "¡y juntos sí se podrá!"
},
"s5/n1": {
"datei": "s5-n1.mp3",
"dauer": 4.91,
"text": "¡Miren cuántas ramas! ¡Con ellas hacemos una corona de Adviento!"
},
"s5/e1": {
"datei": "s5-e1.mp3",
"dauer": 8.83,
"text": "Una corona de Adviento es un círculo de ramas de abeto con cuatro velas. Cada domingo de Adviento se enciende una vela más."
},
"s5/l1": {
"datei": "s5-l1.mp3",
"dauer": 1.8,
"text": "Yo la sujeto."
},
"s5/p1": {
"datei": "s5-p1.mp3",
"dauer": 2.51,
"text": "¡Y yo tengo la cinta roja!"
},
"s5/n2": {
"datei": "s5-n2.mp3",
"dauer": 2.27,
"text": "Y ahora, cuatro velas."
},
"s5/e2": {
"datei": "s5-e2.mp3",
"dauer": 5.8,
"text": "Hoy es el primer domingo de Adviento. La primera vela la ha encendido un adulto."
},
"s5/a1": {
"datei": "s5-a1.mp3",
"dauer": 2.51,
"text": "Una luz en la corona brilla,"
},
"s5/a2": {
"datei": "s5-a2.mp3",
"dauer": 2.27,
"text": "pequeñita y calentita."
},
"s5/a3": {
"datei": "s5-a3.mp3",
"dauer": 2.51,
"text": "Contamos juntos sin parar:"
},
"s5/a4": {
"datei": "s5-a4.mp3",
"dauer": 3,
"text": "¡la Fiesta del Invierno va a llegar!"
},
"s5/e3": {
"datei": "s5-e3.mp3",
"dauer": 4.28,
"text": "¿Cuántas velas tiene la corona? ¿Y cuántas están encendidas?"
},
"s5/e4": {
"datei": "s5-e4.mp3",
"dauer": 2.77,
"text": "Cuatro velas. Una encendida."
},
"s6/l1": {
"datei": "s6-l1.mp3",
"dauer": 3.16,
"text": "Esta bufanda no la suelto nunca más."
},
"s6/p1": {
"datei": "s6-p1.mp3",
"dauer": 3.24,
"text": "Dos días más y colgamos nuestro calendario."
},
"s6/t1": {
"datei": "s6-t1.mp3",
"dauer": 1.65,
"text": "¡Buenas noches, Pino!"
}
}

View file

@ -0,0 +1,242 @@
{
"intro/t1": {
"datei": "intro-t1.mp3",
"dauer": 2.04,
"text": "Le petit monde de Pino."
},
"intro/t2": {
"datei": "intro-t2.mp3",
"dauer": 3.55,
"text": "Aujourd'hui : L'écharpe de Lulu a disparu."
},
"s2/e1": {
"datei": "s2-e1.mp3",
"dauer": 3.63,
"text": "C'est un matin froid. Tout scintille sous le givre."
},
"s2/l1": {
"datei": "s2-l1.mp3",
"dauer": 4.36,
"text": "Brrr ! Mon cou ! Tout mon long cou est gelé !"
},
"s2/l2": {
"datei": "s2-l2.mp3",
"dauer": 3.32,
"text": "Mon écharpe… mon écharpe a disparu !"
},
"s2/n1": {
"datei": "s2-n1.mp3",
"dauer": 2.04,
"text": "Lulu ! Qu'est-ce qui se passe ?"
},
"s2/p1": {
"datei": "s2-p1.mp3",
"dauer": 2.51,
"text": "Ouaaah… qu'est-ce qui se passe ici ?"
},
"s2/e2": {
"datei": "s2-e2.mp3",
"dauer": 5.33,
"text": "Lulu a un très long cou. Sans écharpe, elle a froid de haut en bas."
},
"s2/e3": {
"datei": "s2-e3.mp3",
"dauer": 2.85,
"text": "À ton avis, où peut bien être l'écharpe ?"
},
"s3/n1": {
"datei": "s3-n1.mp3",
"dauer": 2.93,
"text": "On cherche partout ! En haut et en bas !"
},
"s3/l1": {
"datei": "s3-l1.mp3",
"dauer": 1.96,
"text": "Je regarde sur le toit…"
},
"s3/l2": {
"datei": "s3-l2.mp3",
"dauer": 2.19,
"text": "Non. Il n'y a qu'une corneille."
},
"s3/p1": {
"datei": "s3-p1.mp3",
"dauer": 4.28,
"text": "Et moi, je regarde sous le banc. Il y a quelque chose de rouge !"
},
"s3/n2": {
"datei": "s3-n2.mp3",
"dauer": 4.6,
"text": "Ma moufle ! Je la cherche depuis des jours ! Merci, Pino !"
},
"s3/n3": {
"datei": "s3-n3.mp3",
"dauer": 3.55,
"text": "Et derrière le tas de bois ? Hmm… rien."
},
"s3/p2": {
"datei": "s3-p2.mp3",
"dauer": 2.43,
"text": "Si ! Là ! Un fil !"
},
"s3/e1": {
"datei": "s3-e1.mp3",
"dauer": 2.04,
"text": "De quelle couleur est le fil ?"
},
"s3/e2": {
"datei": "s3-e2.mp3",
"dauer": 2.59,
"text": "Vert ! Comme l'écharpe de Lulu !"
},
"s3/p3": {
"datei": "s3-p3.mp3",
"dauer": 4.99,
"text": "Je le suis. Avec mon nez. Par ici… et par ici…"
},
"s3/l3": {
"datei": "s3-l3.mp3",
"dauer": 4.28,
"text": "Et moi, d'en haut, je vois où il mène. Vers la forêt !"
},
"s3/e3": {
"datei": "s3-e3.mp3",
"dauer": 6.61,
"text": "Pino voit ce qui est en bas. Lulu voit ce qui est loin. Ensemble, ils trouvent le chemin."
},
"s4/n1": {
"datei": "s4-n1.mp3",
"dauer": 2.27,
"text": "Là ! Tout en haut du sapin !"
},
"s4/l1": {
"datei": "s4-l1.mp3",
"dauer": 1.72,
"text": "Mon écharpe !"
},
"s4/e1": {
"datei": "s4-e1.mp3",
"dauer": 3.79,
"text": "Où est l'écharpe : sous le sapin ou en haut du sapin ?"
},
"s4/e2": {
"datei": "s4-e2.mp3",
"dauer": 4.28,
"text": "En haut du sapin ! Le vent l'a emportée là-haut pendant la nuit."
},
"s4/l2": {
"datei": "s4-l2.mp3",
"dauer": 3.16,
"text": "Tout doucement… voilà. Je l'ai !"
},
"s4/e3": {
"datei": "s4-e3.mp3",
"dauer": 3.71,
"text": "Quand elle la tire, quelques branches de sapin se cassent."
},
"s4/l3": {
"datei": "s4-l3.mp3",
"dauer": 6.11,
"text": "Aaah. Que c'est chaud ! Merci, Pino. Sans toi, je n'aurais jamais vu le fil."
},
"s4/p1": {
"datei": "s4-p1.mp3",
"dauer": 3.08,
"text": "Et sans toi, on ne serait jamais montés si haut."
},
"lied/r1": {
"datei": "lied-r1.mp3",
"dauer": 3.08,
"text": "Un tout petit, une très grande,"
},
"lied/r2": {
"datei": "lied-r2.mp3",
"dauer": 2.12,
"text": "Noa au milieu de la bande."
},
"lied/r3": {
"datei": "lied-r3.mp3",
"dauer": 3,
"text": "En haut, en bas, et entre les deux –"
},
"lied/r4": {
"datei": "lied-r4.mp3",
"dauer": 2.35,
"text": "ensemble, on fait de notre mieux !"
},
"s5/n1": {
"datei": "s5-n1.mp3",
"dauer": 3.97,
"text": "Regardez toutes ces branches ! On va faire une couronne de l'Avent !"
},
"s5/e1": {
"datei": "s5-e1.mp3",
"dauer": 8.91,
"text": "Une couronne de l'Avent, c'est un cercle de branches de sapin avec quatre bougies. Chaque dimanche de l'Avent, on allume une bougie de plus."
},
"s5/l1": {
"datei": "s5-l1.mp3",
"dauer": 1.23,
"text": "Je la tiens."
},
"s5/p1": {
"datei": "s5-p1.mp3",
"dauer": 2.59,
"text": "Et moi, j'ai le ruban rouge !"
},
"s5/n2": {
"datei": "s5-n2.mp3",
"dauer": 2.12,
"text": "Et maintenant, quatre bougies."
},
"s5/e2": {
"datei": "s5-e2.mp3",
"dauer": 6.03,
"text": "Aujourd'hui, c'est le premier dimanche de l'Avent. La première bougie, c'est un grand qui l'a allumée."
},
"s5/a1": {
"datei": "s5-a1.mp3",
"dauer": 2.04,
"text": "Une bougie sur la couronne,"
},
"s5/a2": {
"datei": "s5-a2.mp3",
"dauer": 2.35,
"text": "si petite, elle rayonne."
},
"s5/a3": {
"datei": "s5-a3.mp3",
"dauer": 2.27,
"text": "On compte ensemble, on attend :"
},
"s5/a4": {
"datei": "s5-a4.mp3",
"dauer": 2.69,
"text": "la fête de l'hiver arrive en chantant !"
},
"s5/e3": {
"datei": "s5-e3.mp3",
"dauer": 3.55,
"text": "Combien de bougies a la couronne ? Et combien sont allumées ?"
},
"s5/e4": {
"datei": "s5-e4.mp3",
"dauer": 2.85,
"text": "Quatre bougies. Une est allumée."
},
"s6/l1": {
"datei": "s6-l1.mp3",
"dauer": 3.08,
"text": "Cette écharpe, je ne la lâche plus jamais."
},
"s6/p1": {
"datei": "s6-p1.mp3",
"dauer": 3.4,
"text": "Encore deux jours, et on accroche notre calendrier."
},
"s6/t1": {
"datei": "s6-t1.mp3",
"dauer": 1.41,
"text": "Bonne nuit, Pino !"
}
}

View file

@ -0,0 +1,113 @@
import React from 'react';
import {useCurrentFrame} from 'remotion';
import {kurve} from '../bewegung';
import {Figur, Geher, Kamera} from '../baukasten/figur';
import {Blende, Vignette, atmen, huepfer, kamFahrt} from '../baukasten/helfer';
import {Funkeln, Nest} from '../baukasten/natur';
import {BODEN, NEST_X, Ort} from '../baukasten/orte';
import {Untertitel} from '../baukasten/untertitel';
import {plane} from './plan';
// Szene 2: Wo ist der Schal? Frostiger Morgen, Lulu zittert, Noa kommt, Pino blinzelt aus dem Nest.
// Lage im Frostgarten (gilt für Szene 2 und 3)
export const LULU_X = 860; // Lulu vor dem Gartenhaus
export const NOA_X = 520; // Noa links neben Lulu
export const PINO_NEST_Y = BODEN - 34; // Pino sitzt im Nest
export const S2 = plane('s2', [
{id: 'bild0', dauer: 3.0},
{id: 'e1', wer: 'ERZ'},
{id: 'l1', wer: 'LULU'},
{id: 'l2', wer: 'LULU'},
{id: 'n1', wer: 'NOA'},
{id: 'p1', wer: 'PINO', leise: true},
{id: 'e2', wer: 'ERZ'},
{id: 'e3', wer: 'ERZ', pause: 3},
]);
// Pino im Nest: nur der obere Teil schaut heraus
export const PinoImNest: React.FC<{pose: [number, string][]; f: number}> = ({pose, f}) => (
<>
<Nest x={NEST_X} y={BODEN} seite="hinten" />
<div style={{position: 'absolute', inset: 0, clipPath: `inset(0 0 ${1080 - BODEN - 4}px 0)`}}>
<Figur pose={pose} x={NEST_X + 10} y={PINO_NEST_Y} stauchY={atmen(f, 1, 0.015)} schatten={false} blende={10} />
</div>
<Nest x={NEST_X} y={BODEN} seite="vorne" />
</>
);
export const Szene2: React.FC = () => {
const f = useCurrentFrame();
const {z, dauer} = S2;
// Lulu zittert vor Kälte (stärker, wenn sie spricht)
const friert = f >= z.l1.start - 10 && f < z.e2.ende;
const zittern = friert ? Math.sin(f * 2.1) * (f < z.l2.ende ? 1.6 : 0.8) : 0;
const luluPose: [number, string][] = [
[0, 'lulu_A4_staunen_ohne-schal'],
[z.l1.start - 10, 'lulu_B1_traurig_ohne-schal'],
[z.l2.start, 'lulu_A4_staunen_ohne-schal'],
[z.n1.ende, 'lulu_A5_blick-links_ohne-schal'],
[z.e2.start, 'lulu_B1_traurig_ohne-schal'],
];
// Noa kommt angelaufen
const noaAn = z.n1.start + 4;
const noaX = kurve(f, [
[z.l2.start, -200],
[noaAn, NOA_X],
]);
const noaGeht = f >= z.l2.start && f < noaAn;
const noaPose: [number, string][] = [
[0, 'noa_A4_staunen'],
[z.n1.start + 6, 'noa_A5_blick-links'],
[z.p1.start, 'noa_A6_blick-rechts'],
[z.e2.start, 'noa_A4_staunen'],
[z.e3.start, 'noa_A6_blick-rechts'],
];
// Pino: schläft eingerollt, blinzelt verschlafen bei p1
const pinoPose: [number, string][] = [
[0, 'pino_B_schlaeft-eingerollt'],
[z.p1.start - 6, 'pino_A1_augen-zu'],
[z.p1.start + 14, 'pino_A2_augen-halb'],
[z.p1.ende, 'pino_A1_augen-zu'],
[z.p1.ende + 8, 'pino_A2_augen-halb'],
[z.e3.start, 'pino_A5_blick-links'],
];
const kam = kamFahrt(f, [
[0, 960, 520, 1.0],
[z.e1.ende, 960, 560, 1.05],
[z.l1.start + 10, LULU_X - 40, 420, 1.7],
[z.l2.ende, LULU_X - 60, 480, 1.5],
[z.n1.start + 10, 700, 700, 1.5],
[z.p1.start, NEST_X, 830, 2.4],
[z.p1.ende + 10, NEST_X, 830, 2.4],
[z.e2.start + 30, 1000, 600, 1.15],
[dauer, 980, 580, 1.08],
]);
return (
<>
<Kamera {...kam}>
<Ort name="garten_frost" />
<Figur pose={luluPose} x={LULU_X + zittern} y={BODEN - 6} drehung={zittern * 0.3} stauchY={atmen(f, 3, 0.006)} blende={12} />
{noaGeht ? (
<Geher figur="noa" spiegeln x={noaX} y={BODEN} tempo={1.5} />
) : (
<Figur pose={noaPose} x={noaX} y={BODEN + huepfer(f, noaAn, 12, 10)} stauchY={atmen(f, 2)} blende={8} />
)}
<PinoImNest pose={pinoPose} f={f} />
{/* Raureif glitzert */}
<Funkeln x={300} y={620} start={20} dauer={50} s={0.9} />
<Funkeln x={1500} y={600} start={50} dauer={50} s={0.8} />
<Funkeln x={1060} y={790} start={80} dauer={50} s={0.7} />
</Kamera>
<Vignette />
<Untertitel zeilen={S2.liste} />
<Blende dauer={dauer} rein={12} raus={0} />
</>
);
};

View file

@ -0,0 +1,188 @@
import React from 'react';
import {useCurrentFrame} from 'remotion';
import {kurve} from '../bewegung';
import {Figur, Geher, Kamera} from '../baukasten/figur';
import {Blende, Vignette, atmen, hopfStauch, huepfer, kamFahrt} from '../baukasten/helfer';
import {Funkeln} from '../baukasten/natur';
import {BANK, BODEN, FADEN, HAUS, NEST_X, Ort} from '../baukasten/orte';
import {Untertitel} from '../baukasten/untertitel';
import {plane} from './plan';
import {LULU_X, NOA_X, PinoImNest} from './szene2';
import {Faden, Faeustling, Kraehe} from './teile';
// Szene 3: Suchen. Dach (Krähe), unter der Bank (Fäustling), hinter dem Holzstapel (Faden).
const KRAEHE = {x: HAUS.x + HAUS.b / 2 + 10, y: HAUS.first + 8};
const PINO_BANK_X = BANK.x + BANK.b / 2;
const FAEUSTLING = {x: BANK.x + BANK.b / 2 + 50, y: BODEN - 4};
const NOA_BANK_X = BANK.x - 90;
const NOA_STAPEL_X = 1640;
const PINO_FADEN_X = FADEN.x - 60;
export const S3 = plane('s3', [
{id: 'n1', wer: 'NOA'},
{id: 'l1', wer: 'LULU'},
{id: 'bild0', dauer: 1.6},
{id: 'l2', wer: 'LULU'},
{id: 'p1', wer: 'PINO'},
{id: 'bild1', dauer: 1.4},
{id: 'n2', wer: 'NOA'},
{id: 'bild2', dauer: 2.0},
{id: 'n3', wer: 'NOA'},
{id: 'p2', wer: 'PINO'},
{id: 'e1', wer: 'ERZ', pause: 3},
{id: 'e2', wer: 'ERZ'},
{id: 'p3', wer: 'PINO'},
{id: 'l3', wer: 'LULU'},
{id: 'e3', wer: 'ERZ'},
]);
export const Szene3: React.FC = () => {
const f = useCurrentFrame();
const {z, dauer} = S3;
// Lulu schaut aufs Dach, später weit nach rechts zum Wald
const luluPose: [number, string][] = [
[0, 'lulu_A6_blick-rechts_ohne-schal'],
[z.l1.start, 'lulu_A5_blick-links_ohne-schal'],
[z.l2.start + 10, 'lulu_B1_traurig_ohne-schal'],
[z.p1.start + 10, 'lulu_A6_blick-rechts_ohne-schal'],
[z.n2.start, 'lulu_A4_staunen_ohne-schal'],
[z.n3.start, 'lulu_A6_blick-rechts_ohne-schal'],
[z.l3.start, 'lulu_A6_blick-rechts_ohne-schal'],
[z.e3.start, 'lulu_A4_staunen_ohne-schal'],
];
const luluX = kurve(f, [
[z.p3.start, LULU_X],
[z.l3.start, 1250],
]);
// Krähe: sitzt auf dem First, fliegt bei l2 davon
const abflug = z.l2.start + 20;
const kraeheX = kurve(f, [
[abflug, KRAEHE.x],
[abflug + 60, KRAEHE.x - 700],
]);
const kraeheY = kurve(f, [
[abflug, KRAEHE.y],
[abflug + 60, KRAEHE.y - 420],
]);
// Pino: aus dem Nest unter die Bank, dann zum Holzstapel und dem Faden nach (rechts raus)
const ausNest = z.n1.ende;
const unterBank = z.p1.start + 20;
const zumStapel = z.n3.start + 20;
const amFaden = z.p2.start;
const folgen = z.p3.start + 10;
const pinoX = kurve(f, [
[ausNest, NEST_X],
[unterBank, PINO_BANK_X],
[z.n2.ende, PINO_BANK_X],
[amFaden, PINO_FADEN_X],
[folgen, PINO_FADEN_X],
[z.l3.ende, 2150],
]);
const pinoImNest = f < ausNest;
const pinoGeht = (f >= ausNest && f < unterBank) || (f >= z.n2.ende && f < amFaden) || f >= folgen;
const pinoPose: [number, string][] = [
[0, 'pino_A2_augen-halb'],
[unterBank, 'pino_A4_staunen'],
[z.n2.start, 'pino_A3_lachen'],
[amFaden, 'pino_A4_staunen'],
[z.e2.start, 'pino_A3_lachen'],
];
// Fäustling: liegt unter der Bank, Pino schubst ihn raus, er fliegt zu Noa
const schubs = z.p1.ende - 6;
const fliegt = z.bild1.start + 10;
const faustX = kurve(f, [
[schubs, FAEUSTLING.x],
[fliegt, FAEUSTLING.x - 60],
[fliegt + 18, NOA_BANK_X + 40],
]);
const faustY =
kurve(f, [
[fliegt, FAEUSTLING.y],
[fliegt + 18, BODEN - 170],
]) - (f >= fliegt && f < fliegt + 18 ? Math.sin(((f - fliegt) / 18) * Math.PI) * 120 : 0);
const faustBeiNoa = f >= fliegt + 18;
// Noa: Arme hoch, geht zur Bank, freut sich, geht zum Holzstapel
const zurBank = z.p1.start;
const anBank = z.bild1.start;
const losStapel = z.bild2.start + 10;
const anStapel = z.n3.start + 10;
const noaX = kurve(f, [
[zurBank, NOA_X],
[anBank, NOA_BANK_X],
[losStapel, NOA_BANK_X],
[anStapel, NOA_STAPEL_X],
]);
const noaGeht = (f >= zurBank && f < anBank) || (f >= losStapel && f < anStapel);
const noaPose: [number, string][] = [
[0, 'noa_A_arme-hoch'],
[z.n1.ende, 'noa_A6_blick-rechts'],
[anBank, 'noa_A4_staunen'],
[z.n2.start, 'noa_A3_lachen'],
[anStapel, 'noa_A6_blick-rechts'],
[z.n3.ende - 10, 'noa_B1_traurig'],
[z.p2.start + 10, 'noa_A4_staunen'],
[z.e2.start, 'noa_A3_lachen'],
[z.p3.start, 'noa_A6_blick-rechts'],
];
const noaY = BODEN + huepfer(f, z.n2.start + 4, 26, 12) + huepfer(f, z.n2.start + 22, 18, 10);
// Faden: hängt am Strauch; bei p3 läuft er am Boden nach rechts zum Wald
const fadenLaenge = kurve(f, [
[folgen, 0],
[z.l3.ende, 1],
]);
const kam = kamFahrt(f, [
[0, 900, 600, 1.15],
[z.l1.start, HAUS.x + 200, 470, 1.9],
[z.l2.ende, HAUS.x + 220, 480, 1.7],
[z.p1.start + 10, PINO_BANK_X, 820, 2.2],
[z.bild1.ende, PINO_BANK_X - 80, 760, 1.8],
[z.n2.ende, PINO_BANK_X - 60, 740, 1.6],
[anStapel, 1500, 700, 1.6],
[z.p2.start + 10, FADEN.x - 60, 740, 2.2],
[z.e1.start + 20, FADEN.x - 10, 720, 3.2],
[z.e2.ende, FADEN.x - 10, 720, 3.0],
[z.p3.start + 20, 1500, 760, 1.6],
[z.l3.start + 20, 1300, 520, 1.25],
[z.e3.start + 20, 1150, 560, 1.05],
[dauer, 1150, 560, 1.05],
]);
return (
<>
<Kamera {...kam}>
<Ort name="garten_frost" />
{f < abflug + 60 && <Kraehe x={kraeheX} y={kraeheY} s={0.8} fliegt={f >= abflug ? 1 : 0} frame={f} />}
<Figur pose={luluPose} x={luluX} y={BODEN - 6} stauchY={atmen(f, 3, 0.006)} blende={12} />
{f < fliegt + 18 && <Faeustling x={faustX} y={faustY} s={0.7} r={f >= fliegt ? (f - fliegt) * 14 : -15} />}
{pinoImNest ? (
<PinoImNest pose={pinoPose} f={f} />
) : pinoGeht ? (
<Geher figur="pino" x={pinoX} y={BODEN} tempo={1.5} />
) : (
<Figur pose={pinoPose} x={pinoX} y={BODEN} stauchY={atmen(f, 1, 0.01) * hopfStauch(f, z.p2.start + 4)} blende={8} />
)}
{noaGeht ? (
<Geher figur="noa" spiegeln x={noaX} y={BODEN} tempo={1.5} />
) : (
<Figur pose={noaPose} x={noaX} y={noaY} stauchY={atmen(f, 2)} blende={8} />
)}
{faustBeiNoa && f < losStapel && <Faeustling x={noaX + 40} y={BODEN - 150} s={0.6} r={-10} />}
<Faden x1={FADEN.x} y1={FADEN.y} x2={FADEN.x + 8} y2={FADEN.y + 70} frame={f} />
{fadenLaenge > 0 && <Faden x1={FADEN.x + 8} y1={BODEN - 8} x2={2100} y2={BODEN - 20} frame={0} laenge={fadenLaenge} dicke={4} />}
<Funkeln x={FADEN.x + 4} y={FADEN.y + 40} start={z.p2.start + 6} dauer={50} s={0.8} />
<Funkeln x={FAEUSTLING.x} y={FAEUSTLING.y - 30} start={z.p1.start + 30} dauer={40} s={0.6} />
</Kamera>
<Vignette />
<Untertitel zeilen={S3.liste} />
<Blende dauer={dauer} rein={10} raus={10} />
</>
);
};

View file

@ -0,0 +1,146 @@
import React from 'react';
import {random, useCurrentFrame} from 'remotion';
import {kurve} from '../bewegung';
import {Figur, Geher, Kamera} from '../baukasten/figur';
import {Blende, LULU_MAUL_LINKS, Vignette, atmen, gehWippen, hopfStauch, huepfer, kamFahrt, punkt} from '../baukasten/helfer';
import {Funkeln} from '../baukasten/natur';
import {BODEN, Ort} from '../baukasten/orte';
import {Untertitel} from '../baukasten/untertitel';
import {plane} from './plan';
import {Schal, Tannenzweig} from './teile';
// Szene 4: In der Tanne. Der Schal hängt oben in der hohen Tanne, nur Lulu kommt hinauf.
// Lulus Maul (Blick links): Abstand zum Fußpunkt; so hoch hängt der Schal, so steht sie beim Ziehen
const MAUL = punkt('lulu', 0, 0, LULU_MAUL_LINKS.cx, LULU_MAUL_LINKS.cy);
export const SCHAL = {x: 1080, y: BODEN - 6 + MAUL.y};
const LULU_ZIEH_X = SCHAL.x - MAUL.x;
export const LULU_X4 = 1500;
export const NOA_X4 = 560;
export const PINO_X4 = 780;
export const S4 = plane('s4', [
{id: 'bild0', dauer: 5.0},
{id: 'n1', wer: 'NOA'},
{id: 'l1', wer: 'LULU'},
{id: 'e1', wer: 'ERZ', pause: 3},
{id: 'e2', wer: 'ERZ'},
{id: 'l2', wer: 'LULU'},
{id: 'e3', wer: 'ERZ'},
{id: 'l3', wer: 'LULU'},
{id: 'p1', wer: 'PINO'},
{id: 'bild1', dauer: 1.2},
]);
const ZWEIGE = new Array(5).fill(0).map((_, i) => ({
zielX: 900 + random('zx' + i) * 380,
zielY: BODEN + 10 + random('zy' + i) * 40,
r: random('zr' + i) * 60 - 30,
verz: i * 6,
}));
export const Szene4: React.FC = () => {
const f = useCurrentFrame();
const {z, dauer} = S4;
// Alle drei kommen von links an den Waldrand
const an = z.bild0.ende - 10;
const geht = f < an;
const lauf = (ziel: number, start: number) =>
kurve(f, [
[0, start],
[an, ziel],
]);
// Lulu tritt an die Tanne, zieht den Schal heraus (Maul), tritt zurück
const hin = z.l2.start - 6;
const greift = z.l2.start + 20;
const zurueck = z.e3.start;
const luluX = kurve(f, [
[0, -500],
[an, LULU_X4],
[hin, LULU_X4],
[greift, LULU_ZIEH_X],
[zurueck, LULU_ZIEH_X],
[zurueck + 30, LULU_X4],
]);
const luluPose: [number, string][] = [
[0, 'lulu_A5_blick-links_ohne-schal'],
[z.l1.start, 'lulu_A4_staunen_ohne-schal'],
[z.e2.start, 'lulu_A5_blick-links_ohne-schal'],
[zurueck + 30, 'lulu_A1_augen-zu'],
[z.l3.start + 20, 'lulu_A3_lachen'],
];
const ziehen = f >= greift && f < zurueck + 30;
const schalX = ziehen ? luluX + MAUL.x + (f > greift + 14 ? Math.sin((f - greift) * 0.7) * 4 : 0) : SCHAL.x;
const schalY = ziehen ? SCHAL.y - 6 : SCHAL.y;
const schalDa = f < zurueck + 30;
// Zweige brechen ab, sobald der Schal frei ist
const bruch = z.l2.start + 50;
const noaPose: [number, string][] = [
[0, 'noa_A6_blick-rechts'],
[z.n1.start, 'noa_B_zeigen'],
[z.e1.start, 'noa_A4_staunen'],
[z.l2.ende, 'noa_A3_lachen'],
[z.l3.start, 'noa_A6_blick-rechts'],
];
const pinoPose: [number, string][] = [
[0, 'pino_A6_blick-rechts'],
[z.n1.start + 10, 'pino_B_blick-nach-oben'],
[z.l2.ende, 'pino_A3_lachen'],
[z.l3.start, 'pino_A6_blick-rechts'],
[z.p1.start, 'pino_A3_lachen'],
];
const kam = kamFahrt(f, [
[0, 960, 540, 1.0],
[an, 960, 600, 1.05],
[z.n1.start + 10, 1050, 420, 1.3],
[z.l1.start, SCHAL.x + 40, 420, 2.0],
[z.e1.start + 20, 1100, 520, 1.15],
[z.e2.ende, 1100, 520, 1.15],
[greift, SCHAL.x + 160, 440, 1.7],
[z.e3.start + 20, 1100, 640, 1.3],
[z.l3.start + 10, 1250, 520, 1.5],
[z.p1.start, PINO_X4 + 100, 820, 2.0],
[dauer, PINO_X4 + 200, 760, 1.7],
]);
return (
<>
<Kamera {...kam}>
<Ort name="waldrand" />
{schalDa && <Schal x={schalX} y={schalY} s={0.7} frame={f} wind={ziehen ? 0.3 : 1} />}
{f < z.l2.start && <Funkeln x={SCHAL.x + 30} y={SCHAL.y + 60} start={z.n1.start + 10} dauer={50} s={0.9} />}
{geht ? (
<Figur pose="lulu_A6_blick-rechts_ohne-schal" x={luluX} y={BODEN - 6 + gehWippen(f, 5, 8)} drehung={Math.sin(f * 0.5) * 1.2} />
) : (
<Figur pose={luluPose} x={luluX} y={BODEN - 6} stauchY={atmen(f, 3, 0.006)} blende={12} />
)}
{ZWEIGE.map((zw, i) => {
const t0 = bruch + zw.verz;
if (f < t0) return null;
const p = Math.min(1, (f - t0) / 28);
const x = SCHAL.x + 40 + (zw.zielX - SCHAL.x - 40) * p;
const y = SCHAL.y + 40 + (zw.zielY - SCHAL.y - 40) * p * p;
return <Tannenzweig key={i} x={x} y={y} s={0.7} r={zw.r * p + Math.sin(f * 0.3 + i) * 10 * (1 - p)} />;
})}
{geht ? (
<Geher figur="noa" spiegeln x={lauf(NOA_X4, -300)} y={BODEN} tempo={1.25} />
) : (
<Figur pose={noaPose} x={NOA_X4} y={BODEN + huepfer(f, z.l2.ende, 18, 10)} stauchY={atmen(f, 2)} blende={8} />
)}
{geht ? (
<Geher figur="pino" x={lauf(PINO_X4, -150)} y={BODEN} tempo={1.25} />
) : (
<Figur pose={pinoPose} x={PINO_X4} y={BODEN + huepfer(f, z.p1.ende - 10, 26, 12)} stauchY={atmen(f, 1, 0.01) * hopfStauch(f, z.p1.ende + 2)} blende={8} />
)}
</Kamera>
<Vignette />
<Untertitel zeilen={S4.liste} />
<Blende dauer={dauer} rein={12} raus={0} />
</>
);
};

View file

@ -0,0 +1,154 @@
import React from 'react';
import {useCurrentFrame} from 'remotion';
import {kurve} from '../bewegung';
import {Figur, Kamera, POSEN_SKALA} from '../baukasten/figur';
import {Blende, Vignette, atmen, huepfer, kamFahrt} from '../baukasten/helfer';
import {Funkeln} from '../baukasten/natur';
import {Ort} from '../baukasten/orte';
import {SCHRIFT, Untertitel} from '../baukasten/untertitel';
import {plane} from './plan';
import {GrosseHand, Kranz} from './teile';
// Szene 5: Der Kranz. Abends in Noas Zimmer wird aus den Zweigen ein Adventskranz.
// Lulu schaut wie in Folge 2 durchs Fenster herein.
const N = 420; // Noas Größe im Zimmer
const NOA_X5 = 560;
const PINO_X5 = 1180;
const TISCH_Y = 802;
const LULU_X5 = 1440;
const KRANZ = {x: 860, y: 770, s: 0.85};
const KERZEN_T = [0.25, 0.75, 1.25, 1.75];
const KERZEN_X = KERZEN_T.map((t) => KRANZ.x + Math.cos(t * Math.PI) * 150 * KRANZ.s);
const KERZEN_Y = KERZEN_T.map((t) => KRANZ.y + Math.sin(t * Math.PI) * 52 * KRANZ.s - 130);
export const S5 = plane('s5', [
{id: 'bild0', dauer: 2.4},
{id: 'n1', wer: 'NOA'},
{id: 'e1', wer: 'ERZ'},
{id: 'l1', wer: 'LULU'},
{id: 'p1', wer: 'PINO'},
{id: 'n2', wer: 'NOA'},
{id: 'bild1', dauer: 1.0},
{id: 'e2', wer: 'ERZ'},
{id: 'a1', wer: 'ALLE'},
{id: 'a2', wer: 'ALLE'},
{id: 'a3', wer: 'ALLE'},
{id: 'a4', wer: 'ALLE'},
{id: 'e3', wer: 'ERZ', pause: 3},
{id: 'e4', wer: 'ERZ'},
{id: 'bild2', dauer: 1.6},
]);
export const Szene5: React.FC = () => {
const f = useCurrentFrame();
const {z, dauer} = S5;
const fertig = kurve(f, [
[z.e1.start + 10, 0],
[z.e1.ende, 1],
]);
const band = kurve(f, [
[z.p1.start + 10, 0],
[z.p1.ende, 1],
]);
const kerzen = kurve(f, [
[z.n2.start + 6, 0],
[z.bild1.ende, 1],
]);
const anzuenden = z.e2.start + 10;
const handP = kurve(f, [
[anzuenden - 20, 0],
[anzuenden + 60, 1],
]);
const brennt = kurve(f, [
[anzuenden + 28, 0],
[anzuenden + 36, 1],
]);
const luluX = kurve(f, [
[0, 1900],
[z.bild0.ende, LULU_X5],
]);
// Zählen bei e4: Zahlen 1–4 über den Kerzen
const zahlen = f >= z.e4.start;
const kam = kamFahrt(f, [
[0, 960, 540, 1.0],
[z.n1.start, 820, 640, 1.35],
[z.e1.start + 20, KRANZ.x, 720, 1.9],
[z.e1.ende, KRANZ.x, 720, 1.9],
[z.l1.start + 6, 1200, 480, 1.4],
[z.p1.start + 6, 1000, 700, 1.7],
[z.n2.ende, KRANZ.x, 700, 1.9],
[z.e2.start + 20, KRANZ.x, 680, 2.2],
[z.a1.start, 960, 600, 1.3],
[z.a4.ende, 960, 600, 1.3],
[z.e3.start + 10, KRANZ.x, 690, 2.0],
[dauer, KRANZ.x, 690, 2.0],
]);
return (
<>
<Kamera {...kam}>
<Ort name="zimmer_himmel" />
<Figur
pose={[
[0, 'lulu_A5_blick-links'],
[z.l1.start, 'lulu_A3_lachen'],
]}
x={luluX}
y={1180}
hoehe={N * 2.05}
schatten={false}
/>
<Ort name="zimmer_wand" />
<Figur pose="noa_B_sitzt" x={NOA_X5} y={1000} hoehe={N / POSEN_SKALA.noa_B_sitzt} stauchY={atmen(f, 2)} schatten={false} />
<Ort name="zimmer_tisch" />
<Kranz x={KRANZ.x} y={KRANZ.y} s={KRANZ.s} fertig={fertig} band={band} kerzen={kerzen} brennt={brennt} frame={f} />
<GrosseHand x={KERZEN_X[3] - 30} y={KERZEN_Y[3] - 30} p={handP} frame={f} />
<Figur
pose={[
[0, 'pino_A5_blick-links'],
[z.p1.start, 'pino_A3_lachen'],
[z.e2.start, 'pino_A4_staunen'],
[z.a1.start, 'pino_A3_lachen'],
]}
x={PINO_X5}
y={TISCH_Y + huepfer(f, z.p1.start + 6, 18, 10)}
hoehe={N * 0.4}
stauchY={atmen(f, 1)}
/>
<Funkeln x={KERZEN_X[3]} y={KERZEN_Y[3] - 40} start={anzuenden + 34} dauer={40} s={0.8} />
{zahlen &&
KERZEN_X.map((kx, i) => {
const t = z.e4.start + i * 10;
if (f < t) return null;
return (
<div
key={i}
style={{
position: 'absolute',
left: kx - 30,
top: KERZEN_Y[i] - 110,
width: 60,
textAlign: 'center',
fontFamily: SCHRIFT,
fontWeight: 600,
fontSize: 52,
color: i === 3 ? '#e0902a' : '#8a6a4a',
opacity: Math.min(1, (f - t) / 8),
}}
>
{i + 1}
</div>
);
})}
</Kamera>
<Vignette />
<Untertitel zeilen={S5.liste} />
<Blende dauer={dauer} rein={12} raus={12} />
</>
);
};

View file

@ -0,0 +1,136 @@
import React from 'react';
import {useCurrentFrame} from 'remotion';
import {ClipFigur, Figur, Kamera} from '../baukasten/figur';
import {Blende, Vignette, atmen, kamFahrt} from '../baukasten/helfer';
import {Funkeln, Nest, Zzz} from '../baukasten/natur';
import {BODEN, NEST_X, Ort} from '../baukasten/orte';
import {Untertitel} from '../baukasten/untertitel';
import {plane} from './plan';
// Szene 6: Gute Nacht. Abend am Nest, der Raureif glitzert im Laternenlicht.
const NOA_X6 = 1140;
const LULU_X6 = 1800;
const LATERNE = {x: 1290, y: BODEN + 10};
const NACHT = 'brightness(0.62) saturate(0.8) hue-rotate(-8deg)';
export const S6 = plane(
's6',
[
{id: 'bild0', dauer: 3.0},
{id: 'l1', wer: 'LULU', leise: true},
{id: 'p1', wer: 'PINO', leise: true},
{id: 't1', wer: 'NOA_LULU', leise: true, dauer: 2.6},
],
{vorlauf: 0.5, nachlauf: 2.4},
);
const Laterne: React.FC<{frame: number}> = ({frame}) => {
const flackern = 0.92 + 0.08 * Math.sin(frame * 0.5) * Math.sin(frame * 0.17);
return (
<>
<div style={{position: 'absolute', left: LATERNE.x - 18, top: LATERNE.y - 92, width: 36, height: 8, borderRadius: 3, background: '#3a3036'}} />
<div style={{position: 'absolute', left: LATERNE.x - 3, top: LATERNE.y - 112, width: 6, height: 22, background: '#3a3036'}} />
<div
style={{
position: 'absolute',
left: LATERNE.x - 24,
top: LATERNE.y - 84,
width: 48,
height: 70,
borderRadius: 10,
background: `radial-gradient(circle at 50% 55%, #fff4c2 0%, #ffc95e ${40 * flackern}%, #e08a3c 100%)`,
border: '5px solid #3a3036',
}}
/>
<div style={{position: 'absolute', left: LATERNE.x - 30, top: LATERNE.y - 16, width: 60, height: 12, borderRadius: 4, background: '#3a3036'}} />
</>
);
};
export const Szene6: React.FC = () => {
const f = useCurrentFrame();
const {z, dauer} = S6;
const flackern = 0.92 + 0.08 * Math.sin(f * 0.5) * Math.sin(f * 0.17);
const winken = z.t1.start - 6;
const schlaeft = z.t1.ende;
const kam = kamFahrt(f, [
[0, 1350, 600, 1.15],
[z.l1.start, LULU_X6 - 120, 520, 1.5],
[z.p1.start, NEST_X, 840, 2.4],
[z.t1.start, 1420, 680, 1.4],
[schlaeft + 10, NEST_X, 850, 2.6],
[dauer, NEST_X, 860, 2.9],
]);
return (
<>
<Kamera {...kam}>
<Ort name="garten_frost_nacht" />
{f < winken ? (
<Figur
pose={[
[0, 'noa_A6_blick-rechts'],
[z.p1.start, 'noa_A3_lachen'],
]}
x={NOA_X6}
y={BODEN}
stauchY={atmen(f, 2)}
filter={NACHT}
/>
) : (
<ClipFigur name="noa_C4_winken" start={winken} tempo={1.25} x={NOA_X6} y={BODEN} filter={NACHT} ersatz="noa_A_arm-hoch-winken" />
)}
<Nest x={NEST_X} y={BODEN} seite="hinten" filter={NACHT} />
<div style={{position: 'absolute', inset: 0, clipPath: `inset(0 0 ${1080 - BODEN - 4}px 0)`}}>
<Figur
pose={[
[0, 'pino_A2_augen-halb'],
[z.p1.start, 'pino_A1_augen-zu'],
[z.p1.start + 20, 'pino_A2_augen-halb'],
[schlaeft, 'pino_B_schlaeft-eingerollt'],
]}
x={NEST_X + 10}
y={BODEN - 34}
stauchY={atmen(f, 1, 0.02)}
schatten={false}
filter={NACHT}
blende={14}
/>
</div>
<Nest x={NEST_X} y={BODEN} seite="vorne" filter={NACHT} />
<Figur
pose={[
[0, 'lulu_A5_blick-links'],
[z.l1.start, 'lulu_A1_augen-zu'],
[z.l1.ende, 'lulu_A3_lachen'],
[schlaeft, 'lulu_A2_augen-halb'],
]}
x={LULU_X6}
y={BODEN - 10}
filter={NACHT}
stauchY={atmen(f, 3, 0.006)}
drehung={f > z.t1.start && f < z.t1.ende ? Math.sin((f - z.t1.start) * 0.25) * 2 : 0}
/>
<div
style={{
position: 'absolute',
left: LATERNE.x - 520,
top: LATERNE.y - 560,
width: 1040,
height: 900,
background: `radial-gradient(closest-side, rgba(255, 200, 110, ${0.3 * flackern}), rgba(255, 180, 90, 0.08) 55%, rgba(255, 180, 90, 0) 100%)`,
}}
/>
<Laterne frame={f} />
<Funkeln x={1180} y={900} start={10} dauer={50} s={0.6} />
<Funkeln x={1660} y={950} start={60} dauer={50} s={0.6} />
<Zzz x={NEST_X + 50} y={BODEN - 110} start={schlaeft} s={0.7} />
</Kamera>
<Vignette staerke={0.5} />
<Untertitel zeilen={S6.liste} />
<Blende dauer={dauer} rein={16} raus={0} farbe="#1c1a24" />
</>
);
};

View file

@ -0,0 +1,185 @@
import React from 'react';
import {random} from 'remotion';
// Requisiten der Folge 3 (alle als SVG, Ankerpunkt jeweils unten Mitte bzw. wie angegeben).
const svgStil = (x: number, y: number, b: number, h: number, s = 1, r = 0): React.CSSProperties => ({
position: 'absolute',
left: x - (b * s) / 2,
top: y - h * s,
width: b * s,
height: h * s,
transform: `rotate(${r}deg)`,
transformOrigin: '50% 100%',
overflow: 'visible',
});
// Krähe: sitzt (fliegt = 0) oder fliegt mit Flügelschlag (fliegt = 1)
export const Kraehe: React.FC<{x: number; y: number; s?: number; fliegt?: number; frame: number}> = ({x, y, s = 1, fliegt = 0, frame}) => {
const schlag = fliegt ? Math.sin(frame * 0.9) * 28 : 0;
return (
<svg viewBox="0 0 120 90" style={svgStil(x, y, 120, 90, s)}>
<ellipse cx={60} cy={58} rx={30} ry={20} fill="#2f2c33" />
<circle cx={86} cy={40} r={14} fill="#2f2c33" />
<path d="M 98 38 L 114 44 L 98 46 Z" fill="#5a4a3a" />
<circle cx={90} cy={37} r={2.5} fill="#fff" />
<path d="M 32 56 L 6 50 L 10 64 Z" fill="#2f2c33" />
{!fliegt && (
<g stroke="#5a4a3a" strokeWidth={3}>
<line x1={56} y1={76} x2={54} y2={88} />
<line x1={66} y1={76} x2={68} y2={88} />
</g>
)}
<path d={`M 50 52 Q 40 ${30 - schlag} 70 ${20 - schlag} Q 66 40 70 52 Z`} fill="#3d3a42" />
</svg>
);
};
// Noas roter Fäustling
export const Faeustling: React.FC<{x: number; y: number; s?: number; r?: number}> = ({x, y, s = 1, r = 0}) => (
<svg viewBox="0 0 70 80" style={svgStil(x, y, 70, 80, s, r)}>
<path d="M 18 76 L 18 34 C 18 12, 54 10, 54 34 L 54 76 Z" fill="#c8423a" />
<path d="M 18 44 C 4 40, 2 26, 14 22 C 20 22, 22 30, 22 36" fill="#c8423a" stroke="#a8322c" strokeWidth={2} />
<rect x={14} y={62} width={44} height={16} rx={5} fill="#f2e6d6" />
{[22, 30, 38, 46].map((sx) => (
<line key={sx} x1={sx} y1={64} x2={sx} y2={76} stroke="#d8c8b4" strokeWidth={2} />
))}
</svg>
);
// Grüner Wollfaden: von (x1, y1) mit Wellen nach (x2, y2); `laenge` 0–1 zeichnet ihn nach und nach
export const Faden: React.FC<{x1: number; y1: number; x2: number; y2: number; frame: number; laenge?: number; dicke?: number}> = ({x1, y1, x2, y2, frame, laenge = 1, dicke = 5}) => {
const punkte = new Array(25).fill(0).map((_, i) => {
const t = (i / 24) * laenge;
const wx = x1 + (x2 - x1) * t;
const wy = y1 + (y2 - y1) * t + Math.sin(t * 18 + frame * 0.08) * 6;
return `${wx},${wy}`;
});
return (
<svg style={{position: 'absolute', left: 0, top: 0, width: 1920, height: 1080, overflow: 'visible'}}>
<polyline points={punkte.join(' ')} fill="none" stroke="#7f9a5a" strokeWidth={dicke} strokeLinecap="round" strokeLinejoin="round" />
</svg>
);
};
// Lulus Schal (lose), hängt bzw. flattert; Mitte oben ist der Anker
export const Schal: React.FC<{x: number; y: number; s?: number; frame: number; wind?: number}> = ({x, y, s = 1, frame, wind = 1}) => {
const w1 = Math.sin(frame * 0.12) * 14 * wind;
const w2 = Math.sin(frame * 0.12 + 1.3) * 18 * wind;
return (
<svg viewBox="-60 0 220 260" style={{position: 'absolute', left: x - 50 * s, top: y, width: 220 * s, height: 260 * s, overflow: 'visible'}}>
<path d={`M 0 0 C 30 -6, 70 -6, 100 0 C ${100 + w1} 80, ${90 + w1} 150, ${100 + w2} 220 L ${70 + w2} 226 C ${60 + w1} 150, ${70 + w1} 80, 66 20 C 50 30, 36 26, 30 18 C 34 80, ${24 + w1} 150, ${30 + w2} 200 L ${0 + w2} 206 C ${-6 + w1} 140, ${4 + w1} 70, 0 0 Z`} fill="#8fa66a" stroke="#6f8650" strokeWidth={3} />
{new Array(6).fill(0).map((_, i) => (
<line key={i} x1={6 + i * 4 + w2} y1={206 - i} x2={4 + i * 4 + w2} y2={224} stroke="#6f8650" strokeWidth={2} />
))}
<g transform={`translate(${86 + w2 * 0.8} 196)`}>
{new Array(6).fill(0).map((_, i) => (
<ellipse key={i} cx={0} cy={-8} rx={4} ry={8} fill="#fffaf0" transform={`rotate(${i * 60})`} />
))}
<circle r={4} fill="#e8b84a" />
</g>
</svg>
);
};
// Ein abgebrochener Tannenzweig
export const Tannenzweig: React.FC<{x: number; y: number; s?: number; r?: number}> = ({x, y, s = 1, r = 0}) => (
<svg viewBox="0 0 160 70" style={svgStil(x, y, 160, 70, s, r)}>
<path d="M 6 40 Q 80 30 154 36" stroke="#6b5040" strokeWidth={5} fill="none" strokeLinecap="round" />
{new Array(14).fill(0).map((_, i) => {
const nx = 16 + i * 10;
return (
<g key={i} stroke={i % 2 ? '#40624a' : '#4f7258'} strokeWidth={4} strokeLinecap="round">
<line x1={nx} y1={36} x2={nx + 12} y2={14 + random('tz' + i) * 6} />
<line x1={nx} y1={38} x2={nx + 12} y2={60 - random('tzu' + i) * 6} />
</g>
);
})}
</svg>
);
// Adventskranz von schräg oben: `fertig` 0 = lose Zweige, 1 = Kreis; Band, Kerzen, Flamme einzeln zuschaltbar
export const Kranz: React.FC<{x: number; y: number; s?: number; fertig: number; band?: number; kerzen?: number; brennt?: number; frame: number}> = ({
x,
y,
s = 1,
fertig,
band = 0,
kerzen = 0,
brennt = 0,
frame,
}) => {
const RX = 150;
const RY = 52;
const zweige = new Array(16).fill(0).map((_, i) => {
const w = (i / 16) * Math.PI * 2;
const zx = Math.cos(w) * RX;
const zy = Math.sin(w) * RY;
const lx = -170 + random('kl' + i) * 340;
const ly = -10 + random('kly' + i) * 40;
return {
x: lx + (zx - lx) * fertig,
y: ly + (zy - ly) * fertig,
r: random('kr' + i) * 180 * (1 - fertig) + ((w * 180) / Math.PI + 90) * fertig,
};
});
const kerzenPos = [0.25, 0.75, 1.25, 1.75].map((t) => ({x: Math.cos(t * Math.PI) * RX, y: Math.sin(t * Math.PI) * RY}));
const flackern = 1 + Math.sin(frame * 0.6) * 0.08 + Math.sin(frame * 1.7) * 0.05;
return (
<div style={{position: 'absolute', left: x, top: y, transform: `scale(${s})`, transformOrigin: '0 0'}}>
<svg viewBox="-260 -260 520 360" style={{position: 'absolute', left: -260, top: -260, width: 520, height: 360, overflow: 'visible'}}>
{brennt > 0 && <circle cx={kerzenPos[3].x} cy={kerzenPos[3].y - 120} r={120 * flackern} fill="#ffd27a" opacity={0.25 * brennt} />}
{zweige.map((z, i) => (
<g key={i} transform={`translate(${z.x} ${z.y}) rotate(${z.r})`}>
<ellipse rx={58} ry={20} fill={i % 2 ? '#40624a' : '#4f7258'} />
{new Array(7).fill(0).map((_, k) => (
<line key={k} x1={-48 + k * 15} y1={0} x2={-40 + k * 15} y2={-18} stroke="#5f8466" strokeWidth={4} strokeLinecap="round" />
))}
</g>
))}
{band > 0 &&
[0.1, 0.6, 1.1, 1.6].map((t, i) => (
<ellipse key={i} cx={Math.cos(t * Math.PI) * RX} cy={Math.sin(t * Math.PI) * RY} rx={18} ry={22} fill="#c8423a" opacity={band} />
))}
{kerzenPos.map((k, i) => {
const da = Math.min(1, Math.max(0, kerzen * 4 - i));
if (da <= 0) return null;
return (
<g key={i} opacity={da} transform={`translate(${k.x} ${k.y - (1 - da) * 40})`}>
<rect x={-14} y={-90} width={28} height={90} rx={4} fill="#c8423a" />
<ellipse cx={0} cy={-90} rx={14} ry={5} fill="#d9605a" />
<line x1={0} y1={-90} x2={0} y2={-100} stroke="#3a2e28" strokeWidth={3} />
{i === 3 && brennt > 0 && (
<g opacity={brennt} transform={`translate(0 -102) scale(${flackern})`}>
<path d="M 0 -34 C 12 -18, 12 -4, 0 0 C -12 -4, -12 -18, 0 -34 Z" fill="#ffb53a" />
<path d="M 0 -22 C 6 -12, 6 -4, 0 -2 C -6 -4, -6 -12, 0 -22 Z" fill="#fff2b0" />
</g>
)}
</g>
);
})}
</svg>
</div>
);
};
// Hand eines Großen mit Streichholz (nur die Hand ist im Bild), kommt von rechts oben
export const GrosseHand: React.FC<{x: number; y: number; p: number; frame: number}> = ({x, y, p, frame}) => {
if (p <= 0 || p >= 1) return null;
const rein = Math.sin(p * Math.PI);
const hx = x + (1 - rein) * 500;
const hy = y - (1 - rein) * 300;
const flamme = 1 + Math.sin(frame * 0.8) * 0.1;
return (
<svg viewBox="0 0 400 200" style={{position: 'absolute', left: hx, top: hy, width: 400, height: 200, overflow: 'visible'}}>
<path d="M 120 120 C 160 80, 260 70, 420 90 L 420 170 C 300 170, 200 170, 150 150 C 120 140, 100 140, 120 120 Z" fill="#e8b894" />
<path d="M 150 100 C 120 96, 100 104, 96 112 C 110 116, 130 114, 150 110 Z" fill="#e0ac88" />
<line x1={100} y1={108} x2={20} y2={80} stroke="#e8d0a0" strokeWidth={6} strokeLinecap="round" />
<circle cx={20} cy={80} r={6} fill="#8a3a2a" />
<g transform={`translate(18 74) scale(${flamme})`}>
<path d="M 0 -26 C 10 -14, 10 -2, 0 0 C -10 -2, -10 -14, 0 -26 Z" fill="#ffb53a" />
</g>
<path d="M 380 80 L 420 80 L 420 180 L 360 180 Z" fill="#6e8aa8" />
</svg>
);
};

View file

@ -0,0 +1,52 @@
{
"titel": "Lulus Schal ist weg",
"lied": "Einer klein und einer groß",
"zeilen": {
"s2/e1": "Es ist ein kalter Morgen. Alles glitzert vom Raureif.",
"s2/l1": "Brrr! Mein Hals! Mein ganzer langer Hals ist kalt!",
"s2/l2": "Mein Schal … mein Schal ist weg!",
"s2/n1": "Lulu! Was ist los?",
"s2/p1": "Hoaaah … was ist denn hier los?",
"s2/e2": "Lulu hat einen sehr langen Hals. Ohne Schal friert sie von oben bis unten.",
"s2/e3": "Was meinst du, wo könnte der Schal sein?",
"s3/n1": "Wir suchen überall! Oben und unten!",
"s3/l1": "Ich schau auf dem Dach.",
"s3/l2": "Nein. Da sitzt nur eine Krähe.",
"s3/p1": "Und ich schau unter der Bank. Hier ist was Rotes!",
"s3/n2": "Mein Fäustling! Den such ich schon seit Tagen! Danke, Pino!",
"s3/n3": "Und hinter dem Holzstapel? Hm … nichts.",
"s3/p2": "Doch! Da! Ein Faden!",
"s3/e1": "Welche Farbe hat der Faden?",
"s3/e2": "Grün! Wie Lulus Schal!",
"s3/p3": "Ich folge ihm. Mit der Nase. Hier lang … und hier lang …",
"s3/l3": "Und ich sehe von hier oben, wohin er führt. Zum Wald!",
"s3/e3": "Pino sieht, was unten ist. Lulu sieht, was weit weg ist. Zusammen finden sie den Weg.",
"s4/n1": "Da! Ganz oben in der Tanne!",
"s4/l1": "Mein Schal!",
"s4/e1": "Wo ist der Schal: unter der Tanne oder oben in der Tanne?",
"s4/e2": "Oben in der Tanne! Der Wind hat ihn in der Nacht dorthin geweht.",
"s4/l2": "Ganz vorsichtig … so. Hab ihn!",
"s4/e3": "Beim Herausziehen brechen ein paar Tannenzweige ab.",
"s4/l3": "Aaah. Warm! Danke, Pino. Ohne dich hätte ich den Faden nie gesehen.",
"s4/p1": "Und ohne dich wären wir nie so hoch gekommen.",
"lied/r1": "Einer klein und einer groß,",
"lied/r2": "und dazwischen – na, wer bloß?",
"lied/r3": "Noa steht in der Mitte drin,",
"lied/r4": "zusammen kriegen wir alles hin!",
"s5/n1": "Schaut mal, die vielen Tannenzweige! Daraus machen wir einen Adventskranz!",
"s5/e1": "Ein Adventskranz ist ein Kranz aus Tannenzweigen mit vier Kerzen. An jedem Sonntag im Advent brennt eine Kerze mehr.",
"s5/l1": "Ich halte fest.",
"s5/p1": "Und ich hab das rote Band!",
"s5/n2": "Und jetzt vier Kerzen.",
"s5/e2": "Heute ist der erste Advent. Die erste Kerze hat ein Großer angezündet.",
"s5/a1": "Ein Licht am Kranz, so warm und klein,",
"s5/a2": "es leuchtet in die Nacht hinein.",
"s5/a3": "Wir zählen mit und warten fein,",
"s5/a4": "bald wird das Winterfest hier sein!",
"s5/e3": "Wie viele Kerzen hat der Kranz? Und wie viele brennen schon?",
"s5/e4": "Vier Kerzen. Eine brennt.",
"s6/l1": "Den Schal lass ich nie mehr los.",
"s6/p1": "Noch zwei Tage, dann hängt unser Kalender.",
"s6/t1": "Gute Nacht, Pino!"
}
}

View file

@ -0,0 +1,52 @@
{
"titel": "La bufanda de Lulu ha desaparecido",
"lied": "Uno pequeño y otra alta",
"zeilen": {
"s2/e1": "Es una mañana fría. Todo brilla con la escarcha.",
"s2/l1": "¡Brrr! ¡Mi cuello! ¡Tengo todo mi largo cuello helado!",
"s2/l2": "Mi bufanda… ¡mi bufanda no está!",
"s2/n1": "¡Lulu! ¿Qué pasa?",
"s2/p1": "Uaaah… ¿qué pasa aquí?",
"s2/e2": "Lulu tiene un cuello muy largo. Sin bufanda, tiene frío de arriba abajo.",
"s2/e3": "¿Tú qué crees? ¿Dónde puede estar la bufanda?",
"s3/n1": "¡Busquemos por todas partes! ¡Arriba y abajo!",
"s3/l1": "Yo miro en el tejado…",
"s3/l2": "No. Solo hay un cuervo.",
"s3/p1": "Y yo miro debajo del banco. ¡Aquí hay algo rojo!",
"s3/n2": "¡Mi manopla! ¡La estaba buscando desde hace días! ¡Gracias, Pino!",
"s3/n3": "¿Y detrás del montón de leña? Mmm… nada.",
"s3/p2": "¡Sí! ¡Ahí! ¡Un hilo!",
"s3/e1": "¿De qué color es el hilo?",
"s3/e2": "¡Verde! ¡Como la bufanda de Lulu!",
"s3/p3": "Lo sigo. Con la nariz. Por aquí… y por aquí…",
"s3/l3": "Y yo veo desde aquí arriba adónde lleva. ¡Al bosque!",
"s3/e3": "Pino ve lo que está abajo. Lulu ve lo que está lejos. Juntos encuentran el camino.",
"s4/n1": "¡Allí! ¡Arriba del todo en el abeto!",
"s4/l1": "¡Mi bufanda!",
"s4/e1": "¿Dónde está la bufanda: debajo del abeto o arriba en el abeto?",
"s4/e2": "¡Arriba en el abeto! El viento la llevó hasta allí durante la noche.",
"s4/l2": "Con mucho cuidado… así. ¡La tengo!",
"s4/e3": "Al sacarla, se rompen algunas ramas del abeto.",
"s4/l3": "Aaah. ¡Qué calentita! Gracias, Pino. Sin ti, nunca habría visto el hilo.",
"s4/p1": "Y sin ti, nunca habríamos llegado tan alto.",
"lied/r1": "Uno pequeño y otra alta,",
"lied/r2": "y en el medio… ¿quién nos falta?",
"lied/r3": "Noa, Noa, en el centro está,",
"lied/r4": "¡y juntos sí se podrá!",
"s5/n1": "¡Miren cuántas ramas! ¡Con ellas hacemos una corona de Adviento!",
"s5/e1": "Una corona de Adviento es un círculo de ramas de abeto con cuatro velas. Cada domingo de Adviento se enciende una vela más.",
"s5/l1": "Yo la sujeto.",
"s5/p1": "¡Y yo tengo la cinta roja!",
"s5/n2": "Y ahora, cuatro velas.",
"s5/e2": "Hoy es el primer domingo de Adviento. La primera vela la ha encendido un adulto.",
"s5/a1": "Una luz en la corona brilla,",
"s5/a2": "pequeñita y calentita.",
"s5/a3": "Contamos juntos sin parar:",
"s5/a4": "¡la Fiesta del Invierno va a llegar!",
"s5/e3": "¿Cuántas velas tiene la corona? ¿Y cuántas están encendidas?",
"s5/e4": "Cuatro velas. Una encendida.",
"s6/l1": "Esta bufanda no la suelto nunca más.",
"s6/p1": "Dos días más y colgamos nuestro calendario.",
"s6/t1": "¡Buenas noches, Pino!"
}
}

View file

@ -0,0 +1,52 @@
{
"titel": "L'écharpe de Lulu a disparu",
"lied": "Un tout petit, une très grande",
"zeilen": {
"s2/e1": "C'est un matin froid. Tout scintille sous le givre.",
"s2/l1": "Brrr ! Mon cou ! Tout mon long cou est gelé !",
"s2/l2": "Mon écharpe… mon écharpe a disparu !",
"s2/n1": "Lulu ! Qu'est-ce qui se passe ?",
"s2/p1": "Ouaaah… qu'est-ce qui se passe ici ?",
"s2/e2": "Lulu a un très long cou. Sans écharpe, elle a froid de haut en bas.",
"s2/e3": "À ton avis, où peut bien être l'écharpe ?",
"s3/n1": "On cherche partout ! En haut et en bas !",
"s3/l1": "Je regarde sur le toit…",
"s3/l2": "Non. Il n'y a qu'une corneille.",
"s3/p1": "Et moi, je regarde sous le banc. Il y a quelque chose de rouge !",
"s3/n2": "Ma moufle ! Je la cherche depuis des jours ! Merci, Pino !",
"s3/n3": "Et derrière le tas de bois ? Hmm… rien.",
"s3/p2": "Si ! Là ! Un fil !",
"s3/e1": "De quelle couleur est le fil ?",
"s3/e2": "Vert ! Comme l'écharpe de Lulu !",
"s3/p3": "Je le suis. Avec mon nez. Par ici… et par ici…",
"s3/l3": "Et moi, d'en haut, je vois où il mène. Vers la forêt !",
"s3/e3": "Pino voit ce qui est en bas. Lulu voit ce qui est loin. Ensemble, ils trouvent le chemin.",
"s4/n1": "Là ! Tout en haut du sapin !",
"s4/l1": "Mon écharpe !",
"s4/e1": "Où est l'écharpe : sous le sapin ou en haut du sapin ?",
"s4/e2": "En haut du sapin ! Le vent l'a emportée là-haut pendant la nuit.",
"s4/l2": "Tout doucement… voilà. Je l'ai !",
"s4/e3": "Quand elle la tire, quelques branches de sapin se cassent.",
"s4/l3": "Aaah. Que c'est chaud ! Merci, Pino. Sans toi, je n'aurais jamais vu le fil.",
"s4/p1": "Et sans toi, on ne serait jamais montés si haut.",
"lied/r1": "Un tout petit, une très grande,",
"lied/r2": "Noa au milieu de la bande.",
"lied/r3": "En haut, en bas, et entre les deux –",
"lied/r4": "ensemble, on fait de notre mieux !",
"s5/n1": "Regardez toutes ces branches ! On va faire une couronne de l'Avent !",
"s5/e1": "Une couronne de l'Avent, c'est un cercle de branches de sapin avec quatre bougies. Chaque dimanche de l'Avent, on allume une bougie de plus.",
"s5/l1": "Je la tiens.",
"s5/p1": "Et moi, j'ai le ruban rouge !",
"s5/n2": "Et maintenant, quatre bougies.",
"s5/e2": "Aujourd'hui, c'est le premier dimanche de l'Avent. La première bougie, c'est un grand qui l'a allumée.",
"s5/a1": "Une bougie sur la couronne,",
"s5/a2": "si petite, elle rayonne.",
"s5/a3": "On compte ensemble, on attend :",
"s5/a4": "la fête de l'hiver arrive en chantant !",
"s5/e3": "Combien de bougies a la couronne ? Et combien sont allumées ?",
"s5/e4": "Quatre bougies. Une est allumée.",
"s6/l1": "Cette écharpe, je ne la lâche plus jamais.",
"s6/p1": "Encore deux jours, et on accroche notre calendrier.",
"s6/t1": "Bonne nuit, Pino !"
}
}

View file

@ -0,0 +1,69 @@
import React from 'react';
import {interpolate, useCurrentFrame} from 'remotion';
import {SCHRIFT} from '../baukasten/untertitel';
// Mitlese-Text für die Liedvideos („Pinos Liederbuch“).
// Jede Zeile ist ein String aus Wörtern mit Startzeit in Sekunden: „Einer@9.43 klein@9.69 …“.
// Leerzeichen innerhalb eines Wortes als „_“ schreiben („ist_…?@77“).
// Die Zeiten stammen aus Sunos Wort-Ausrichtung (aligned_lyrics) der geladenen Fassung.
export type LiedZeile = string;
type Wort = {text: string; t: number};
export const zerlege = (zeile: LiedZeile): Wort[] =>
zeile.split(' ').map((w) => {
const [text, t] = w.split('@');
return {text: text.replace(/_/g, ' '), t: Number(t)};
});
export const zeilenStart = (zeile: LiedZeile) => zerlege(zeile)[0].t;
const VOR = 0.35; // Zeile erscheint kurz vor dem ersten Wort
const NACH = 1.4; // und bleibt nach dem letzten Wort so lange stehen (höchstens bis zur nächsten Zeile)
export const Karaoke: React.FC<{zeilen: LiedZeile[]; fps?: number}> = ({zeilen, fps = 30}) => {
const f = useCurrentFrame();
const jetzt = f / fps;
const woerter = zeilen.map(zerlege);
const i = woerter.findIndex((w, k) => {
const von = w[0].t - VOR;
const naechste = woerter[k + 1]?.[0].t ?? Infinity;
const bis = Math.min(w[w.length - 1].t + NACH, naechste - VOR);
return jetzt >= von && jetzt < bis;
});
if (i < 0) return null;
const w = woerter[i];
const von = w[0].t - VOR;
const bis = Math.min(w[w.length - 1].t + NACH, (woerter[i + 1]?.[0].t ?? Infinity) - VOR);
const deck = Math.min(
interpolate(jetzt, [von, von + 0.2], [0, 1], {extrapolateRight: 'clamp'}),
interpolate(jetzt, [bis - 0.2, bis], [1, 0], {extrapolateLeft: 'clamp'}),
);
return (
<div style={{position: 'absolute', left: 0, right: 0, bottom: 56, display: 'flex', justifyContent: 'center', opacity: deck}}>
<div
style={{
background: 'rgba(251,244,228,0.88)',
borderRadius: 28,
padding: '14px 36px 18px',
boxShadow: '0 6px 24px rgba(60,40,20,0.18)',
fontFamily: SCHRIFT,
fontWeight: 600,
fontSize: 60,
lineHeight: 1.1,
whiteSpace: 'nowrap',
}}
>
{w.map((wort, k) => {
const an = jetzt >= wort.t;
const hops = an ? interpolate(jetzt, [wort.t, wort.t + 0.12, wort.t + 0.3], [0, -6, 0], {extrapolateRight: 'clamp'}) : 0;
return (
<span key={k} style={{display: 'inline-block', marginRight: k < w.length - 1 ? '0.28em' : 0, color: an ? '#c8502c' : '#7a6650', transform: `translateY(${hops}px)`}}>
{wort.text}
</span>
);
})}
</div>
</div>
);
};

View file

@ -0,0 +1,336 @@
import React from 'react';
import {AbsoluteFill, Audio, Sequence, interpolate, random, staticFile, useCurrentFrame} from 'remotion';
import {INTRO_OPTIONEN, Intro, OUTRO, Outro} from '../../baukasten/buch';
import {Figur, Geher, Kamera, type Posenfolge} from '../../baukasten/figur';
import {Blende, Vignette, huepfer, kamFahrt} from '../../baukasten/helfer';
import {Apfel, Blume, Funkeln, Klatschen, Laubhaufen, Ruf} from '../../baukasten/natur';
import {BODEN, Ort} from '../../baukasten/orte';
import {SCHRIFT} from '../../baukasten/untertitel';
import {plane} from '../../baukasten/zeit';
import {Karaoke} from '../karaoke';
import {DAUER, KARTEN, T, ZEILEN} from './zeiten';
// Liedvideo „Einer klein und einer groß“ (Pinos Liederbuch, Lied 3) – ENTWURF.
// Ton: Suno-Fassung „Noa in der Mitte“ (25385c27…, Pro-Download), auf −14 LUFS
// normalisiert nach public/musik/lieder/lied03-de.mp3. Alle Zeiten in Sekunden aus
// Sunos Wort-Ausrichtung (zeiten.ts); das Bild folgt dem Gesang, nicht dem Drehbuch-Raster.
const FPS = 30;
const s = (sek: number) => Math.round(sek * FPS);
const SCHLAG = (FPS * 60) / 104; // 104 BPM ≈ 17,3 Frames pro Schlag
const ANFANG = s(T.c1); // erster Schlag des Gesangs (Phase für Wippen/Klatschen)
const PINO_X = 760;
const NOA_X = 980;
const LULU_X = 1300;
const LULU_X2 = 1470; // nach Strophe 3 („Langsam geht auch Lulu mit“)
// Intro (Buch geht auf) genau bis zum ersten gesungenen Wort
const INTRO = plane([{id: 'buch', dauer: 2.2}, {id: 't1', dauer: 3}, {id: 't2', dauer: T.c1 - 0.3 - 2.2 - 3 - INTRO_OPTIONEN.nachlauf}], INTRO_OPTIONEN);
// Kamera: jeder Punkt gilt ab seiner Zeit, davor 0,7 s Fahrt dorthin
const KAMERA: [number, number, number, number][] = [
[T.c1, 1080, 660, 1.25],
[T.v1, 1320, 430, 1.7], // Apfel oben
[T.v1z[2], 760, 800, 1.8], // Blume unten
[T.c2, 1080, 660, 1.25],
[T.v2, 980, 720, 1.7], // Noas Trommel
[T.v2z[1], 1000, 640, 1.3], // alle klatschen
[T.v2z[2], 720, 820, 1.8], // Pino raschelt
[T.v2z[3], 1260, 420, 1.55], // Lulu lauscht
[T.v3, 960, 620, 1.12], // schnell / langsam: weit
[T.c3, 1120, 660, 1.25],
[T.v4, 1440, 440, 1.55], // Lulus Schal
[T.v4z[2], 780, 820, 1.8], // Pinos Zeh
[T.m, 1120, 640, 1.18], // Mitmach-Teil
[T.gag, 1110, 700, 1.4],
[T.c4, 1120, 660, 1.25],
[T.zw, 1060, 600, 1.1],
[T.c5, 1120, 660, 1.3],
[T.ende, 1120, 640, 1.2],
];
const kamera = (f: number) => {
const p: [number, number, number, number][] = [];
KAMERA.forEach(([t, x, y, z], i) => {
const fr = s(t);
if (i > 0) p.push([fr - 21, ...KAMERA[i - 1].slice(1)] as [number, number, number, number]);
p.push([fr, x, y, z]);
});
return kamFahrt(f, p);
};
const imAbschnitt = (f: number, von: number, bis: number) => f >= s(von) && f < s(bis);
// Noa klatscht auf jeden zweiten Schlag (ab Gesangsbeginn), in [von, bis)
const klatschen = (von: number, bis: number, jeden = 2): Posenfolge => {
const folge: Posenfolge = [];
for (let t = ANFANG; t < s(bis); t += jeden * SCHLAG) {
if (t < s(von)) continue;
const k = Math.round(t);
folge.push([k - 3, 'noa_A_klatschen'], [k + 4, 'noa_A3_lachen']);
}
return folge;
};
const NOA: Posenfolge = [
[0, 'noa_A3_lachen'],
...klatschen(T.c1, T.cz(T.c1)[3]),
[s(T.cz(T.c1)[3]), 'noa_A_arme-hoch'],
[s(T.v1), 'noa_A3_lachen'],
...klatschen(T.c2, T.cz(T.c2)[3]),
[s(T.cz(T.c2)[3]), 'noa_A_arme-hoch'],
[s(T.v2), 'noa_A3_lachen'],
...klatschen(T.v2z[1], T.v2z[2], 1), // „Alle klatschen laut herum“
[s(T.v2z[2]), 'noa_A5_blick-links'],
[s(T.v2z[3]), 'noa_A3_lachen'],
...klatschen(T.c3, T.cz(T.c3)[3]),
[s(T.cz(T.c3)[3]), 'noa_A_arme-hoch'],
[s(T.v4), 'noa_A6_blick-rechts'],
[s(T.v4z[2]), 'noa_A5_blick-links'],
[s(T.m), 'noa_B_zeigen'],
[s(T.gag), 'noa_A4_staunen'],
[s(T.gag + 4.5), 'noa_A3_lachen'],
...klatschen(T.c4, T.cz(T.c4)[3]),
[s(T.cz(T.c4)[3]), 'noa_A_arme-hoch'],
[s(T.zw + 1), 'noa_A3_lachen'],
...klatschen(T.c5, T.cz(T.c5)[3]),
[s(T.cz(T.c5)[3]), 'noa_A_arme-hoch'],
[s(T.ende), 'noa_A_arm-hoch-winken'],
];
const PINO: Posenfolge = [
[0, 'pino_A3_lachen'],
[s(T.v1z[3]), 'pino_A_hinterbeine'], // „Pino pflückt sie“
[s(T.c2), 'pino_A3_lachen'],
[s(T.v2z[2]), 'pino_A5_blick-links'], // raschelt leis
[s(T.v2z[3]), 'pino_A3_lachen'],
[s(T.v4z[2]), 'pino_A4_staunen'],
[s(T.v4z[3] + 1.4), 'pino_A3_lachen'],
[s(T.gag + 1), 'pino_A_hinterbeine'], // „Ich mach mich groß!“
[s(T.c4), 'pino_A3_lachen'],
[s(T.ende), 'pino_A3_lachen'],
];
const LULU: Posenfolge = [
[0, 'lulu_A3_lachen'],
[s(T.v1z[1]), 'lulu_A_apfel'], // „Lulu holt ihn mit dem Mund“
[s(T.v1z[2]), 'lulu_A3_lachen'],
[s(T.v2z[3]), 'lulu_A5_blick-links'], // lauscht
[s(T.v3), 'lulu_A3_lachen'],
[s(T.gag + 0.3), 'lulu_A_hals-unten'], // „Ich mach mich klein!“
[s(T.c4), 'lulu_A3_lachen'],
];
const Note: React.FC<{x: number; y: number; g: number; farbe: string}> = ({x, y, g, farbe}) => (
<svg width={60} height={80} viewBox="0 0 60 80" style={{position: 'absolute', left: x, top: y, transform: `scale(${g})`}}>
<ellipse cx={18} cy={64} rx={15} ry={11} fill={farbe} transform="rotate(-20 18 64)" />
<rect x={30} y={8} width={6} height={58} fill={farbe} />
<path d="M 36 8 C 50 18, 56 30, 46 44 C 50 30, 44 24, 36 22 Z" fill={farbe} />
</svg>
);
const Noten: React.FC = () => {
const f = useCurrentFrame();
return (
<>
{new Array(8).fill(0).map((_, i) => {
const t = ((f + i * 25) % 200) / 200;
const x = 200 + random(`n${i}`) * 1500 + Math.sin(t * 6 + i) * 30;
return (
<div key={i} style={{opacity: Math.sin(t * Math.PI) * 0.8}}>
<Note x={x} y={650 - t * 560} g={0.8 + random(`ns${i}`) * 0.6} farbe={['#c8642c', '#3f5a8a', '#5f8a4a', '#a0526b'][i % 4]} />
</div>
);
})}
</>
);
};
// Trommel vor Noa (Strophe 2)
const Trommel: React.FC<{x: number; y: number; schlag: number}> = ({x, y, schlag}) => (
<svg width={160} height={150} viewBox="-80 -75 160 150" style={{position: 'absolute', left: x - 80, top: y - 75, overflow: 'visible', transform: `scale(${1 + 0.06 * schlag})`}}>
<rect x={-62} y={-30} width={124} height={86} rx={10} fill="#c8362c" />
<path d="M -62 -10 L -30 50 L 0 -10 L 30 50 L 62 -10" stroke="#f4d58a" strokeWidth={6} fill="none" />
<ellipse cx={0} cy={-30} rx={62} ry={18} fill="#f4ead8" stroke="#8a5a3a" strokeWidth={5} />
<ellipse cx={0} cy={56} rx={62} ry={14} fill="#a52a22" />
</svg>
);
// Gegensatz-Karten im Mitmach-Teil: links das Wort, rechts „?“, das zur Antwort umklappt
const Karten: React.FC = () => {
const f = useCurrentFrame();
const k = KARTEN.findIndex((c, i) => f >= s(c.frage) && f < s(KARTEN[i + 1]?.frage ?? T.gag));
if (k < 0) return null;
const c = KARTEN[k];
const bis = s(KARTEN[k + 1]?.frage ?? T.gag);
const ein = interpolate(f, [s(c.frage), s(c.frage) + 10], [0, 1], {extrapolateRight: 'clamp'});
const aus = interpolate(f, [bis - 8, bis], [1, 0], {extrapolateLeft: 'clamp'});
const klapp = interpolate(f, [s(c.antwort) - 4, s(c.antwort) + 4], [0, 1], {extrapolateLeft: 'clamp', extrapolateRight: 'clamp'});
const zeigeAntwort = klapp >= 0.5;
// freier Takt: drei Punkte zählen bis zur Antwort herunter
const frei = s(c.antwort) - s(c.frage + 2.9);
const punkte = Math.max(0, Math.min(3, 3 - Math.floor(((f - s(c.frage + 2.9)) / frei) * 3)));
const karte = (inhalt: React.ReactNode, farbe: string, extra: React.CSSProperties = {}) => (
<div
style={{
width: 300,
height: 150,
borderRadius: 30,
background: '#fbf4e4',
border: `8px solid ${farbe}`,
boxShadow: '0 8px 26px rgba(60,40,20,0.22)',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontFamily: SCHRIFT,
fontWeight: 600,
fontSize: 80,
color: farbe,
...extra,
}}
>
{inhalt}
</div>
);
return (
<div style={{position: 'absolute', top: 50, left: 70, display: 'flex', gap: 36, transformOrigin: '0 0', alignItems: 'center', opacity: Math.min(ein, aus), transform: `scale(${0.85 + 0.15 * ein})`}}>
{karte(c.wort, '#3f5a8a')}
<div style={{fontFamily: SCHRIFT, fontWeight: 600, fontSize: 70, color: '#8a6a4a'}}>↔</div>
{karte(
zeigeAntwort ? c.gegenteil : f >= s(c.frage + 2.9) ? '•'.repeat(punkte) || '?' : '?',
zeigeAntwort ? '#c8502c' : '#b8a68a',
{transform: `scaleX(${Math.abs(1 - 2 * klapp)}) scale(${zeigeAntwort ? 1 + 0.12 * Math.sin(Math.min(1, (f - s(c.antwort)) / 10) * Math.PI) : 1})`},
)}
</div>
);
};
const Garten: React.FC = () => {
const f = useCurrentFrame();
const kam = kamera(f);
const ph = (f - ANFANG) / SCHLAG; // Schläge seit Gesangsbeginn
const schlag = Math.abs(Math.sin(ph * Math.PI));
const wipp = (phase: number, h: number) => -Math.abs(Math.sin(ph * Math.PI + phase)) * h;
const schwank = (phase: number, g: number) => Math.sin((ph * Math.PI) / 2 + phase) * g;
const ruhig = f >= s(T.c5) ? 0.6 : 1; // Schluss-Refrain leiser, weniger Bewegung
// Strophe 3: Pino flitzt hin und her, Lulu geht langsam nach rechts
const flitzen = imAbschnitt(f, T.v3, T.v3z[2]);
const pinoX = flitzen ? PINO_X + 10 - 120 * Math.sin(((f - s(T.v3)) / s(T.v3z[2] - T.v3)) * Math.PI * 2) : PINO_X;
const pinoRichtung = flitzen ? -Math.cos(((f - s(T.v3)) / s(T.v3z[2] - T.v3)) * Math.PI * 2) : 0;
const luluGeht = imAbschnitt(f, T.v3z[2], T.c3);
const luluX = interpolate(f, [s(T.v3z[2]), s(T.c3 - 0.2)], [LULU_X, LULU_X2], {extrapolateLeft: 'clamp', extrapolateRight: 'clamp'});
// Strophe 4 und Gag: Recken und Ducken
const luluReck = interpolate(f, [s(T.v4z[1]), s(T.v4z[1] + 0.6), s(T.v4z[2]), s(T.v4z[2] + 0.4)], [1, 1.08, 1.08, 1], {extrapolateLeft: 'clamp', extrapolateRight: 'clamp'});
const pinoDuck = interpolate(f, [s(T.v4z[3]), s(T.v4z[3] + 0.3), s(T.juchhe), s(T.juchhe + 0.15)], [1, 0.8, 0.8, 1], {extrapolateLeft: 'clamp', extrapolateRight: 'clamp'});
const pinoGross = interpolate(f, [s(T.gag + 1), s(T.gag + 1.6), s(T.c4 - 0.6), s(T.c4)], [1, 1.25, 1.25, 1], {extrapolateLeft: 'clamp', extrapolateRight: 'clamp'});
// Gag: Pino und Lulu rücken zusammen („Nase an Nase“)
const gagNah = interpolate(f, [s(T.gag + 3), s(T.gag + 4.5), s(T.c4 - 0.8), s(T.c4)], [0, 1, 1, 0], {extrapolateLeft: 'clamp', extrapolateRight: 'clamp'});
// Hüpfer: am Refrain-Ende („hin!“), „juchhe“, Mitmach-Antworten
const pinoHuepf =
[T.cz(T.c1)[3] + 1.6, T.cz(T.c2)[3] + 1.6, T.cz(T.c3)[3] + 1.6, T.cz(T.c4)[3] + 1.6].reduce((a, t) => a + huepfer(f, s(t), 26, 12), 0) +
huepfer(f, s(T.juchhe), 46, 14) +
KARTEN.reduce((a, c) => a + huepfer(f, s(c.antwort), 22, 12), 0);
const abend = interpolate(f, [s(T.c5 - 1), s(T.c5 + 2)], [0, 1], {extrapolateLeft: 'clamp', extrapolateRight: 'clamp'});
const chor = [T.c1, T.c2, T.c3, T.c4, T.c5].some((c) => imAbschnitt(f, c, T.cz(c)[3] + 2.3)) || imAbschnitt(f, T.zw, T.c5);
return (
<>
<Kamera {...kam}>
<Ort name="garten_herbst" />
<div style={{position: 'absolute', inset: 0, opacity: abend}}>
<Ort name="garten_herbst_abend" />
</div>
<Laubhaufen x={470} y={BODEN + 6} wackeln={imAbschnitt(f, T.v2z[2], T.v2z[3]) ? 1 : 0} />
{/* Strophe 1 und Mitmach „oben“: Apfel hängt über Lulu */}
{(imAbschnitt(f, T.v1 - 1, T.v1z[1] + 0.5) || imAbschnitt(f, KARTEN[1].frage, KARTEN[2].frage)) && (
<Apfel x={1400} y={190 + Math.sin(f * 0.08) * 4} s={1.1} r={Math.sin(f * 0.08) * 6} />
)}
{(imAbschnitt(f, T.v1z[2] - 0.5, T.v1z[3] + 0.6) || imAbschnitt(f, KARTEN[1].frage, KARTEN[2].frage)) && <Blume x={640} y={BODEN - 20} s={0.9} />}
{imAbschnitt(f, T.v1z[3] + 0.6, T.c2 + 9) && <Blume x={PINO_X + 6} y={BODEN - 40} s={0.5} />}
{luluGeht ? (
<Geher figur="lulu" spiegeln x={luluX} y={BODEN} tempo={0.8} />
) : (
<Figur
pose={LULU}
x={luluX - 150 * gagNah}
y={BODEN}
drehung={schwank(0.5, 2.2 * ruhig)}
stauchY={(1 - 0.012 * schlag) * luluReck}
blende={8}
/>
)}
<Figur pose={NOA} x={NOA_X} y={BODEN + wipp(0.3, 10 * ruhig)} drehung={schwank(0, 3 * ruhig)} blende={3} />
{flitzen ? (
<Figur pose={`pino_A_laufen-${1 + (Math.floor(f / 3) % 4)}`} x={pinoX} y={BODEN + wipp(0, 10)} spiegeln={pinoRichtung < 0} />
) : (
<Figur
pose={PINO}
x={PINO_X + 230 * gagNah}
y={BODEN + wipp(0, 16 * ruhig) - pinoHuepf}
drehung={schwank(1, 4 * ruhig)}
stauchY={(1 - 0.03 * schlag) * pinoDuck * pinoGross}
blende={8}
/>
)}
{imAbschnitt(f, T.v2 - 0.3, T.v2z[2]) && <Trommel x={NOA_X + 120} y={BODEN - 90} schlag={schlag} />}
<Ruf text="Bumm!" x={NOA_X + 140} y={BODEN - 260} start={s(T.bumm)} dauer={26} groesse={90} />
<Ruf text="Bumm, bumm!" x={NOA_X + 60} y={BODEN - 330} start={s(T.v2z[1] + 0.9)} dauer={30} groesse={80} farbe="#c8362c" />
<Ruf text="rischel, raschel …" x={PINO_X - 60} y={BODEN - 220} start={s(T.v2z[2] + 0.5)} dauer={50} groesse={46} farbe="#8a6a4a" />
<Funkeln x={(PINO_X + 230 + LULU_X - 150) / 2} y={BODEN - 230} start={s(T.gag + 4.6)} dauer={50} s={1.4} />
</Kamera>
{imAbschnitt(f, T.v2z[1], T.v2z[2]) && <Klatschen x={960} y={170} takt={SCHLAG / 2} s={1.1} />}
{chor && <Noten />}
<Karten />
{/* Liedtitel im ersten Refrain */}
<div
style={{
position: 'absolute',
top: 46,
left: 0,
right: 0,
textAlign: 'center',
fontFamily: SCHRIFT,
fontWeight: 600,
fontSize: 44,
color: '#8a6a4a',
opacity: interpolate(f, [s(T.c1), s(T.c1 + 0.6), s(T.v1 - 0.8), s(T.v1)], [0, 1, 1, 0], {extrapolateLeft: 'clamp', extrapolateRight: 'clamp'}),
}}
>
♫ Einer klein und einer groß ♫
</div>
<Vignette />
</>
);
};
const OUTRO_START = DAUER - OUTRO.dauer;
const INTRO_DAUER = s(T.c1);
export const Lied03: React.FC = () => (
<AbsoluteFill style={{background: '#f4ead8'}}>
{/* Garten läuft ohne Versatz ab Frame 0 (Clips brauchen absolute Zeit), Intro liegt darüber */}
<Sequence durationInFrames={OUTRO_START + 12}>
<Garten />
</Sequence>
<Sequence from={INTRO_DAUER} durationInFrames={OUTRO_START - INTRO_DAUER + 12}>
<Blende dauer={OUTRO_START - INTRO_DAUER + 12} rein={10} raus={12} />
</Sequence>
<Sequence durationInFrames={INTRO_DAUER}>
<AbsoluteFill style={{background: '#f4ead8'}}>
<Intro plan={INTRO} titel={'Einer klein\nund einer groß'} posen={['pino_A3_lachen', 'noa_A3_lachen', 'lulu_A3_lachen']} />
</AbsoluteFill>
</Sequence>
<Sequence from={OUTRO_START}>
<Outro posen={['pino_A3_lachen', 'noa_A_arm-hoch-winken', 'lulu_A3_lachen']} />
</Sequence>
<Karaoke zeilen={ZEILEN} />
<Audio src={staticFile('musik/lieder/lied03-de.mp3')} />
</AbsoluteFill>
);
export const LIED03_DAUER = DAUER;

View file

@ -0,0 +1,108 @@
import type {LiedZeile} from '../karaoke';
// Zeiten (Sekunden) der Suno-Fassung „Noa in der Mitte“ (Song-ID 25385c27-bb5d-40d6-b3b6-cea78bfdaa0b),
// aus /api/gen/<id>/aligned_lyrics/v2/ am 03.11.2026. Mit „~“ markierte Werte sind geschätzt
// (Suno hat dort keine oder offensichtlich falsche Wortzeiten geliefert) – beim Hören prüfen.
// Achtung: Die Suno-Fassung singt noch Strophe 4 (lang/kurz) und die alte Mitmach-Frage
// „Ich klatsche laut, und jetzt bin ich … leise“ (Stand vor dem Team-Check).
const REFRAIN = (z: [number, number, number, number]) => z;
const C = {
c1: REFRAIN([9.43, 11.53, 13.84, 16.03]),
c2: REFRAIN([27.59, 30.01, 32.33, 34.49]),
c3: REFRAIN([55.26, 57.64, 60.01, 62.14]),
c4: REFRAIN([101.5, 103.62, 105.94, 108.06]),
c5: REFRAIN([119.6, 121.94, 124.25, 126.39]), // ~ erster Wert (Suno: 109,64, passt nicht zu „klein“ bei 120,09)
};
export const T = {
c1: C.c1[0],
v1: 18.41,
v1z: [18.41, 20.84, 23.04, 25.34],
c2: C.c2[0],
v2: 36.78,
v2z: [36.78, 39.22, 41.5, 43.79],
bumm: 38.59,
v3: 45.97,
v3z: [45.97, 48.26, 50.71, 52.9],
c3: C.c3[0],
v4: 65.0,
v4z: [65.0, 67.32, 69.68, 71.95],
juchhe: 73.38,
m: 74.22,
gag: 93.6, // ~ Instrumental-Groove nach „Langsam!“ (Platz für den gesprochenen Gag)
c4: C.c4[0],
zw: 110.5, // ~ Zwischenspiel nach Refrain 4
c5: C.c5[0],
ende: 128.6, // ~ Outro (Glockenspiel)
cz: (start: number) => Object.values(C).find((z) => z[0] === start)!,
};
export const DAUER = Math.round(139.68 * 30);
// Mitmach-Teil: Frage beginnt, Antwort des Chors
export const KARTEN = [
{frage: 74.22, antwort: 78.95, wort: 'groß', gegenteil: 'klein'},
{frage: 79.05, antwort: 83.59, wort: 'oben', gegenteil: 'unten'},
{frage: 83.74, antwort: 88.22, wort: 'laut', gegenteil: 'leise'},
{frage: 88.38, antwort: 92.9, wort: 'schnell', gegenteil: 'langsam'}, // ~ Antwortzeit
];
const refrain = (z: [number, number, number, number], d = [0, 0, 0, 0]): LiedZeile[] => [
`Einer@${z[0]} klein@${(z[0] + 0.3 + d[0]).toFixed(2)} und@${(z[0] + 0.7 + d[0]).toFixed(2)} einer@${(z[0] + 0.92 + d[0]).toFixed(2)} groß,@${(z[0] + 1.35 + d[0]).toFixed(2)}`,
`und@${z[1]} dazwischen_–@${(z[1] + 0.2).toFixed(2)} na,@${(z[1] + 1.14).toFixed(2)} wer@${(z[1] + 1.33).toFixed(2)} bloß?@${(z[1] + 1.48).toFixed(2)}`,
`Noa@${z[2]} steht@${(z[2] + 0.39).toFixed(2)} in@${(z[2] + 0.75).toFixed(2)} der@${(z[2] + 0.87).toFixed(2)} Mitte@${(z[2] + 1.04).toFixed(2)} drin,@${(z[2] + 1.43).toFixed(2)}`,
`zusammen@${z[3]} kriegen@${(z[3] + 0.48).toFixed(2)} wir@${(z[3] + 0.95).toFixed(2)} alles@${(z[3] + 1.21).toFixed(2)} hin!@${(z[3] + 1.62).toFixed(2)}`,
];
export const ZEILEN: LiedZeile[] = [
// Refrain 1 (gemessene Wortzeiten)
'Einer@9.43 klein@9.69 und@10.12 einer@10.32 groß,@10.76',
'und@11.53 dazwischen_–@11.73 na,@12.66 wer@12.86 bloß?@13.01',
'Noa@13.84 steht@14.24 in@14.62 der@14.74 Mitte@14.89 drin,@15.3',
'zusammen@16.03 kriegen@16.49 wir@16.99 alles@17.24 hin!@17.65',
// Strophe 1: oben / unten
'Oben@18.41 hängt@18.88 ein@19.27 Apfel@19.55 rund,@19.96',
'Lulu@20.84 holt@21.25 ihn@21.61 mit@21.84 dem@22.07 Mund.@22.31',
'Unten@23.04 blüht@23.48 die@23.94 Blume@24.22 blau,@24.6',
'Pino@25.34 pflückt@25.74 sie,@26.2 ganz@26.52 genau!@26.78',
// Refrain 2 (Wortabstände wie Refrain 1, Zeilenanfänge gemessen)
'Einer@27.59 klein@28.17 und@28.57 einer@28.81 groß,@29.26',
'und@30.01 dazwischen_–@30.21 na,@31.15 wer@31.35 bloß?@31.51',
...refrain(C.c2).slice(2),
// Strophe 2: laut / leise
'Laut@36.78 klingt@37.07 Noas@37.45 Trommel:@37.83 bumm!@38.59',
'Alle@39.22 klatschen@39.64 laut@40.24 herum.@40.57',
'Pino@41.5 raschelt@41.96 leis@42.5 im@42.96 Gras,@43.18',
'Lulu@43.79 lauscht_–@44.14 das@44.74 macht@44.88 ihr@45.2 Spaß.@45.41',
// Strophe 3: schnell / langsam
'Schnell@45.97 läuft@46.34 Pino@46.69 hin@47.17 und@47.44 her,@47.7',
'Stampf@48.26 mit@48.71 mir,@48.93 es@49.38 ist@49.54 nicht@49.73 schwer.@50.08',
'Langsam@50.71 geht@51.26 auch@51.53 Lulu@51.87 mit,@52.26',
'Stampf@52.9 ganz@53.28 langsam,@53.55 Schritt@53.97 für@54.37 Schritt.@54.59',
// Refrain 3
'Einer@55.26 klein@55.77 und@56.22 einer@56.48 groß,@56.88',
'und@57.64 dazwischen_–@57.89 na,@58.83 wer@59 bloß?@59.11',
'Noa@60.01 steht@60.34 in@60.73 der@60.84 Mitte@60.98 drin,@61.33',
'zusammen@62.14 kriegen@62.63 wir@63.1 alles@63.35 hin!@63.81',
// Strophe 4: lang / kurz
'Lang,@65 ganz@65.4 lang@65.65 ist@65.98 Lulus@66.28 Schal,@66.54',
'Reck@67.32 dich@67.65 hoch,@67.89 ganz@68.26 lang,@68.45 einmal!@68.79',
'Kurz,@69.68 ganz@70.01 kurz@70.27 ist@70.61 Pinos@70.79 Zeh,@71.2',
'Duck@71.95 dich@72.25 klein,@72.5 ja,@72.97 ja,@73.22 juchhe!@73.38',
// Mitmach-Teil (Antwort steht auf der Karte oben)
'Lulu@74.22 ist@75.15 groß,@75.45 und@76.29 Pino@76.61 ist_…?@77.1',
'Apfel@79.05 ist@79.73 oben,@80.11 Blume@81.32 ist_…?@81.8',
'Ich@83.74 klatsche@83.81 laut,@84.6 und@85.53 jetzt@85.78 bin@86.21 ich_…?@86.5',
'Pino@88.38 ist@88.85 schnell,@89.11 und@90.06 Lulu@90.59 ist_…?@91.0',
// Refrain 4
'Einer@101.5 klein@101.8 und@102.18 einer@102.43 groß,@102.87',
'und@103.62 dazwischen_–@103.82 na,@104.77 wer@104.96 bloß?@105.11',
'Noa@105.94 steht@106.32 in@106.66 der@106.78 Mitte@106.95 drin,@107.39',
'zusammen@108.06 kriegen@108.56 wir@109.02 alles@109.28 hin!@109.63',
// Schluss-Refrain (leiser)
'Einer@119.6 klein@120.09 und@120.5 einer@120.74 groß,@121.2',
'und@121.94 dazwischen_–@122.17 na,@123.09 wer@123.28 bloß?@123.42',
'Noa@124.25 steht@124.64 in@124.98 der@125.09 Mitte@125.27 drin,@125.66',
'zusammen@126.39 kriegen@126.9 wir@127.35 alles@127.61 hin!@128.03',
];

View file

@ -0,0 +1,103 @@
import React from 'react';
import {AbsoluteFill, Composition, Easing, Sequence, interpolate, useCurrentFrame} from 'remotion';
import type {SzenenEintrag} from '../baukasten/folge';
// Shorts im Hochformat (1080×1920) direkt aus den Szenen einer Folge.
// Die Szene läuft unverändert im 1920×1080-Rahmen, eine Kamera schneidet
// daraus den Hochformat-Ausschnitt und folgt den Figuren.
//
// Alle Zeitpunkte hängen an Sprechzeilen (id aus texte/*.json bzw. „bildN“),
// nicht an Sekunden – so passt dieselbe Definition für DE, ES und FR, auch
// wenn die Aufnahmen verschieden lang sind.
//
// Kamera: x/y = Bildpunkt der Szene (1920×1080), der in die Mitte kommt.
// z = Vergrößerung. Ab z ≈ 1,78 füllt die Szene das Hochformat ganz; darunter
// bleiben oben und unten Papierränder (für Totalen mit allen drei Figuren).
export const VOLL = 1920 / 1080; // kleinste Vergrößerung ohne Ränder
type Zeitpunkt = {zeile: string; wo?: 'start' | 'ende' | 'frei'; plus?: number};
export type KameraPunkt = Zeitpunkt & {x: number; y?: number; z?: number};
export type ShortDef = {
id: string; // z. B. F01-S01
szene: number; // 1-basiert wie im Szenen-Array der Folge
von: Zeitpunkt;
bis: Zeitpunkt;
kamera: KameraPunkt[];
titel: Record<'de' | 'es' | 'fr', string>;
notiz?: string;
};
const W = 1080;
const H = 1920;
const SW = 1920;
const SH = 1080;
const bild = (sz: SzenenEintrag, p: Zeitpunkt) => {
const l = sz.plan.liste.find((x) => x.id === p.zeile);
if (!l) throw new Error(`Zeile ${p.zeile} fehlt in Szene „${sz.name}“`);
return l[p.wo ?? 'start'] + Math.round((p.plus ?? 0) * 30);
};
export const shortZeiten = (szenen: SzenenEintrag[], d: ShortDef) => {
const sz = szenen[d.szene - 1];
const von = Math.max(0, bild(sz, d.von));
const bis = Math.min(sz.plan.dauer, bild(sz, d.bis));
return {sz, von, bis, dauer: bis - von};
};
const begrenze = (x: number, y: number, z: number) => {
const halbB = W / 2 / z;
const halbH = H / 2 / z;
const bx = halbB * 2 >= SW ? SW / 2 : Math.min(Math.max(x, halbB), SW - halbB);
const by = halbH * 2 >= SH ? SH / 2 : Math.min(Math.max(y, halbH), SH - halbH);
return {x: bx, y: by};
};
const Inhalt: React.FC<{szenen: SzenenEintrag[]; d: ShortDef}> = ({szenen, d}) => {
const f = useCurrentFrame();
const {sz, von, dauer} = shortZeiten(szenen, d);
const K = sz.K;
const punkte = d.kamera.map((k) => ({t: bild(sz, k) - von, x: k.x, y: k.y ?? SH / 2, z: k.z ?? VOLL})).sort((a, b) => a.t - b.t);
const zeiten = punkte.map((p) => p.t);
const opt = {extrapolateLeft: 'clamp', extrapolateRight: 'clamp', easing: Easing.inOut(Easing.cubic)} as const;
const wert = (sel: (p: (typeof punkte)[number]) => number) =>
punkte.length === 1 ? sel(punkte[0]) : interpolate(f, zeiten, punkte.map(sel), opt);
const z = wert((p) => p.z);
const {x, y} = begrenze(wert((p) => p.x), wert((p) => p.y), z);
const ein = interpolate(f, [0, 8], [0, 1], {extrapolateRight: 'clamp'});
const aus = interpolate(f, [dauer - 18, dauer], [1, 0], {extrapolateLeft: 'clamp'});
return (
<AbsoluteFill style={{background: '#f4ead8', overflow: 'hidden'}}>
<div
style={{
position: 'absolute',
width: SW,
height: SH,
left: 0,
top: 0,
transformOrigin: '0 0',
transform: `translate(${W / 2 - x * z}px, ${H / 2 - y * z}px) scale(${z})`,
overflow: 'hidden',
}}
>
<Sequence from={-von} layout="none">
<AbsoluteFill style={{background: '#f4ead8'}}>
<K />
</AbsoluteFill>
</Sequence>
</div>
<AbsoluteFill style={{background: '#f4ead8', opacity: 1 - Math.min(ein, aus)}} />
</AbsoluteFill>
);
};
export const ShortKompositionen: React.FC<{szenen: SzenenEintrag[]; shorts: ShortDef[]}> = ({szenen, shorts}) => (
<>
{shorts.map((d) => {
const K: React.FC = () => <Inhalt szenen={szenen} d={d} />;
return <Composition key={d.id} id={d.id} component={K} durationInFrames={shortZeiten(szenen, d).dauer} fps={30} width={W} height={H} />;
})}
</>
);

View file

@ -0,0 +1,102 @@
import {VOLL, type ShortDef} from './Short';
// Shorts aus Folge 1 „Zu klein, zu groß“ (Startpaket für den Kanalstart 08.11.).
// Szenen: 1 Intro · 2 Wer raschelt da · 3 Apfel zu hoch · 4 Baum mit Flecken ·
// 5 Blume zu tief · 6 Zusammen gehts · 7 Lied · 8 Pino ist müde · 9 Outro
// Shorts-Regeln: 20–45 s, kleiner Bogen, warmes Ende, keine Mitmach-Pause,
// keine Aufforderung zum Abonnieren.
export const SHORTS_F01: ShortDef[] = [
{
id: 'F01-S01-riesig',
szene: 2,
von: {zeile: 'bild3', plus: -0.2},
bis: {zeile: 'p2', wo: 'frei', plus: 0.6},
kamera: [
{zeile: 'bild3', x: 930, z: 1.85},
{zeile: 'n3', plus: -0.3, x: 930, z: 1.85},
{zeile: 'n3', plus: 0.6, x: 1080, z: 1.85},
{zeile: 'bild4', wo: 'ende', x: 1080, z: 1.85},
{zeile: 'p1', plus: 0.4, x: 940, z: 1.9},
{zeile: 'p2', wo: 'frei', x: 940, z: 2.0},
],
titel: {
de: 'Für mich bist du riesig! 🦔',
es: '¡Para mí eres gigante! 🦔',
fr: 'Pour moi, tu es géante ! 🦔',
},
notiz: 'Noa und Pino lernen sich kennen, Pointe „Ich bin erst fünf“ / „Für mich bist du riesig“.',
},
{
id: 'F01-S02-baum-mit-flecken',
szene: 4,
von: {zeile: 'bild0'},
bis: {zeile: 'l2', wo: 'frei', plus: 0.5},
kamera: [
{zeile: 'bild0', x: 620},
{zeile: 'p1', wo: 'ende', x: 620},
{zeile: 'bild1', plus: 0.6, x: 1380},
{zeile: 'l1', wo: 'ende', x: 1380},
{zeile: 'e1', x: 880},
{zeile: 'e2', wo: 'ende', x: 880},
{zeile: 'p2', x: 640},
{zeile: 'p2', wo: 'ende', x: 640},
{zeile: 'l2', x: 1440},
],
titel: {
de: 'Ein Baum mit Flecken? 🦒',
es: '¿Un árbol con manchas? 🦒',
fr: 'Un arbre avec des taches ? 🦒',
},
notiz: 'Rätsel und Auflösung im selben Short: Der „Baum“ ist Lulu.',
},
{
id: 'F01-S03-zusammen',
szene: 6,
von: {zeile: 'bild0', plus: -0.5},
bis: {zeile: 'e4', wo: 'frei', plus: 1.0},
kamera: [
{zeile: 'bild0', x: 480},
{zeile: 'bild0', plus: 1.5, x: 560},
{zeile: 'bild0', wo: 'ende', x: 1450},
{zeile: 'bild1', x: 800},
{zeile: 'bild1', wo: 'ende', x: 800},
{zeile: 'l1', x: 1050},
{zeile: 'l1', wo: 'ende', x: 1050},
{zeile: 'e1', x: 1550},
{zeile: 'e1', wo: 'ende', x: 1550},
{zeile: 'e2', x: 700},
{zeile: 'e2', wo: 'ende', x: 700},
{zeile: 'e3', x: 560},
{zeile: 'e3', wo: 'ende', x: 560, z: VOLL},
{zeile: 'e4', plus: 0.8, x: 960, z: 1.0},
],
titel: {
de: 'Zusammen kommen sie überall hin 💛',
es: 'Juntos llegan a todas partes 💛',
fr: 'Ensemble, ils arrivent partout 💛',
},
notiz: 'Kernbotschaft der Folge, endet mit allen drei Figuren im Bild.',
},
{
id: 'F01-S04-lied',
szene: 7,
von: {zeile: 'r1', plus: -1.0},
bis: {zeile: 'w4', wo: 'frei', plus: 1.2},
kamera: [
{zeile: 'r1', x: 960, z: 1.35},
{zeile: 'r4', wo: 'ende', x: 960, z: 1.35},
{zeile: 's1', x: 1250},
{zeile: 's2', wo: 'ende', x: 1250},
{zeile: 's3', x: 720},
{zeile: 's4', wo: 'ende', x: 720},
{zeile: 'w1', x: 960, z: 1.35},
],
titel: {
de: 'Einer klein und einer groß 🎵',
es: 'Uno pequeño y uno grande 🎵',
fr: 'Un petit et un grand 🎵',
},
notiz: 'Das Serienlied komplett (Refrain, Strophe, Refrain).',
},
];

View file

@ -0,0 +1,61 @@
// Erzeugt die Hintergrundmusik einer Folge mit ElevenLabs Music (instrumental,
// sprachunabhängig). Die Stücke stehen in src/folgeNN/musik.json
// ({name: {sekunden, beschreibung}}), die Dateien landen in
// public/musik/folgeNN/<name>.mp3 (nicht im Git). Nur fehlende oder geänderte
// Stücke werden neu erzeugt; welche Szene welches Stück spielt, steht in FolgeNN.tsx.
//
// npx tsx werkzeuge/musik.mts F01
// … F01 --stueck lied nur ein Stück
// … F01 --neu alle neu erzeugen
// … F01 --probe nur anzeigen (kostet nichts)
import fs from 'node:fs';
import path from 'node:path';
import {fileURLToPath} from 'node:url';
import {Readable} from 'node:stream';
import {ElevenLabsClient} from '@elevenlabs/elevenlabs-js';
const WURZEL = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
process.chdir(WURZEL);
const envDatei = path.join(WURZEL, '..', '.env.local');
if (!process.env.ELEVENLABS_API_KEY && fs.existsSync(envDatei)) process.loadEnvFile(envDatei);
const args = process.argv.slice(2);
const kuerzel = args.find((a) => !a.startsWith('--'));
const wert = (n: string) => (args.includes(n) ? args[args.indexOf(n) + 1] : undefined);
const nurStueck = wert('--stueck');
const neu = args.includes('--neu');
const probe = args.includes('--probe');
if (!kuerzel) throw new Error('Folge angeben, z. B. F01');
const nummer = kuerzel.replace(/\D/g, '');
const stuecke = JSON.parse(fs.readFileSync(`src/folge${nummer}/musik.json`, 'utf8')) as Record<string, {sekunden: number; beschreibung: string}>;
const ordner = `public/musik/folge${nummer}`;
fs.mkdirSync(ordner, {recursive: true});
// Merkt sich, mit welcher Beschreibung ein Stück erzeugt wurde
const merkDatei = path.join(ordner, 'erzeugt.json');
const erzeugt: Record<string, string> = fs.existsSync(merkDatei) ? JSON.parse(fs.readFileSync(merkDatei, 'utf8')) : {};
const client = probe ? null : new ElevenLabsClient();
for (const [name, s] of Object.entries(stuecke)) {
if (nurStueck && name !== nurStueck) continue;
const pfad = path.join(ordner, `${name}.mp3`);
const kennung = `${s.sekunden}|${s.beschreibung}`;
if (!neu && erzeugt[name] === kennung && fs.existsSync(pfad)) continue;
if (probe) {
console.log(`~ ${name} (${s.sekunden} s): ${s.beschreibung}`);
continue;
}
const audio = await client!.music.compose({
prompt: s.beschreibung,
musicLengthMs: Math.round(s.sekunden * 1000),
forceInstrumental: true,
outputFormat: 'mp3_44100_128' as never,
});
const teile: Buffer[] = [];
for await (const t of Readable.fromWeb(audio as never)) teile.push(Buffer.from(t));
fs.writeFileSync(pfad, Buffer.concat(teile));
erzeugt[name] = kennung;
fs.writeFileSync(merkDatei, JSON.stringify(erzeugt, null, '\t') + '\n');
console.log(`✓ ${name} → ${pfad}`);
}

View file

@ -7,9 +7,9 @@
},
"stimmen": {
"ERZ": "8TMmdpPgqHKvDOGYP2lN",
"PINO": "",
"NOA": "",
"LULU": "",
"PINO": "S7IsvAvEoDfui6GSZK3A",
"NOA": "VD1if7jDVYtAKs4P0FIY",
"LULU": "I9BlCOvyDbKlCBCrrLeU",
"ALLE": "ERZ",
"NOA_LULU": "NOA"
}

View file

@ -0,0 +1,14 @@
// Gibt je Szene einer Folge die Zeitpunkte aller Zeilen aus (zum Planen von Shorts).
// npx tsx werkzeuge/zeilenzeiten.mts F01
import path from 'node:path';
import {pathToFileURL} from 'node:url';
const kuerzel = process.argv[2];
const nummer = kuerzel.replace(/\D/g, '');
const m = await import(pathToFileURL(path.resolve(`./src/folge${nummer}/Folge${nummer}.tsx`)).href);
const szenen = m.SZENEN as {name: string; plan: {dauer: number; liste: {id: string; wer?: string; text?: string; start: number; ende: number; frei: number}[]}}[];
const s = (f: number) => (f / 30).toFixed(1).padStart(6);
szenen.forEach((sz, i) => {
console.log(`\n== Szene ${i + 1} „${sz.name}“ Dauer ${s(sz.plan.dauer)} s`);
for (const l of sz.plan.liste) console.log(`${s(l.start)} –${s(l.ende)} (frei ${s(l.frei)}) ${l.id.padEnd(5)} ${(l.wer ?? '-').padEnd(5)} ${l.text ?? ''}`);
});

View file

@ -0,0 +1,10 @@
# Suno-Lizenz: „Noa in der Mitte“ (Lied 3, Free-Plan erzeugt)
Song-ID 25385c27-bb5d-40d6-b3b6-cea78bfdaa0b, erzeugt 03.11.2026 im Free-Plan (v6-mini Cover).
Antwort Suno Support (03.11.2026, sinngemäß): Ein Lied erhält kommerzielle Rechte, wenn es
1. mit einem bezahlten Plan erzeugt wurde, ODER
2. heruntergeladen wird, während ein bezahltes Abo aktiv ist, ODER
3. per gekauftem Einzel-Download geladen wird.
→ Das Lied mit aktivem Pro-Abo herunterladen; dann gilt kommerzielle Nutzung (YouTube-Monetarisierung, Streaming).
Der Download zählt zu den monatlichen Pro-Downloads. Der eigene Liedtext gehört ohnehin uns.
Die frühere Datei `Downloads\Noa in der Mitte.mp3` (15:44, Free) NICHT verwenden – nur die Pro-Download-Datei.

View file

@ -26,6 +26,7 @@ Rollenbeschreibung in …md“ starten.
| Dolmetscher ES / FR | `dolmetscher-es.md`, `dolmetscher-fr.md` | Übersetzen/Prüfen nach festen Sprachregeln | lesen |
| Testpublikum (neu 27.10.) | `testpublikum.md` | Außenstehende Zuschauer: 4 Familien (Becker/Hannover Emil 4, Murat+Lina 3 Köln, García/Sevilla Mateo 5, Martin/Lyon Oma + Léa 3 + Hugo 6). Bauchreaktion: klicken, dranbleiben, nochmal, abonnieren? Kein Fachurteil | lesen |
| Dolmetscher IT | `dolmetscher-it.md` | Italienisch, **noch nicht beschlossen** (Vorschlag: frühestens Januar) | lesen |
| Komponist (neu 03.11.) | `komponist.md` | Lernlieder + Lieder in Folgen: Text DE mit Silbenraster, Melodie-Skizze, Bewegungen, Suno-Paket, Bildplan; Reihe „Pinos Liederbuch“ (`drehbuecher/lieder/`) | schreibt nur nach `drehbuecher/lieder/` |
Alle außer Kinderpsychologie laufen mit `model: sonnet` (günstiger). Keiner ändert selbst etwas;
Claude übernimmt Vorschläge nach Zustimmung des Nutzers.