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.

The editing pipeline, top to bottom

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. 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. 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. 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. 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. 5

    Curves

    Master + per-channel RGB tone curves. Smooth catmull-rom interpolation between control points. Drag, double-tap to add, swipe to remove.

  6. 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. 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. 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.

Try the pipeline.

Free on the App Store. iPhone with iOS 17 or later.

Download on the App Store