Folge 8: gezeichneter Arm wieder raus (wirkte unecht), Hand-Karte bleibt; Instrumental unter dem Laternenvers als Zwischenlösung bis zum Suno-Lied

Higgsfield-Posen noa_B_hand-hase/-igel und ein dreisprachiges Laternenlied (1 Suno-Download) erzeugt Lara am PC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Lara 2026-11-06 08:52:06 +00:00
parent c937844f94
commit 0365df8e63
3 changed files with 14 additions and 38 deletions

View file

@ -1,5 +1,5 @@
import React from 'react'; import React from 'react';
import {interpolate, useCurrentFrame} from 'remotion'; import {Audio, Sequence, interpolate, staticFile, useCurrentFrame} from 'remotion';
import {ClipFigur, Figur, Kamera} from '../baukasten/figur'; import {ClipFigur, Figur, Kamera} from '../baukasten/figur';
import {gang} from '../baukasten/gang'; import {gang} from '../baukasten/gang';
import {Blende, Vignette, atmen, kamFahrt} from '../baukasten/helfer'; import {Blende, Vignette, atmen, kamFahrt} from '../baukasten/helfer';
@ -93,6 +93,13 @@ export const Szene3: React.FC = () => {
<Abenddunkel licht={{x: lat.x, y: lat.y}} staerke={0.55 - 0.15 * licht} radius={380 + 260 * licht} /> <Abenddunkel licht={{x: lat.x, y: lat.y}} staerke={0.55 - 0.15 * licht} radius={380 + 260 * licht} />
</Kamera> </Kamera>
<Vignette /> <Vignette />
{/* Zwischenlösung bis zum gesungenen Laternenlied (Suno): Instrumental aus Folge 1 unter dem Vers */}
<Sequence from={z.v1.start - 20} durationInFrames={z.w4.ende - z.v1.start + 60}>
<Audio
src={staticFile('musik/folge01/lied.mp3')}
volume={(g) => 0.3 * Math.min(interpolate(g, [0, 20], [0, 1], {extrapolateRight: 'clamp'}), interpolate(g, [z.w4.ende - z.v1.start + 20, z.w4.ende - z.v1.start + 60], [1, 0], {extrapolateLeft: 'clamp', extrapolateRight: 'clamp'}))}
/>
</Sequence>
<Untertitel zeilen={S3.liste} /> <Untertitel zeilen={S3.liste} />
<Blende dauer={dauer} rein={14} raus={14} /> <Blende dauer={dauer} rein={14} raus={14} />
</> </>

View file

@ -1,13 +1,10 @@
import React from 'react'; import React from 'react';
import {interpolate, useCurrentFrame} from 'remotion'; import {interpolate, useCurrentFrame} from 'remotion';
import {Hand} from '../baukasten/hand'; import {Hand} from '../baukasten/hand';
import {Blende, kamFahrt, punkt} from '../baukasten/helfer'; import {Blende, kamFahrt} from '../baukasten/helfer';
import {SCHRIFT} from '../baukasten/untertitel'; import {SCHRIFT, Untertitel} from '../baukasten/untertitel';
import {BODEN} from '../baukasten/orte';
import {POSEN_SKALA} from '../baukasten/figur';
import {Untertitel} from '../baukasten/untertitel';
import {plane} from './plan'; import {plane} from './plan';
import {HandSchatten, NoasHand} from './teile'; import {HandSchatten} from './teile';
import {PLATZ, Wandszene} from './wand'; import {PLATZ, Wandszene} from './wand';
// Szene 7: Schattenspiel. Noa macht mit der Hand vor der Laterne einen Hasen, dann einen Igel. // Szene 7: Schattenspiel. Noa macht mit der Hand vor der Laterne einen Hasen, dann einen Igel.
@ -29,8 +26,9 @@ export const S7 = plane('s7', [
const LATERNE = {x: 1010, y: PLATZ.laterneBoden.y}; const LATERNE = {x: 1010, y: PLATZ.laterneBoden.y};
const NOA_X = PLATZ.noa + 140; const NOA_X = PLATZ.noa + 140;
// Noas rechte Schulter in der Hock-Pose (Bildpunkt 780/382 auf ihrer Leinwand), die Hand über der Laterne // Der gezeichnete Arm wirkte unecht (Rückmeldung 06.11.) – bis die Higgsfield-Posen da sind
const SCHULTER = punkt('noa', NOA_X, BODEN, 780, 382, 340 * POSEN_SKALA.noa_B_hocken); // (noa_B_hand-hase / noa_B_hand-igel), zeigt nur die Karte oben die Hand; der Schatten kommt von
// einer gedachten Hand über der Laterne.
const HAND = {x: 955, y: 770}; const HAND = {x: 955, y: 770};
const HAND_S = 0.3; const HAND_S = 0.3;
const K = 3; // Hand nah am Licht → großer Schatten const K = 3; // Hand nah am Licht → großer Schatten
@ -95,12 +93,6 @@ export const Szene7: React.FC = () => {
<HandSchatten art="igel" hand={hand} licht={LATERNE} s={HAND_S} k={K} deckkraft={0.42 * igel} wackeln={wackelnIgel} /> <HandSchatten art="igel" hand={hand} licht={LATERNE} s={HAND_S} k={K} deckkraft={0.42 * igel} wackeln={wackelnIgel} />
</> </>
} }
vorne={
<>
{hase > 0 && <NoasHand art="hase" schulter={SCHULTER} hand={hand} s={HAND_S} wackeln={wackelnHase} deckkraft={hase} />}
{igel > 0 && <NoasHand art="igel" schulter={SCHULTER} hand={hand} s={HAND_S} wackeln={wackelnIgel} deckkraft={igel} />}
</>
}
/> />
<HandKarte art="hase" von={z.e1.start} bis={z.e1.frei} /> <HandKarte art="hase" von={z.e1.start} bis={z.e1.frei} />
<HandKarte art="igel" von={z.e3.start} bis={z.e3.frei} /> <HandKarte art="igel" von={z.e3.start} bis={z.e3.frei} />

View file

@ -219,29 +219,6 @@ export const HandSchatten: React.FC<{art: 'hase' | 'igel'; hand: {x: number; y:
); );
}; };
// Noas Arm (Jackenärmel) von der Schulter bis zur Hand, die Hand formt Hase oder Igel
export const NoasHand: React.FC<{art: 'hase' | 'igel'; schulter: {x: number; y: number}; hand: {x: number; y: number}; s: number; wackeln?: number; deckkraft?: number}> = ({
art,
schulter,
hand,
s,
wackeln = 0,
deckkraft = 1,
}) => {
const handgelenk = {x: hand.x - 6 * s * 10, y: hand.y + 150 * s};
return (
<div style={{position: 'absolute', left: 0, top: 0, opacity: deckkraft}}>
<svg viewBox="0 0 1920 1080" style={{position: 'absolute', left: 0, top: 0, width: 1920, height: 1080, overflow: 'visible'}}>
<path d={`M ${schulter.x} ${schulter.y} Q ${(schulter.x + handgelenk.x) / 2} ${Math.max(schulter.y, handgelenk.y) + 40} ${handgelenk.x} ${handgelenk.y}`} stroke="#c98d2e" strokeWidth={34} strokeLinecap="round" fill="none" />
<path d={`M ${schulter.x} ${schulter.y} Q ${(schulter.x + handgelenk.x) / 2} ${Math.max(schulter.y, handgelenk.y) + 40} ${handgelenk.x} ${handgelenk.y}`} stroke="#dba443" strokeWidth={26} strokeLinecap="round" fill="none" />
</svg>
<svg width={HANDBOX} height={HANDBOX} viewBox="-200 -200 400 400" style={{position: 'absolute', left: hand.x - 200, top: hand.y - 200, transform: `scale(${s})`, overflow: 'visible'}}>
<HandForm art={art} wackeln={wackeln} farbe="#f3cfaa" rand="#b9825a" />
</svg>
</div>
);
};
// Wo die Laterne in der Pose noa_A_laterne hängt, und wie groß unsere Laterne sein muss, um die orange // Wo die Laterne in der Pose noa_A_laterne hängt, und wie groß unsere Laterne sein muss, um die orange
// Laterne des Bildes ganz abzudecken (gemessen: 131 × 134 Bildpunkte, Mitte bei 73/423 im Bild, Bild bei 339/156) // Laterne des Bildes ganz abzudecken (gemessen: 131 × 134 Bildpunkte, Mitte bei 73/423 im Bild, Bild bei 339/156)
export const laterneInNoasHand = (noaX: number, noaY = BODEN) => ({ export const laterneInNoasHand = (noaX: number, noaY = BODEN) => ({