Skip to content

docs: add 1600-style brutalist motion template#101

Open
LeadcodeDev wants to merge 3 commits into
mainfrom
docs/1600-brutalist-style
Open

docs: add 1600-style brutalist motion template#101
LeadcodeDev wants to merge 3 commits into
mainfrom
docs/1600-brutalist-style

Conversation

@LeadcodeDev

Copy link
Copy Markdown
Owner

Summary

A reference scenario + skill rule for producing videos in the style of motion studios like 1600.agency: full-bleed saturated colour blocks that hard-cut between scenes, oversized Anton grotesque type, kinetic entrances, animated counters, and directional wipe transitions.

  • examples/1600-style.json — 21s, 6 scenes, 1920×1080. Yellow hero → black studio title → cobalt counters → coral services → acid-green manifesto → black CTA.
  • .claude/skills/rustmotion/rules/1600-brutalist-style.md — documents the visual language (palette, type scale, animation patterns, per-scene skeleton) so the look is reproducible on any content — the "reusable template" ask.

Notes

Preview

6 stills reviewed during authoring: massive yellow hook, black studio title with yellow accent word, kinetic counters (30 / +120 / x3), stacked coral service list, green manifesto, black CTA with underline + accent email.

Custom/Google fonts declared in a scenario's `fonts` were downloaded and
handed to Skia via `FontMgr::new_from_data`, but that call returns a
detached Typeface and never exposes it to `match_family_style` — Skia's
default FontMgr only name-resolves installed system fonts. So every
`font-family` pointing at a declared font silently rendered in the
Helvetica/Arial fallback (e.g. Anton came out as a generic sans-serif).

Keep the raw bytes in a global family->bytes registry when loading, and
have `typeface_with_fallback` resolve custom families from it first —
building and caching the Typeface per render thread (the FontMgr is
thread-local, so system-thread registration alone never reached the
rayon render workers). One weight per custom family via this path;
multi-weight custom families are follow-up.

Tests: registry stores first-wins + serves bytes; a registered family
resolves to its own typeface over the system fallback (uses the cached
Anton TTF when present, skips on a cold cache).
A 21s, 6-scene reference scenario (examples/1600-style.json) in the
style of motion studios like 1600.agency: full-bleed saturated colour
blocks that hard-cut between scenes, oversized Anton grotesque type,
kinetic entrances (slide/scale with stagger), animated counters, and
directional wipe transitions. Plus a skill rule documenting the visual
language so the look can be reproduced on any content.

Depends on the custom-font fix (declared Anton must actually render).
Address the '2D slideshow' feel: every scene now plays on space instead
of being a flat panel.

- continuous camera per scene (keyframed zoom + focal origin drift, and a
  subtle roll on two scenes) — no more static frames
- three parallax planes via style.depth on scene direct children: a deep
  tone-on-tone ghost word (~0.4), the content (1.0), floating foreground
  accents (~1.75) — planes separate as the camera moves
- 3D rotational entrances (flip_in_x/y, tilt_in with perspective and a
  hinge transform-origin) instead of flat slides; they resolve face-on so
  the type stays legible
- camera-roll bleed avoided by keeping a covering zoom during rotation
  (documented in the style rule)

Rule updated with the depth/camera layer.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant