By mid-August 2026 the shelf carried enough cameras to cover the video-artifact side of Afterhours. What came next stretched the pipeline into new territory — G8X MIII with real depth-of-field via CoreML, FLUX-1 with live heat-map refraction, POLAROID-90 with develop-at-capture ritual, and SPECTRA-16 with 20 effect branches. Plus a shared photo + video editor and a Dynamic Island Live Activity for export progress. Try the current lineup at afterhourscamera.com.
Aug 13 – Aug 25, 2026 — FLUX-1, G8X MIII, POLAROID-90, SPECTRA-16, and the shared photo + video editor.
Around the middle of August the app crossed from "shelf of camcorders" into a lineup with genuinely different capture models. Four cameras stretched the pipeline in different directions.
G8X MIII — the anti-artifact camera
Single-exposure honesty, real blacks, bimodal Canon-style grades, clean OSD (nothing burned). Its one trick is shallow depth of field on stills at develop time only — the same product language as CZ-30's flash grade (the look exists in the file, not the live LCD).
Under the hood: a CoreML port of Depth Anything V2 Small F16P6 (Apache 2.0 — the Base/Large variants are CC-BY-NC and must never ship), piggybacking Vision faces on the same normalized still. src/capture/dof.ts runs BEFORE the look shader so grain and LUT land uniformly over blurred and sharp regions (blur that erases grain is the #1 fake-bokeh tell). Sharp layer + two pre-blurred copies with a highlight-boost color filter chained INTO the blur so blown points bloom into discs, lerped per pixel by |inverse-depth − focus| in a small RuntimeEffect.
Slow-sync dual exposure was the encore: an ambient frame is snapped ~200 ms BEFORE the flash burst, and fuseSlowSync composites the flash-lit subject (Vision person mask, near-depth fallback, feathered) over the ambient background. Rich sunsets behind flash subjects, like a real compact's slow-sync flash.
FLUX-1 — the first fractalWarp camera
Live height-map-gradient refraction: nine curated topographic maps, gradient displaces the sampling position (screen-space refraction — the gradient is deliberately NOT normalized, slope magnitude carries bend strength). Two grayscale height-map child shaders (fluxRaw/fluxSoft), then frost, RGB prism, and ridge shadow/highlight relief. CameraMeta.fractalWarp gates everything; user dials live in LookAdjust and resolve through resolveFluxLook so frame processor and exports agree by construction.
FLUX v1.1 added mask modes — CIRCLE / BAND / SUBJECT / DRAWN. One mask factor multiplies displacement, frost, prism and relief together. SUBJECT uses Vision instance masks (later shared with CREATE). DRAWN is finger-painted on a 540×720 paint surface, per-camera persistence at Documents/flux-masks/<id>.png, mask pan gesture routes to the brush when the DRAWN panel is open.
POLAROID-90 and SUPER-8
Develop-at-capture with story-canvas SAVE, TOSS share layout (3 prints with handwritten captions, die-cut silhouettes), cinematic pan-across-pile reveal replacing the contact-sheet reveal. SUPER-8 shipped alongside, both paid.
SPECTRA-16 — the effect-dial digicam
Free camera. 20 uniform-gated fx branches: inversions, phosphor monos, thermal, Aerochrome false color, posterize, sepia, time-rotating hue, red-cyan anaglyph, NOIR hard-contrast B&W. Applied to the tinted color pre-LUT so grain, comb and JPEG character survive into the effect. Per-frame-reseeded looks freeze naturally on stills via the capture-moment uTime.
The shared media editor
The lineup got so heterogeneous that photo review needed to become a real editor. The shared media editor (src/editor/, Aug 21) is the ergonomic payoff: an iOS-Photos-style shell that imports still OR video from Photos and runs it through the live camera look — every non-roll camera eligible.
The video half was the interesting engineering. I spent four rounds trying to make Skia.Video (RN Skia's AVPlayer-backed video) usable as a source for shader draws — makeNonTextureImage, surface bounce, readPixels, ordering. Every recipe returned zero pixels. The BT.709 CVPixelBuffer never survived the cross-format GPU blit.
Working solution: bypass Skia.Video entirely, use a native VideoDecoder.grabFrame(path, tSec, maxW) — AVAssetImageGenerator → CGBitmap in a byteOrder32Little | premultipliedFirst context → BGRA bytes → Skia.Image.MakeImage. Stateless, colorspace-clean, works while paused, no seek-settle dance. The editor's playback preview is a JS rAF loop that grabFrames the next PTS each tick; full audio is heard at export time only.
Dynamic Island export progress
Also that week: a live-frame Live Activity that mirrors the in-app processing pill. Getting expo-widgets to cooperate was its own diagnosis pass:
- The plugin's
widgetsarray is home-screen widgets ONLY, never list a Live Activity there; the correct config is{ "widgets": [], "frequentUpdates": true } - The
'widget'directive ships the layout as SOURCE TEXT to the extension's interpreter — no imports, no module scope; theme colors are inlined by hand - The plugin unconditionally adds
aps-environment, so a smallwithNoPushEntitlement.jsplugin strips it (push isn't needed for local Live Activities) - The compact island presentation refuses images the expanded one accepts — feed it its own ≤80px copy
FAQ
Does Afterhours Camera do computational photography? Yes. G8X MIII uses a CoreML port of Depth Anything V2 Small to add real shallow-depth-of-field to stills at develop time. All inference runs on-device — nothing is uploaded. See the full camera lineup at afterhourscamera.com.
What is FLUX-1? FLUX-1 is a live heat-map refraction camera in Afterhours. Nine curated topographic maps displace the sampling position of the shader in real time, with frost, RGB prism, and relief on top. Users can mask the effect to a circle, band, detected subject, or finger-painted area.
Can I import photos or videos from Photos into Afterhours? Yes. The shared media editor imports both stills and video from your Photos library and re-renders them through the live camera look. Every non-roll camera is eligible as an editor look.
Which cameras added in this wave are free? SPECTRA-16 (the effect-dial digicam) is free. G8X MIII, FLUX-1, POLAROID-90, and SUPER-8 are paid at $3.99 each, or unlocked via the AFTERHOURS PASS.
Does Afterhours use the Dynamic Island? Yes, on supported iPhones. Export progress mirrors into a Live Activity so you can leave the app and watch the shader-render pipeline finish from the lock screen or the Dynamic Island.
