Featured Project
🎨

Vora

Mac, Windows, Linux용 Photoshop급 AI 이미지 에디터 데스크톱 앱

TypeScript Tauri React Big-LaMa Rust Python
18+
Tools
3
Platforms
MIT
Open Source

Overview

Vora는 Mac, Windows, Linux를 모두 지원하는 크로스플랫폼 AI 이미지 편집 데스크톱 앱입니다. Tauri로 단일 바이너리를 빌드해 각 OS 네이티브 인스톨러(.dmg / .exe / .deb / .rpm)로 배포하며, 설치 후에는 인터넷 연결 없이도 모든 기능이 동작합니다. 작업물이 외부 서버로 전송되지 않아 민감한 이미지 작업에도 안심하고 쓸 수 있습니다.

기존 이미지 편집 도구들은 비싸거나, 복잡하거나, 브라우저 한계에 갇혀 있습니다. Photoshop은 월 구독료가 부담되고, GIMP는 무료지만 학습 곡선이 가파르며, 웹 기반 에디터는 파일 크기·오프라인·파일 시스템 접근에서 제약이 큽니다. Vora는 "네이티브 앱의 성능과 파일 시스템 자유도 + Photoshop급 편집 경험"을 목표로 직접 만든 결과물입니다.

Big-LaMa 모델을 앱 내부에서 로컬로 실행해 이미지의 불필요한 부분을 자연스럽게 제거합니다. 처음 AI 기능을 쓸 때 필요한 Python 런타임과 패키지는 앱이 자기 디렉토리에 자동으로 설치합니다 — 관리자 권한이 필요 없고, 앱을 지우면 전부 깨끗이 제거됩니다. 자동 업데이트도 내장되어 있어 릴리스가 나오면 그 자리에서 인스톨됩니다.

레이어 시스템, 레이어 마스크, 조정 레이어, 12가지 블렌드 모드, 5가지 레이어 효과를 모두 구현했습니다. 클론 스탬프, 힐링 브러시, 베지어 패스 같은 정밀 편집 도구부터 자동 보정, 레벨, 커브, 색조/채도까지 18가지 이상의 도구를 제공하며, 모두 비파괴 방식으로 동작합니다. `.vora` 프로젝트 파일로 전체 작업물(페이지·레이어 포함)을 단일 JSON에 저장하고, PNG·JPG·WebP·PDF·PPTX(편집 가능한 텍스트)로 내보낼 수 있습니다.

Key Features

🖌️

AI 인페인팅

Big-LaMa 모델로 이미지의 원하지 않는 부분을 자연스럽게 제거합니다. 영역을 선택하면 주변 컨텍스트를 분석하여 자연스러운 결과물을 생성합니다. 복잡한 텍스처나 패턴도 정확하게 재현하여 편집 흔적이 남지 않습니다.

💾

.vora 프로젝트 파일

여러 페이지와 모든 레이어, 마스크, 조정 레이어를 단일 JSON 프로젝트 파일(`.vora`)에 저장합니다. 작업 중간에 저장하고 나중에 그대로 이어서 편집할 수 있으며, 파일 하나로 전체 작업물을 백업하거나 다른 기기로 옮길 수 있습니다.

📑

레이어 시스템

포토샵과 유사한 레이어 관리 시스템을 구현했습니다. 레이어 순서 변경, 불투명도 조절, 블렌드 모드, 레이어 그룹을 지원합니다. 드래그 앤 드롭으로 직관적인 레이어 관리가 가능합니다.

🎭

마스크 & 조정 레이어

비파괴 편집을 위한 레이어 마스크와 조정 레이어를 제공합니다. 원본 이미지를 보존하면서 밝기, 대비, 색상 균형, 커브 등 다양한 효과를 적용할 수 있습니다. 언제든 수정하거나 되돌릴 수 있습니다.

✏️

드로잉 도구

클론 스탬프, 힐링 브러시, 베지어 패스 등 정밀한 수동 편집 도구를 제공합니다. 압력 감지 태블릿을 지원하며, 브러시 크기와 경도를 세밀하게 조절할 수 있습니다.

📤

멀티 포맷 내보내기

PNG, JPG, WebP, 멀티페이지 PDF, 편집 가능한 텍스트가 포함된 PPTX까지 다양한 포맷으로 내보낼 수 있습니다. 현재 페이지·선택 페이지·전체 페이지 단위의 배치 내보내기와 1×–8× 스케일 옵션을 지원합니다.

Technical Architecture

Tauri 셸(Rust) 안에 React UI와 Python AI 프로세스를 함께 묶은 단일 바이너리 구조입니다. 편집 UI는 웹뷰에서 돌고, 무거운 AI 연산은 앱이 로컬에서 실행하는 Python 워커로 IPC를 통해 전달됩니다. 네트워크 연결 없이 앱 안에서 모든 파이프라인이 완결됩니다.
🖥️ Frontend
TypeScript React Canvas API Vite

복잡한 캔버스 조작과 상태 관리를 위해 TypeScript + React + Canvas API 조합을 사용했습니다. 레이어 트리 상태는 불변 자료구조로 관리하며, 변경 감지 기반 증분 렌더링으로 대형 이미지에서도 반응성을 유지합니다.

🦀 Shell & IPC
Tauri Rust Auto-update

Tauri로 Rust 기반 네이티브 셸을 구성해 파일 시스템·프로젝트 저장·자동 업데이트·크로스플랫폼 빌드를 처리합니다. 웹뷰와 Python AI 프로세스 사이의 IPC도 Rust 레이어에서 중개합니다.

🤖 Local AI
Python Big-LaMa PyTorch

Big-LaMa 인페인팅을 로컬 Python 프로세스에서 실행합니다. 첫 AI 기능 사용 시 앱이 자기 디렉토리에 Python과 필요한 패키지를 자동 설치하고, 이후엔 외부 네트워크 호출 없이 동작합니다. 관리자 권한이 필요 없으며, 앱 삭제 시 전부 함께 제거됩니다.

Challenges & Solutions

!

Python 런타임과 AI 모델 번들링

Big-LaMa 모델과 PyTorch를 앱 설치 파일에 그대로 포함하면 인스톨러 크기가 수 GB로 치솟고, 대부분의 사용자에게는 첫 실행 전에 불필요합니다. 동시에 "사용자에게 Python을 별도로 깔게 하는 것"은 데스크톱 앱 UX로 용납되지 않았습니다.

지연 설치 방식과 앱 전용 Python 샌드박스

인스톨러에는 Python 런타임만 번들하고, AI 패키지·모델은 사용자가 처음 AI 기능을 쓸 때 앱이 자기 디렉토리 안에 자동 설치하도록 했습니다. 관리자 권한이 필요 없고, 앱을 삭제하면 모든 AI 자산도 함께 지워집니다. 기본 설치 크기는 가볍게 유지하면서, AI를 쓰는 사용자만 비용을 부담하는 구조입니다.

!

3개 OS × 2개 아키텍처 크로스플랫폼 빌드

macOS(Intel + Apple Silicon), Windows x64, Linux(.deb / .rpm)까지 하나의 코드베이스로 모두 내보내야 했습니다. 네이티브 서명·노타라이제이션·인스톨러 포맷이 각 OS마다 다르고, Python 번들 경로도 다 달라서 플랫폼별 엣지 케이스가 끝없이 튀어나왔습니다.

Tauri + GitHub Actions 기반 매트릭스 빌드

Tauri의 번들러가 각 OS 네이티브 인스톨러를 직접 만들도록 맡기고, GitHub Actions 매트릭스로 릴리스마다 Universal DMG / MSI / DEB / RPM을 자동 생성합니다. Python 번들 경로는 OS별 헬퍼 모듈로 추상화해 한 곳에서 관리하고, 자동 업데이트는 Tauri updater로 일원화했습니다.

!

복잡한 레이어 시스템 구현

이미지·텍스트·도형·드로잉·조정 레이어·그룹이 섞이고, 마스크·12가지 블렌드 모드·5가지 레이어 효과가 동시에 작동하는 Photoshop급 시스템을 만드는 것은 상태 관리와 렌더링 양 측면에서 큰 도전이었습니다.

커스텀 렌더링 파이프라인과 효율적 상태 관리

불변 데이터 구조와 구조적 공유를 활용한 상태 관리 시스템을 설계했습니다. 렌더링 파이프라인을 레이어 트리 구조에 최적화하고, 변경 감지를 통해 필요한 레이어만 다시 합성하는 증분 렌더링 방식을 도입해 대형 이미지에서도 반응성을 유지합니다.

Related Projects

더 많은 프로젝트를 확인하세요

← 포트폴리오로 돌아가기