AquaRestore
GitHub

Android 10+ · on-device color restoration

Bring back the true colors of your underwater world.

Water swallows red light first, so dive footage comes home blue-green and flat. AquaRestore analyses your videos and photos, recommends a correction and renders it live on the GPU, all on your phone.

  • Video & photo
  • HDR10 · HLG
  • Live GPU preview
  • Never overwrites originals
AquaRestore: a sea turtle split down the middle, murky blue-green before and vivid after, next to the app's editor with its Color Restore slider and advanced adjustments.

Press and hold to compare

The sea takes red first. AquaRestore gives it back.

Within the first few metres, water absorbs most red light and scatters the rest into haze. AquaRestore compensates red, rebalances white, lifts haze and opens up shadows, tuned to each clip rather than one fixed filter.

Drag the seam, just like holding Compare in the app to flash back to the original.

Demo: the "before" side here is a simulated color cast.

A sea turtle over a coral reef with restored warm colors. Before After

How it works

From murky to vivid in one slider.

  1. 01

    Import

    Pick a video or photo with the system file picker. No permission to read your whole gallery.

  2. 02

    Auto-analyse

    On-device color statistics recommend red compensation, white balance, exposure, dehaze and shadows.

  3. 03

    One slider to tune

    Restore strength scales every parameter together: 0% is the original, 100% the base correction, up to 200%.

  4. 04

    Trim, speed, music

    Trim on color-graded thumbnails, play at 0.5×–4× and mix in a soundtrack.

  5. 05

    Export

    Original quality or a custom size, fps and quality, with a live file-size estimate. Runs in the background.

  6. 06

    Your way

    中文 / English and light / dark follow your system by default, and your choice is remembered.

Smart recommendations

It reads the water before it touches a pixel.

No cloud and no generative model: just careful color statistics, computed on your phone.

  • Six keyframes spread across 5–95% of the clip, each shrunk to about 192 px.
  • Crushed blacks and blown highlights are ignored. It measures RGB means, per-channel percentiles, saturation, water-pixel ratio, red loss and blue-green cast.
  • The median across frames gives one parameter set for the whole clip, so white balance never flickers from frame to frame.
  • Unsure about a scene? You get a hint and a gentler default strength. The usual starting point is a conservative 85%.

Milky, murky water

Low contrast, low saturation, mostly water-colored. Per-channel auto levels pull contrast apart and cool slightly to keep the blue; extra red and shadow lift are switched off so red isn't added twice.

Deep blue or green water

Red compensation and white balance stay on to bring warm tones back.

Deep and low light

Shadows are lifted harder so detail survives the dark.

Features

A full underwater editor in your pocket.

Restore strength 0–200%

One slider scales every correction proportionally, auto levels included. Photos and videos follow exactly the same rule.

Nine advanced controls

Auto levels, red compensation, temperature, green/magenta, exposure, dehaze, contrast, saturation and shadows. Each shows the value actually applied at your current strength.

Smooth live preview

A light proxy (up to 960 px, about 30 fps) plays through hardware decoding and a single-pass GPU shader. Moving a slider only updates shader uniforms. Export always reads your original file.

Frame-accurate trimming

The trim bar shows color-graded thumbnails of the whole clip. Set the start or end exactly at the playhead; preview loops inside the trim, and export and size estimates count only that range.

0.5× to 4× speed

Slow down a manta pass or speed up a long drift. Speed applies to preview and export, and audio keeps its pitch.

Background music

See the song's waveform, drag a window that always matches your output length, and balance original sound and music separately. Short tracks loop.

HDR stays HDR

HDR10/PQ and HLG are graded in FP16 / BT.2020, keeping highlights above 1.0, and exported as 10-bit HEVC with no silent SDR tone-mapping. Needs Android 13+ and a capable encoder.

Background export

Prepare, encode and save progress, cancel any time, and keep using your phone. A notification tells you when it's done.

Photos, too

The same color formula as video, with a 720 px live preview that always catches up to your latest slider position. Save as lossless PNG or JPEG.

Export

Keep the original quality, or choose exactly what you need.

OptionVideoPhoto
OriginalSource resolution, frame timestamps / variable frame rate and codec. Reuses the source bitrate (adjusted for speed); encoder downgrades are blocked.Full size, lossless PNG
Custom sizeOriginal, or long edge 3840 / 2560 / 1920 / 1280 / 960 / 640. Aspect kept, never upscaled.Same
Custom fpsOriginal / 24 / 25 / 30 / 50 / 60, never above the sourcen/a
QualityTarget bitrate 10–100%, with a live MB / GB estimateJPEG 10–100%, or lossless PNG
OutputMP4: H.264 for SDR, 10-bit HEVC for HDR. Compatible audio is kept as is.JPEG / PNG

Your originals are never touched

Exports go to Movies/AquaRestore or Pictures/AquaRestore. Files are written to temporary storage first and published through MediaStore; cancelled or failed exports are cleaned up.

Processed on your device

Color analysis, live preview and export all run on your device.

Honest about color

Color correction always re-encodes video, so "Original" means original settings, not bit-identical. Colors the sea has fully absorbed can't be fully recovered.

Current scope and limits
  • Supports SDR plus HDR10/PQ and HLG on compatible devices. Dolby Vision and recognisable HDR10+ dynamic metadata are rejected on import.
  • Dehaze is a bounded black-point and contrast correction, not depth estimation or machine-learning denoising.
  • Recommendations come from samples across the whole clip. For spliced multi-scene clips, very dark footage or strong colored lights, check the result with the strength slider.
  • Photo EXIF / GPS metadata is not kept, and a lossless PNG can be much larger than the source JPEG.
  • High-resolution photos are limited by memory: you'll be asked to pick a smaller size instead of being silently downscaled.
  • Background export doesn't resume if the system kills it or the phone restarts. Smoothness depends on the device.

Download

Ready for your next dive.

Android APK

Grab the signed APK and SHA256SUMS from GitHub Releases, open it on your phone and allow Install unknown apps. Requires Android 10 or later.

Download APK

Build from source

Kotlin, Jetpack Compose, Media3 and OpenGL ES. With Android SDK 36 and JDK 17, one script builds, tests and lints:

./scripts/build-android-debug.sh
View on GitHub