Talking-head pipeline: 8 new tools, Remotion TalkingHead composition, and skill rewrites

New tools: face_tracker, visual_qa, eye_enhance, auto_reframe, remotion_caption_burn, showcase_card, silence_cutter. Updated audio_mixer with segmented_music operation and subtitle_gen with ASR corrections. Registered TalkingHead composition in Root.tsx. Rewrote compose/edit/scene director skills for full enhancement chain, Remotion captions, multi-clip assembly, and visual QA. Gitignore cleanup: exclude test demo-props, downloaded music, and generated images.
This commit is contained in:
calesthio
2026-04-01 10:00:15 -07:00
parent 237af7fb5c
commit 358b8647f5
17 changed files with 3467 additions and 37 deletions

View File

@@ -5,6 +5,7 @@ import {
calculateCinematicMetadata,
} from "./CinematicRenderer";
import { signalFromTomorrowWithMusicFixture } from "./cinematic/fixtures";
import { TalkingHead, TalkingHeadProps } from "./TalkingHead";
const calculateMetadata: CalculateMetadataFunction<ExplainerProps> = async ({
props,
@@ -61,6 +62,21 @@ export const Root: React.FC = () => {
defaultProps={signalFromTomorrowWithMusicFixture}
calculateMetadata={calculateCinematicMetadata}
/>
<Composition
id="TalkingHead"
component={TalkingHead}
durationInFrames={30 * 30}
fps={30}
width={1080}
height={1920}
defaultProps={{
videoSrc: "",
captions: [],
wordsPerPage: 4,
fontSize: 52,
highlightColor: "#22D3EE",
}}
/>
</>
);
};

View File

@@ -0,0 +1,35 @@
import { AbsoluteFill, OffthreadVideo } from "remotion";
import { CaptionOverlay, WordCaption } from "./components/CaptionOverlay";
export interface TalkingHeadProps {
videoSrc: string;
captions: WordCaption[];
wordsPerPage?: number;
fontSize?: number;
highlightColor?: string;
}
export const TalkingHead: React.FC<TalkingHeadProps> = ({
videoSrc,
captions,
wordsPerPage = 4,
fontSize = 52,
highlightColor = "#22D3EE",
}) => {
return (
<AbsoluteFill style={{ backgroundColor: "#000" }}>
<OffthreadVideo
src={videoSrc}
style={{ width: "100%", height: "100%", objectFit: "cover" }}
/>
<CaptionOverlay
words={captions}
wordsPerPage={wordsPerPage}
fontSize={fontSize}
highlightColor={highlightColor}
backgroundColor="rgba(0, 0, 0, 0.65)"
color="#FFFFFF"
/>
</AbsoluteFill>
);
};