Files
ElyOffice/site/video/update-0.1.5/src/Video.tsx
T
ZacharyZhang-NYandClaude Opus 5.5 8f31e53cfc 0.1.5 update video and Chinese changelog
Real footage of the installed 0.1.5 apps, composited in Remotion with
shape morphs between sections; synthesized score and UI sounds. Logs
P3-17 (ElyTable keyboard zoom leaves the grid half-scrolled).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-15 09:24:06 -04:00

54 lines
1.9 KiB
TypeScript

import { AbsoluteFill, Audio, Sequence, getStaticFiles, staticFile } from 'remotion';
import './design/fonts';
import { Background } from './design/Background';
import { Intro } from './scenes/Intro';
import { Outro } from './scenes/Outro';
import { Menus } from './scenes/Menus';
import { Cells } from './scenes/Cells';
import { RightClick } from './scenes/RightClick';
import { More } from './scenes/More';
import { SECTION } from './theme';
// Set false to render without the score.
const MUSIC = true;
const MUSIC_FILE = 'audio/music.wav';
const hasMusic = () => getStaticFiles().some((file) => file.name.split('\\').join('/') === MUSIC_FILE);
// Whooshes at each morph, impact on the outro downbeat.
const MORPHS = [300, 840, 1440, 2340, 3090];
const at = (section: { from: number; duration: number }) => ({ from: section.from, durationInFrames: section.duration });
export const Video: React.FC = () => (
<AbsoluteFill>
<Background />
<Sequence {...at(SECTION.intro)} name="Intro">
<Intro />
</Sequence>
<Sequence {...at(SECTION.menus)} name="Menus">
<Menus />
</Sequence>
<Sequence {...at(SECTION.cells)} name="Cells">
<Cells />
</Sequence>
<Sequence {...at(SECTION.rightClick)} name="RightClick">
<RightClick />
</Sequence>
<Sequence {...at(SECTION.more)} name="More">
<More />
</Sequence>
<Sequence {...at(SECTION.outro)} name="Outro">
<Outro />
</Sequence>
{MORPHS.map((frame) => (
<Sequence key={frame} from={frame} durationInFrames={45} name="whoosh">
<Audio src={staticFile('audio/sfx/whoosh.wav')} volume={0.35} />
</Sequence>
))}
<Sequence from={3150} durationInFrames={90} name="impact">
<Audio src={staticFile('audio/sfx/impact.wav')} volume={0.4} />
</Sequence>
{MUSIC && hasMusic() ? <Audio src={staticFile(MUSIC_FILE)} /> : null}
</AbsoluteFill>
);