BananaPolish is a Next.js app for batch restoration of old photos using Gemini image models.
Upload one ZIP file of images, run restoration in parallel, review each output, and download a final ZIP.
- Batch ZIP upload with nested folder support
- Parallel image processing with retry handling for rate limits
- Review flow (accept/reject per image) with targeted reprocessing
- Live progress updates over Server-Sent Events (SSE)
- Download package modes:
both: repaired image plus original copy (_originalsuffix)repaired-only: repaired image only, fallback to original if missing
- Node.js 20+
- npm 10+
- A Gemini API key (
GOOGLE_API_KEYorGEMINI_API_KEY)
npm install
cp .env.example .env.localOn Windows PowerShell, use copy .env.example .env.local.
Set GOOGLE_API_KEY in .env.local, then run:
npm run devOpen http://localhost:3000.
- One
.zipfile per job - Image types:
.jpg,.jpeg,.png,.webp,.gif,.bmp,.tiff,.tif
npm run dev: start local development servernpm run build: production buildnpm run start: run production servernpm run lint: run ESLintnpm run typecheck: run TypeScript checknpm run check: lint + typecheck + build
- Uploaded and generated files are stored under your OS temp directory in
bananapolish/<jobId>. - In-memory job metadata is process-local and resets when the server restarts.
- Jobs older than 24 hours are cleaned up automatically.
Please read CONTRIBUTING.md before opening a pull request.
This project is licensed under the MIT License. See LICENSE.

