Architecture
One pipeline. Shutter to LUT.
Most apps split capture and edit into two products. Acetate runs everything through one Core Image pipeline — what you see in the editor is exactly what gets baked into your LUT, exactly what the camera applies live.
Why a single pipeline?
If the camera ran one set of filters and the editor ran another, the look you save as a LUT wouldn't match what you saw in the viewfinder. Worse, two pipelines means two places to keep tuned — and pro tools live or die by consistency.
So Acetate uses one Core Image graph from shutter to export. Light → Colour → HSL → Curves → Split Toning → Three-Way Grading → Filter. The same code path runs in the editor's live preview, in the camera's live preview, and in the LUT-bake step. The "Save as Filter" feature only exists because the pipeline is unified — you can't bake a portable look unless the look is one deterministic function of input.
The flow
Eight stages, every photo.
- 1
Capture
Apple ProRAW DNG written straight to your library. Manual or assisted exposure. Live histograms, zebras, focus peaking, dual-axis level — the exposure tools a real camera ships with.
- 2
Light
Exposure, brightness, contrast, blacks, whites. Filmic tone mapping with shadow lift via γ-curve and Reinhard-style highlight rolloff at a 0.55 pivot — preserves hue and chroma through the compression.
- 3
Colour
Saturation and vibrance (skin-tone protected), temperature, tint, fade. Three-way colour grading wheels (Lift / Gamma / Gain) for Shadows / Midtones / Highlights with per-range luma.
- 4
HSL
Per-colour-range hue, saturation, and luminance, but done in OkLab perceptual space. A 20° hue shift on orange doesn't accidentally drift the saturation; chroma adjustments stay perceptually uniform.
- 5
Curves
Master + per-channel RGB tone curves. Smooth catmull-rom interpolation between control points. Drag, double-tap to add, swipe to remove.
- 6
Detail
Sharpness (1 px), texture (3 px mid-frequency), clarity (~20 px), dehaze (dark-channel-prior). Three-stage edge-aware denoise: CIMedianFilter → CINoiseReduction → edge-aware composite.
- 7
Filter / LUT
33-cube CIColorCube applied last so it sees the fully graded image. Built-in era LUTs, user-saved LUTs, or imported .cube files — same code path, same one-tap intensity slider.
- 8
Save
Export as HEIC with EXIF metadata preserved. Or hit Save as Filter — every stage above bakes into a portable .cube LUT you can share, re-apply, or shoot in.
The LUT engine
33-cube CIColorCube, end to end.
Eight built-in era looks ship as hand-tuned 33-cube .cube files. Any edit you make can bake into the same format. The Hald identity image runs through the editor's pipeline, gets read back as a cube, and that cube is what CIColorCube interpolates in the live preview the next time you select it.
33³ samples
35,937 colour vertices per LUT. Trilinear interpolation between them via CIColorCube — one GPU pass, regardless of how complex the underlying transform was.
.cube file format
Industry standard. The same format Lightroom, Premiere, DaVinci Resolve, Capture One, FilmConvert all read. Your saved LUTs are portable to every tool that grades colour.
Camera + editor parity
Saved LUTs appear in the camera's MY LUTs section, not just the editor. Shoot tomorrow's photos in the same grade you applied to yesterday's.
Import + export
Import .cube files from Files, iCloud Drive, AirDrop, or third-party providers like Dropbox. Export yours to share with other apps — proper two-way LUT ecosystem.
Smart tools
Machine learning that stays on your phone.
No cloud round-trip, no upload of your photos. Apple's Vision framework + on-device Core ML do the work locally — same as Apple's own Photos.app Clean Up.
Scene detection
VNClassifyImageRequest reads the scene at edit time. Tags inform the Auto button so 'optimise' picks the right shadow / highlight defaults for indoor vs outdoor vs portrait vs landscape.
Auto-straighten
Vision detects the dominant horizon line and computes a straighten angle. One tap applies — undoable like any other adjustment.
Object Removal
LaMa-class Core ML inpainting (A15 / M1+). Smart-crop ROI around your mask gives ~3-5× more model resolution per inpainted centimetre; colour-matched seam blending kills the visible patch.
People segmentation
Vision's person-segmentation mask powers the AI Tools workflow — one tap to isolate the subject, then apply selective adjustments to just them or just everything else.
Your data
Yours, fully.
Acetate has no account system, no cloud, no analytics, no telemetry. Your photos live where you put them — your library, your Files. Location is used strictly for EXIF geotagging on photos you take, and never leaves the device.