DEV Community

Cover image for Hice una app de escritorio para procesar imágenes — sin nube, sin cuenta, todo local
Norberto Krucheski
Norberto Krucheski

Posted on

Hice una app de escritorio para procesar imágenes — sin nube, sin cuenta, todo local

Cada vez que necesitaba convertir una imagen a WebP, redimensionar o sacarle los metadatos EXIF, terminaba en alguna página random que te pide subir el archivo a un servidor. Tus fotos viajando a quién sabe dónde, para una operación que cualquier computadora moderna puede hacer en milisegundos.

Me cansé de eso y armé Pixora: una app de escritorio, open source, que procesa imágenes 100% en tu máquina. Sin internet, sin cuenta, sin nube.

Pixora Logo

Pixora

Local-first image processing. No cloud. No account.

🇺🇸 English  |  🇪🇸 Español  |  🇧🇷 Português

MIT License Platforms Built with Tauri


Pixora is a free, open-source desktop app for image processing. Convert formats, resize, remove backgrounds with AI, and strip metadata — all 100% locally on your machine, with no internet required after setup.

app.mp4

Built by Norberto Krucheski.


Download

Installers are automatically built for every release via GitHub Actions.

Platform Download
Windows ⬇ Download for Windows (.exe)
macOS (Apple Silicon M1 or higher) ⬇ Download for macOS (.dmg)
Linux ⬇ Download for Linux (.AppImage / .deb)

Just download, install, and run — no account, no setup, no cloud.


Features

Feature Details
Format Conversion Convert between WebP, JPEG, and PNG
Quality Control Adjustable quality slider (1–100%)
Smart Resize 10 built-in presets (hero, blog, avatar, 4K…) + custom dimensions. Aspect ratio always preserved.
EXIF & Metadata View full metadata (camera, GPS, date, exposure…) and strip

Qué hace

  • Conversión de formato — WebP, JPEG, PNG, con un slider de calidad
  • Redimensionar — 10 presets (hero, blog, avatar, 4K) o dimensiones custom. Siempre preserva el aspect ratio
  • Ver y eliminar metadatos EXIF — cámara, GPS, fecha, todo
  • Remover fondo con IA — modelo ONNX local, sin API key, funciona offline
  • Procesamiento masivo — arrastrás un montón de imágenes y las procesa en paralelo. Exportás todo como ZIP
  • Vista antes/después — slider interactivo para comparar el resultado

Todo esto funciona sin conexión a internet (después de la primera descarga del modelo de IA).


Por qué Tauri 2 + Rust en vez de Electron

Electron es genial para muchas cosas, pero para procesar imágenes necesitaba velocidad real. No "velocidad aceptable", sino que un batch de 8 fotos pesadas no trabe la interfaz.

Tauri 2 me dejó combinar lo mejor de dos mundos:

  • El frontend es React 18 con TypeScript. Toda la UI, los paneles, la grilla de imágenes, el slider antes/después. React maneja el estado y los re-renders, pero nunca toca un archivo de imagen directamente.
  • El backend es Rust puro. Resize con filtro Lanczos3, conversión de formatos, limpieza de EXIF recodificando desde cero, inferencia del modelo ONNX para remover fondos, y creación de ZIPs. Todo compilado a código nativo.

Rust corre a velocidad de C sin garbage collector. Sin pausas, sin demoras random. Las imágenes se procesan en paralelo usando un pool de workers dimensionado a los núcleos del CPU. En un Mac con chip M, procesar 8 imágenes tarda prácticamente lo mismo que procesar 1.


El detalle técnico que más me costó

La comunicación entre React y Rust pasa por un canal IPC que expone Tauri. La primera idea obvia fue: pasar la imagen como base64 por ese canal. Funciona, pero bloquea el thread de JavaScript en cada llamada. Con una imagen grande se nota. Con un batch de 10, la UI se congela.

La solución fue cambiar el enfoque: todo el procesamiento corre en Rust, y al frontend solo le devuelvo la ruta de un archivo temporal. Menos de 200 bytes viajando por el IPC en vez de megabytes de base64. La interfaz lee ese archivo una sola vez para mostrarlo.

Parece un cambio chico, pero fue lo que hizo que el procesamiento masivo funcione sin que la app se trabe.


Remoción de fondo con IA — offline

Esto es lo que más me gustó implementar. Usa IS-Net, un modelo ONNX cuantizado que pesa ~42 MB. Se descarga la primera vez que lo usás y después funciona completamente offline.

La inferencia corre en ONNX Runtime para Rust (ort crate), directamente en CPU. No necesitás API key, no necesitás GPU, no necesitás nada externo.

El modelo se cachea en:

Sistema Ubicación
macOS ~/Library/Application Support/pixora/
Windows %LOCALAPPDATA%\pixora\
Linux ~/.local/share/pixora/

Stack completo

Capa Tecnología
Desktop Tauri 2 (Rust + WebView nativo)
Frontend React 18 + TypeScript
Bundler Vite 5
Estilos Tailwind CSS
Estado Zustand
Imágenes image crate (resize, compress, convert)
Metadatos kamadak-exif
IA ort (ONNX Runtime) + IS-Net
ZIP zip crate

Probalo

Hay instaladores listos para descargar:

  • Windows.exe
  • macOS (Apple Silicon) — .dmg
  • Linux.AppImage / .deb

Descargá la última versión acá

O si preferís compilar desde el código fuente:

git clone https://github.com/NorbertOSK/pixora.git
cd pixora
bun install
bun start
Enter fullscreen mode Exit fullscreen mode

La primera vez tarda unos minutos porque compila el backend de Rust. Después arranca rápido.


Privacidad

Tus imágenes nunca salen de tu máquina. No hay servidor, no hay telemetría, no hay analytics. El modelo de IA se descarga una sola vez y listo.


Si te resulta útil, una estrellita en el repo ayuda un montón 😁

Pixora Logo

Pixora

Local-first image processing. No cloud. No account.



🇺🇸 English  | 
🇪🇸 Español  | 
🇧🇷 Português



MIT License
Platforms
Built with Tauri




Pixora is a free, open-source desktop app for image processing. Convert formats, resize, remove backgrounds with AI, and strip metadata — all 100% locally on your machine, with no internet required after setup.

app.mp4

Built by Norberto Krucheski.


Download

Installers are automatically built for every release via GitHub Actions.






















Platform Download
Windows ⬇ Download for Windows (.exe)

macOS (Apple Silicon M1 or higher)
⬇ Download for macOS (.dmg)
Linux ⬇ Download for Linux (.AppImage / .deb)

Just download, install, and run — no account, no setup, no cloud.


Features


























Feature Details
Format Conversion Convert between WebP, JPEG, and PNG
Quality Control Adjustable quality slider (1–100%)
Smart Resize 10 built-in presets (hero, blog, avatar, 4K…) + custom dimensions. Aspect ratio always preserved.
EXIF & Metadata View full metadata (camera, GPS, date, exposure…) and strip





Top comments (0)