// @ts-nocheck // ============================================================================ // MOTION GRAPHICS · OBSIDIAN ORBIT — Scene 10 / COPY DRAFT PROMPT (10s, 300f) // // "Keynote object-worship". ONE hero artifact: a glass slab whose face is the // "Copy Draft Prompt" panel. A solid monolithic script block sits on the face // under a primary CTA button. On the CLICK beat the button depresses, a prompt // token flies off + a clipboard pulse rings out ("Copied"), and the solid // script block FRACTURES — splitting along seams into a clean row of FOUR // numbered scene cards. The breakdown made literal: one block of intent → // discrete, ordered scenes. The WORLD orbits (never the camera) in slow // hold→ease arcs; billboarded spec Callouts fire on leader lines ("STEP 1", // "COPY DRAFT PROMPT", "4 SCENES"); the angle-tracked sheen rakes the turn; the // slab settles front-on for the payoff with an impact + shockwave as the cards // lock into their row. // // Built ENTIRELY on the Plinth module (mirrors ObsidianOrbit.tsx's contract) + // the shared Chronixel engine. CSS-3D only, deterministic, no WebGL. // ============================================================================ import React from "react"; import { AbsoluteFill, useCurrentFrame, useVideoConfig } from "remotion"; import { Plinth, OrbitWorld, Extrude, Callout, DustMotes, } from "../../plinth/plinth"; import { C, withAlpha, ACCENT_GRAD } from "../../chronixel/theme"; import { FONT, MONO } from "../../chronixel/fonts"; import { beat, clamp01, mix, osc, enter, springAt, EASE, SPRING, } from "../../chronixel/motion"; import { Shockwave, GlowPulse, LightSweep } from "../../chronixel/fx"; /* ---------------------------------------------------------------------------- A small mono eyebrow tag pinned top-left over the void — frames the beat. -------------------------------------------------------------------------- */ const Eyebrow: React.FC<{ at: number; children: React.ReactNode }> = ({ at, children, }) => { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); return (
{children}
); }; /* ============================================================================ COPY DRAFT PROMPT. Hero = the "Copy Draft Prompt" slab. A solid script block under a primary CTA. On the CLICK the button depresses, a prompt token copies (clipboard pulse), and the block fractures into a row of 4 numbered scene cards — the breakdown made literal. World orbits, callouts fire, slab settles. ========================================================================== */ export const MgOrbitScene10CopyPrompt: React.FC = () => { const frame = useCurrentFrame(); const { fps } = useVideoConfig(); const t = frame / fps; const CLICK = 4.6; // the click beat (seconds) — button press + copy const LOCK = 7.8; // the apex lock-in beat — cards settle into their row // --- face choreography ------------------------------------------------- const blockIn = beat(frame, fps, 0.8, 2.0, EASE.out); // solid script block lands const btnIn = beat(frame, fps, 1.8, 2.8, EASE.backOut); // CTA button arrives const btnHint = 0.5 + 0.5 * osc(t, 1.4); // gentle pre-click pulse const press = beat(frame, fps, CLICK, CLICK + 0.18, EASE.out); // button depress const release = beat(frame, fps, CLICK + 0.18, CLICK + 0.4, EASE.out); const btnPress = press - release; // 0→1→0 quick depress // clipboard "copied" pulse ring + token fly const copyP = beat(frame, fps, CLICK, CLICK + 0.6, EASE.out); const copyLife = clamp01(1 - (t - CLICK) / 1.2) * (t >= CLICK ? 1 : 0); const tokenP = beat(frame, fps, CLICK + 0.02, CLICK + 0.55, EASE.expoOut); // the FRACTURE: the solid block splits into the 4-card row after the click. const fractureP = beat(frame, fps, CLICK + 0.18, CLICK + 1.6, EASE.expoOut); // --- the lock-in: a weighty spring settle on the apex ------------------- const stamp = springAt(frame, fps, LOCK, SPRING.HEAVY); // 0→1 weighty settle const stampScale = mix(1.1, 1, clamp01(stamp)); // slams down to rest const flash = clamp01(1 - (t - LOCK) / 0.45) * (t >= LOCK ? 1 : 0); const riser = beat(frame, fps, LOCK - 1.4, LOCK, EASE.out); // build into apex const lockRing = clamp01(stamp); const ringPulse = 0.5 + 0.5 * osc(t, 3); // hold→ease orbit: reads the face on the way in, a turn through the fracture, // then a final arc that settles to centre (0°) right at the lock — the payoff. const legs = [ { arc: -18, hold: 0.6, travel: 2.2 }, { arc: 24, hold: 1.0, travel: 2.4 }, { arc: -6, hold: 0.5, travel: 1.7 }, // lands ~0° near LOCK ]; const scriptLines = [0.9, 0.72, 0.86, 0.64, 0.8]; // the four scene cards the block fractures into. seam = where the block was // cut; offset = how far each shard slides out into its slot in the row. const cards = [ { n: 1, label: "INTRO" }, { n: 2, label: "PROBLEM" }, { n: 3, label: "DEMO" }, { n: 4, label: "OUTRO" }, ]; const HeroFace = (
{/* panel title bar */}
draft-prompt.txt
{fractureP > 0.5 ? "4 SCENES" : "1 BLOCK"}
{/* the body region — holds the solid block, which fractures into cards */}
{/* SOLID SCRIPT BLOCK — one monolith of intent. Fades/contracts as it fractures so the row of cards takes its place. */}
{scriptLines.map((w, i) => { const lp = clamp01((blockIn - i * 0.1) / 0.6); return (
); })}
{/* the FRACTURED ROW — 4 numbered scene cards split out of the block. */}
{cards.map((card, i) => { // each shard staggers out, sliding from the block centre to its slot // and dropping its fracture seam — reads as a clean split. const cp = clamp01((fractureP - i * 0.1) / 0.6); const fromCenter = (i - 1.5) * 24; // pull toward centre pre-split return (
{/* numbered index — the ordered breakdown */}
{card.n}
{card.label}
); })}
{/* PRIMARY CTA — "Copy Draft Prompt". Depresses on the click beat; a prompt token flies off + a clipboard pulse rings out. */}
{/* clipboard glyph */}
{copyP > 0.4 && copyLife > 0.05 ? "Copied!" : "Copy Draft Prompt"}
{/* clipboard pulse ring radiating from the button on copy */}
{/* the prompt token copying out — a small chip flying up to the clipboard */}
PROMPT
{/* the lock ring that snaps tight on the apex beat */}
); return ( Copy Draft Prompt {/* riser glow swelling behind the hero into the apex */} {/* click flash + apex impact / shockwave */} {HeroFace} {/* billboarded spec callouts firing at orbit waypoints */} {/* flat masked mirror sibling — re-renders the hero, simplified & matte */} {HeroFace} ); }; export default MgOrbitScene10CopyPrompt;