feat(remotion): craft kit (stop-motion + paper-cut) + PaperCut block

The real visible quality leap — a handmade craft aesthetic code can't fake by being
smooth:
- craft.ts: useStopMotion (quantize the frame to "on twos/threes" + per-step jitter
  → choppy handmade motion), paperShadow (layered cast shadows for paper depth),
  PAPER_TEXTURE (procedural fibrous paper grain).
- PaperCut block: a layered paper-cut landscape — sun + 4 brand-coloured paper hills
  with real cast shadows + paper grain, rising into place on stop-motion timing with
  an idle wobble, + paper-cut title/subtitle. Re-flows 16:9/1:1/9:16.

Registry now has 13 blocks. Verified: warm Yalda render (fits the Persian/seasonal
moat) + a stop-motion demo clip showing the on-threes choppy rise.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-25 07:26:01 +03:30
parent b1a51cb01b
commit 8c4bc2c626
3 changed files with 104 additions and 0 deletions
+2
View File
@@ -11,6 +11,7 @@ import { BarChartBlock } from "./blocks/BarChart";
import { StompBlock } from "./blocks/Stomp";
import { DeviceMockupBlock } from "./blocks/DeviceMockup";
import { ProductShowcaseBlock } from "./blocks/ProductShowcase";
import { PaperCutBlock } from "./blocks/PaperCut";
/**
* The scene-block registry. A FlexStory template is an ordered list of these
@@ -30,6 +31,7 @@ export const SCENE_BLOCKS: Record<string, SceneBlock> = {
[BarChartBlock.id]: BarChartBlock,
[StompBlock.id]: StompBlock,
[DeviceMockupBlock.id]: DeviceMockupBlock,
[PaperCutBlock.id]: PaperCutBlock,
};
export const BLOCK_LIST = Object.values(SCENE_BLOCKS);