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.
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
Canvascode. 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
ProEntitlementeverywhere 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.