diff --git a/remotion/public/orte/garten_herbst.webp b/remotion/public/orte/garten_herbst.webp
index 4931a68..5995892 100644
Binary files a/remotion/public/orte/garten_herbst.webp and b/remotion/public/orte/garten_herbst.webp differ
diff --git a/remotion/public/orte/garten_herbst_abend.webp b/remotion/public/orte/garten_herbst_abend.webp
index 2a000f6..fbe5616 100644
Binary files a/remotion/public/orte/garten_herbst_abend.webp and b/remotion/public/orte/garten_herbst_abend.webp differ
diff --git a/remotion/src/baukasten/orte.tsx b/remotion/src/baukasten/orte.tsx
index 39a85f1..663e15b 100644
--- a/remotion/src/baukasten/orte.tsx
+++ b/remotion/src/baukasten/orte.tsx
@@ -221,6 +221,50 @@ export const GartenSVG: React.FC<{nacht?: boolean}> = ({nacht = false}) => (
);
+// Folge 1: alter Apfelbaum wie in den Higgsfield-Bildern – knorriger Stamm mit
+// Wurzelansatz und Rinde, weit ausladende kahle Äste, nur noch wenige Blätter.
+// Ein Zweig führt zum Apfel (Apfel selbst ist ein eigenes Teil, siehe APFEL in folge01/szene2).
+const AlterBaum: React.FC<{x: number; y: number; s?: number; abend?: boolean; apfel?: [number, number]}> = ({x, y, s = 1, abend, apfel}) => {
+ const stamm = abend ? '#5e4a3c' : '#7a6452';
+ const ast = abend ? '#56443a' : '#6b5646';
+ const rinde = abend ? '#3e3028' : '#4f3e32';
+ return (
+
+
+
+
+
+
+
+
+ {apfel && (
+
+
+
+
+ )}
+ {/* Stamm mit Wurzelansatz, gabelt sich in zwei dicke Äste */}
+
+ {/* Rinde */}
+ {[-24, -8, 8, 22].map((dx, i) => (
+
+ ))}
+
+
+ {/* die letzten Blätter */}
+ {new Array(14).fill(0).map((_, i) => {
+ const bx = -300 + random('ab' + i) * 600;
+ const by = -720 + random('aby' + i) * 330;
+ return ;
+ })}
+
+ );
+};
+
// Folge 1: Noas Garten im goldenen Herbst (Morgen) bzw. im Abendlicht.
// Ohne Holzstapel (der kommt erst in Folge 2); Apfel, Blume und Laubhaufen sind eigene Teile.
export const GartenHerbstSVG: React.FC<{abend?: boolean}> = ({abend = false}) => (
@@ -271,7 +315,7 @@ export const GartenHerbstSVG: React.FC<{abend?: boolean}> = ({abend = false}) =>
);
})}
-
+
);
diff --git a/remotion/src/folge01/szene2.tsx b/remotion/src/folge01/szene2.tsx
index d9c1280..85987c5 100644
--- a/remotion/src/folge01/szene2.tsx
+++ b/remotion/src/folge01/szene2.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import {useCurrentFrame} from 'remotion';
import {kurve} from '../bewegung';
-import {ClipFigur, Figur, Geher, Kamera, NOA_HOCKE_FRAMES, NoaHocke} from '../baukasten/figur';
+import {ClipFigur, Figur, Geher, Kamera} from '../baukasten/figur';
import {Blende, Vignette, atmen, hopfStauch, huepfer, kamFahrt, ruck} from '../baukasten/helfer';
import {Apfel, Blaetterregen, Blaetterwind, Blume, Laubhaufen} from '../baukasten/natur';
import {BODEN, Ort} from '../baukasten/orte';
@@ -44,7 +44,7 @@ export const Szene2: React.FC = () => {
const {z, dauer} = S2;
// Noa kommt von links, springt bei „Hui!“ mitten in den Haufen und hüpft wieder heraus
- const noaAn = z.e3.ende - 10;
+ const noaAn = z.bild0.start + 10 + 165; // zügig, ca. 5,5 s
const sprung = z.n1.start + 4;
const SPRUNG_DAUER = 22;
const landung = sprung + SPRUNG_DAUER;
@@ -71,18 +71,20 @@ export const Szene2: React.FC = () => {
[schreck, 'noa_B2_erschrocken'],
[z.n2.start + 6, 'noa_A4_staunen'],
[z.e6.start, 'noa_A6_blick-rechts'],
+ [hocke, 'noa_B_hocken'],
[aufstehen, 'noa_A3_lachen'],
[z.p2.start + 10, 'noa_A6_blick-rechts'],
];
- // Hocke: Clip „hinsetzen“ bis zur Hocke, zum Aufstehen rückwärts
- const inHocke = f >= hocke && f < aufstehen + NOA_HOCKE_FRAMES;
- const hockeStart = f < aufstehen ? hocke : aufstehen;
+ // Hocke: Standbilder weich überblenden, dabei kurz absinken bzw. sich strecken
+ const HOCKE_BLENDE = 14;
+ const wechsel = (t: number) => (f >= t && f < t + HOCKE_BLENDE ? Math.sin(((f - t) / HOCKE_BLENDE) * Math.PI) : 0);
+ const hockeStauch = 1 - 0.05 * wechsel(hocke) + 0.03 * wechsel(aufstehen);
const noaY =
BODEN +
sprungY +
huepfer(f, raus, 60, 16) +
ruck(f, schreck, 3) +
- huepfer(f, aufstehen + NOA_HOCKE_FRAMES + 4, 14, 10);
+ huepfer(f, aufstehen + HOCKE_BLENDE + 4, 14, 10);
// Laubhaufen: wird bei der Landung gestaucht, später raschelt er
const flach = kurve(f, [
@@ -151,11 +153,9 @@ export const Szene2: React.FC = () => {
{imHaufen && }
{imHaufen ? null : noaGeht ? (
-
- ) : inHocke ? (
- = aufstehen} x={noaX} y={BODEN} />
+
) : (
-
+ = hocke ? HOCKE_BLENDE : 5} />
)}