Motecraft

v1, and a new way to share

261 experiences across iOS and Android, and a Moments feature that records the renderer directly instead of the screen.

Motecraft v1 is rolling out on iOS and Android. 261 experiences across the two apps, all rendered live on a real Canvas (SwiftUI on iOS, Jetpack Compose on Android). One of them runs every time you tap "Today" on the home screen — a hand-picked rotation that changes through the week.

The headline feature this release is Moments: a way to record up to 45 seconds of any experience and share it without the system screen-recorder.

live canvas: mandala-ember (placeholder)
Mandala Ember — long-press pours embers, lift to stop.

Why not just use screen recording?

Every phone already has a screen recorder. They're great if you want a recording of the phone, with chrome, notifications, and the wallpaper around the edges. They're not great if you want a recording of the experience — clean, edge-to-edge, with a known aspect ratio and no system UI bleeding in.

So Moments doesn't use the system screen recorder. It captures the renderer's draw surface directly. On Android it goes through Compose's rememberGraphicsLayer() — the renderer draws to a GraphicsLayer that the recording engine reads from at 30 fps via toImageBitmap(). On iOS it walks the key window with drawHierarchy(in:afterScreenUpdates:) cropped to the renderer's rect, scaled down to the encoder's resolution, fed into an AVAssetWriter.

The output is exactly the canvas — chrome, tab bar, share buttons, the REC pill in the top corner all live outside the recorded subtree by construction.

// The chrome row in the player declares its layout above the canvas;
// .recordable() captures only the renderer + ambient backdrop subtree.
ZStack {
  AmbientBackdrop(...)
  renderer.body
  TouchIndicatorLayer(state: indicators, enabled: showIndicators)
  WatermarkOverlay(enabled: !isPro)
}
.recordable(captureSource)

What's in v1

  • 261 experiences across mandalas, swarms, fluids, fractals, spirographs, aurora, fireworks, fidget spinners, wallpapers, more. Each one a few hundred lines of Canvas code. No game engine, no shader pipeline, no graphics framework in the dependency list besides what's in the OS.
  • Moments — Smooth (540p) and Standard (720p) on the free tier; HD (1080p) and 4K (Android only — iOS's per-frame draw-hierarchy path is too jerky at 4K right now) gated to Pro. Touch indicators baked into the video, optional. Free-tier exports carry a small "Motecraft" mark, bottom right.
  • No accounts, no ads, no tracking. Anonymous Firebase Analytics is on by default for crash diagnostics + aggregate event counts; flip it off in Settings → Privacy and nothing leaves the device.

What's not in v1

A few things we cut to keep the launch tight:

  • System audio capture. None of the v1 experiences play sound, so the "Include sound" toggle is "coming soon." When the first audio-producing experience lands, we'll wire the shared audio bus + AAC mux behind the same toggle.
  • A surface-mode encoder. The current path is CPU-bound — for each recorded frame we snapshot, convert to YUV, encode. It works fine for Smooth and Standard on every recent device; HD strains older hardware. A GL/EGL surface-mode encoder is the v1.1 fix.
  • A real paywall. Pro is wired through ProEntitlement everywhere it needs to be, but RevenueCat / Play Billing aren't connected yet. Debug builds get Pro for free so we could dogfood it. The hookup is a v1.1 drop-in.

Coming up

More experiences. More posts here about why specific renderers exist (the Mandala Painter v2 mirror toggle has a small math story behind it). The v1.1 surface-mode encoder. And a public beta sign-up — for now, email me at minhazp.builds@gmail.com if you'd like TestFlight or Play Beta access.

If you ship a Moment somewhere, mention @motecraftstudio so I can see it.