Skip to content

Repository files navigation

Ultra Photo Effects

A focused, private-by-design photo editing studio for Windows

Organize your photos. Dial in a look. Retouch the details. Export at full quality.

.NET WinUI 3 Windows 10/11 License: MIT Latest Release Build


✨ Try it now β€” no install, no account, no telemetry

Grab the .zip, extract it anywhere, and double-click UltraPhotoEffects.exe.

That's it. No installer. No Microsoft Store. No runtime to download first. The Windows App SDK runtime ships inside the zip, so the build is fully standalone and runs on a clean Windows 10/11 machine straight away.

Your photos never leave your computer. Ultra Photo Effects is unpackaged and entirely offline β€” no account, no telemetry, no network calls, no "cloud AI". Every pixel is processed locally.


πŸ“Έ Screenshots

The library

Library view

The editor β€” live preset previews on your own photo

Editor with preset panel

The preset cards in the right-hand panel aren't static images. Each one is rendered by the app's own pixel engine, on your photo, as you hover through them.


🎯 Features

πŸ“š Organized photo library

  • Import photos into a dedicated local library with a thumbnail grid
  • Search by name, multi-select, select-all / clear-selection in one action
  • Originals are stored losslessly and never overwritten β€” edited previews are cached separately
  • Per-photo "Edited" badge so you always know what's been touched

πŸŽ›οΈ A real editing workspace

  • 12 built-in analog-film presets (Analog, Chromatic, Moody, Legacy), each with a live preview rendered from your image
  • Fine-grained manual control: exposure, contrast, saturation, temperature, tint, highlights, shadows, clarity, vignette, and film grain
  • Preset strength slider β€” dial any look from subtle to full
  • Straighten, flip, 90Β° rotation, and non-destructive crop
  • Zoom, pan, fit-to-screen, and a press-and-hold before/after comparison

🩹 Retouching

  • A healing brush that removes distractions and blends patches of texture
  • Edable mask rasters, anchored in original pixel coordinates so masks stay aligned after geometry changes
  • Multi-level, feathered blending so retouched areas don't look smudged

⚑ Batch editing

  • Select many photos, apply one look to all of them
  • Clear per-photo progress and selection status
  • Consistent results across an entire shoot

πŸ’Ύ Export

  • JPEG or PNG, configurable quality
  • Optional long-side resizing (great for web and email)
  • Explicit output folder and filename control
  • Full-resolution render, with fast low-res previews while you work

🎨 Interface

  • A considered dark editorial workspace, with a light mode toggle
  • Custom-drawn title bar, clean typography, generous spacing
  • Full keyboard control β€” most actions have a shortcut

πŸ—οΈ Architecture

Ultra Photo Effects separates what a photo looks like from how it's drawn:

PhotoItem ──▢ EditRecipe ──▢ PhotoRenderer ──▢ RawImage ──▢ ExportService
                  β”‚              β”‚
                  β”‚              β”œβ”€β”€ ImageEngine   (tone, geometry, resampling)
                  β”‚              └── HealEngine    (masked local removal)
                  β”‚
                  └── Models/Preset (PresetLibrary)
Layer Responsibility
Models EditRecipe holds the complete, serializable description of an edit β€” preset, adjustments, geometry, and heal masks. PhotoItem is a library entry. Nothing here touches pixels.
ImageEngine The pixel math. Tone curves, a geometry map (straighten β†’ rotate β†’ crop), and high-quality resampling. Pure functions, no I/O.
HealEngine Masked, feathered content-aware removal that samples surrounding texture.
PhotoRenderer Composes geometry, healing, and tone into a single render. Supports two paths: a fast low-res preview and a full-size final render.
LibraryService Import, thumbnail generation, and persistence to library.json (Newtonsoft.Json).
ExportService Final encode to JPEG/PNG with quality and long-side scaling.
Views WinUI 3 pages: LibraryPage, EditorPage, BatchPage.

Non-destructive by design

Your original file is never modified. Editing produces an EditRecipe β€” a small, JSON-serializable description. You can always go back, change the recipe, or discard it entirely and get your untouched original back.

Two-tier rendering

Interactive editing renders a downscaled preview so sliders stay responsive under the cursor. The full-resolution render happens once, on export. The two paths share the same engine, so what you see is what you get.


🧰 Tech stack

Language C# 12
Framework .NET 8 (net8.0-windows10.0.19041.0)
UI WinUI 3 / Windows App SDK 2.4.0
Runtime Windows App SDK, self-contained (bundled with the app)
Packaging None β€” pure unpackaged, WindowsPackageType=None
Serialization Newtonsoft.Json
Interop Win32 (window icon, DPI) via DllImport
Min. OS Windows 10 1809 (17763) Β· Windows 11 recommended
License MIT

No native image libraries, no GPU shader pipeline, no cloud services. The image pipeline is plain C# over raw pixel buffers β€” which is exactly why it runs identically on every machine, and why the whole app is one self-contained zip.


πŸ› οΈ Building from source

Prerequisites

  • Windows 10 version 1809 (17763) or later
  • .NET SDK 8.0
  • Optional: Visual Studio 2022 17.10+ with the WinUI application development workload

Build and run

# restore
dotnet restore "UltraPhotoEffects.csproj"

# build
dotnet build "UltraPhotoEffects.csproj" -p:Platform=x64

# run
dotnet run --project "UltraPhotoEffects.csproj" -p:Platform=x64

Publish a portable build

dotnet publish "UltraPhotoEffects.csproj" -c Release -p:Platform=x64 -o publish_out

This produces a standalone folder. Zip it and ship it β€” no installer required.

⚠️ Verify publish_out\resources.pri exists before you ship. A self-contained unpackaged publish can silently drop the app PRI, and without it the published .exe throws XamlParseException and exits 0xC000027B immediately β€” while Debug runs fine. The CopyAppPriToPublish target in the .csproj handles this; the CI release workflow asserts the file is present.

Where your data lives

%LOCALAPPDATA%\UltraPhotoEffects\
β”œβ”€β”€ photos\<id>\original.png    lossless originals
β”œβ”€β”€ photos\<id>\masks\          healing mask rasters
β”œβ”€β”€ thumbs\                     cached thumbnails
β”œβ”€β”€ library.json                library index
└── logs\                       session logs

Built-in self-test

The app ships with an end-to-end pipeline test. Set VSCOAI_SELFTEST=1 before launching and it exercises import β†’ render β†’ heal β†’ export β†’ persistence, then writes a report to %LOCALAPPDATA%\UltraPhotoEffects\selftest\selftest_result.txt.

$env:VSCOAI_SELFTEST = "1"
.\publish_out\UltraPhotoEffects.exe

Note: the self-test assumes it is the only photo in the library. If you already have photos imported, its final "library json roundtrip" assertion will report a count mismatch. That is a limitation of the test's assumption, not a bug in the app β€” every other assertion still runs and passes.


⌨️ Keyboard shortcuts

Library

Shortcut Action
Ctrl + I Import photos
Ctrl + E Export selected photos
Delete Delete selected photos
Esc Exit select mode

Editor

Shortcut Action
1 Presets tool
2 Adjustments tool
3 Remove (healing) tool
4 Crop tool
B Hold to compare against the original
Ctrl + Z Undo
Ctrl + Y / Ctrl + Shift + Z Redo
Ctrl + S Save the edit
Ctrl + E Export this photo
Ctrl + 0 Fit to screen
Ctrl + 1 Zoom to 100%
Ctrl + + / Ctrl + - Zoom in / out
Esc Back to the library

Batch

Shortcut Action
Ctrl + E Export the batch
Esc Back to the library

πŸ—ΊοΈ Roadmap

Planned and wanted. Pull requests welcome β€” see CONTRIBUTING.md.

  • More presets β€” a larger analog-film library, plus a B&W module
  • Curves and HSL β€” per-channel tone curves and hue/sat/lightness panels
  • Layers and masks β€” non-destructive layer stack with mask brushing
  • RAW import β€” read camera RAW formats via Windows.Graphics.Imaging
  • Clone / patch tool β€” manual brush-based cloning alongside healing
  • AI background removal β€” run fully locally, no cloud calls
  • Side-by-side compare β€” a proper split view for before/after
  • Copy/paste adjustments β€” move a look between photos
  • Lens corrections β€” automatic chromatic aberration and vignetting fix
  • HDR merge β€” combine bracketed exposures
  • Command palette β€” fuzzy-search any action by name
  • Multi-language UI β€” localization scaffolding
  • ARM64 and x86 releases β€” CI currently publishes x64
  • Settings page β€” persist export defaults and workspace preferences
  • Dark/light theme persistence β€” remember the choice across launches

🀝 Contributing

Contributions are very welcome β€” issues, ideas, bug reports, and pull requests.

  • πŸ› Found a bug? Open an issue with steps to reproduce.
  • πŸ’‘ Got an idea? Tell us about the workflow you have in mind.
  • πŸ”§ Want to contribute code? Fork it, branch off main, and open a PR.
  • πŸ’¬ Just want to talk? Start a Discussion.

New to the codebase? Start with CONTRIBUTING.md β€” it has the project layout, build commands, and the handful of gotchas worth knowing before you touch the project file.


πŸ“„ License

Released under the MIT License. Use it, fork it, ship it.


Made with care on Windows. No accounts. No tracking. Just photos.

About

A focused, private-by-design photo editing studio for Windows. Presets, retouching, crop and batch processing in a fully offline WinUI 3 app.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages