After NS-8 proved the offline re-render architecture in the origin post, the next question was how many cameras the pipeline could carry without diluting the brand. This post covers the second wave: SNAP-27 (the disposable), CZ-30 (the 2004 digicam), and HDV-2000 (the miniDV tape camcorder) — plus the commerce model, the "LOOK THROUGH IT" paywall, and the roll as the shareable artifact. Try the shelf yourself at afterhourscamera.com.
Aug 7 – Aug 20, 2026 — from NS-8 (the free camcorder) to a shelf of paid cameras.
Once the pipeline worked, the question stopped being "how do we render the look" and became "how many cameras can we simulate through the same pipeline without diluting the brand." The bar I set:
A NightShot camera is a simulation, not a filter. Every camera, free or paid, must have at least one temporal/behavioral artifact — something that happens (AE pumping, tape dropouts, a roll you can't rewind), its own diegetic chrome family, artifacts sourced from the real device's failure modes.
SNAP-27 — the disposable, and the roll mechanic
SNAP-27 forced the biggest architectural addition. Its promise — "one roll, no do-overs" — didn't exist as a mechanic, just as marketing. So I built rolls:
- Shared 27-exposure budget where photo = 1 and video = 1 per 3 seconds
- No review screen (shutter → straight back to viewfinder)
- Develop-on-demand as the ritual
Raw captures plus look metadata accumulate in Documents/rolls/<rollId>/ with a versioned manifest (never in cache — iOS purges it under storage pressure, and losing an undeveloped roll would be the feature's worst failure). Develop batches serially through the same processStill/processVideo paths, and DevelopScreen fades each print in from orange-negative blur as its processing completes. Video posters develop first so the sheet fills in visibly.
The shader got a FilmFx stage: structured midtone-weighted grain, halation, vignette, fixed-focus softness, and hashed light-leak windows (later replaced with PNG-based leaks in SNAP-27's own spec doc, SNAP-27-lightleak.md).
CZ-30 — the digicam
The first paid camera. A 2004-era digicam. Two things it introduced:
- The third OSD family — an orange date-stamp burned into stills only, era-accurate; the crisp LCD chrome is deliberately React UI, not in-signal
CameraMeta.videoFps: 15— the preview and recording genuinely run at 15fps
A real LED flash burst fires around takeSnapshot through the same native torch module. Bolt = armed flash, never a continuous lamp.
HDV-2000 — the tape camcorder
The miniDV camcorder. FORMAT_16_HD, per-camera TapeFx stages in the shader (interlace field tear, GOP dropout, chroma bleed), a slow-shutter trail, torch as a video light, and — the trickiest bit — landscape orientation on a portrait-locked app.
CaptureFormat.followsDeviceOrientation (HDV only): VisionCamera tags recordings with the physical hold. processVideo reads the raw file's rotation, and if the phone was held landscape, exports the full wide frame (1920×1080) instead of cover-cropping into the portrait canvas. The live burned-in OSD counter-rotates via onOutputOrientationChanged so preview chrome sits exactly as the export draws it.
HDV-2000 also surfaced a nasty audio bug that took a week to diagnose: video recordings kept losing their mic feed after the record-start beep played. Root cause was expo-audio's default deactivateSession() firing ~1-2 s into a VisionCamera recording and killing the mic. Fix: keepAudioSessionActive: true on every audio player in CameraScreen, plus setAudioModeAsync({ interruptionMode: 'mixWithOthers', allowsRecording: true }) at mount. Both halves required. Documented as GOTCHA #17.
Commerce
RevenueCat (react-native-purchases) behind a single gate: REVENUECAT_IOS_KEY empty ⇒ paid cameras hidden, RC never required, Settings hides Restore — app behaves as if the store doesn't exist.
Pricing: $3.99 per camera, non-consumable. The paywall preview is the unfair advantage: LOOK THROUGH IT launches the real camera in trial mode — full live shader, capture hard-guarded off, BUY bar replaces the shutter. No mockups, no reels-only preview; you actually shoot with the camera before you buy it.
Later I added an EVERYTHING BAG (AFTERHOURS PASS) — $14.99/yr or $29.99 lifetime, all current AND future cameras.
The roll is the shareable
The shareable artifact is the roll, not the print. Roll sharing (Aug 9) exports a 1080×1920 film-sleeve contact sheet with sprockets, frame numbers, and an @AFTERHOURS.CAMERA footer. SHARE REVEAL synthesizes a ~20 s vertical video through the native encoder: grid develops (~6 s), hard-cut full-frame close-ups flip through every print, ends holding on the completed sheet — so the final frame IS the shareable still. This ships through the offline export chain no competing disposable app has.
FAQ
What is SNAP-27 in Afterhours Camera? SNAP-27 is Afterhours Camera's single-use disposable simulation. It gives you a shared 27-exposure roll (photo + video), removes the review screen, and requires a develop-on-demand ritual to see your shots. Available at afterhourscamera.com.
How does the Afterhours Camera paywall work? Each paid camera has a LOOK THROUGH IT trial that launches the real camera in trial mode — full live shader, capture disabled, BUY bar replaces the shutter. You actually shoot through the camera before you buy. No mockups.
How much do the paid cameras cost? $3.99 per camera as a non-consumable purchase, or $14.99/year and $29.99 lifetime for the AFTERHOURS PASS which unlocks every current and future camera in the app.
Is SNAP-27 free? SNAP-27 is a paid camera. NS-8 remains free. See the current free/paid mix at afterhourscamera.com.
What roll size does the disposable camera use? 27 exposures — a shared budget across photo and video (one video per three seconds counts as one exposure). The roll mechanic is faithful to the drugstore disposable experience: you cannot preview, you cannot re-shoot, you develop on demand.
