diff --git a/README.md b/README.md index e69de29..ce4585d 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,78 @@ +# RecipesCam + +RecipesCam is a camera and photo-editing app built around **recipes** — reusable +looks that carry a film simulation plus a full set of adjustments. You shoot or +open a photo, dial in a look, and keep it as a recipe you can apply again, share +as a `.recipe` file, or save to your account. + +It ships twice from one repository: a **React Native (Expo) app** for iOS and +Android, and a **self-contained web build** under `docker/` that runs the same +render pipeline in the browser. + +## What it does + +- **Shoot with a recipe applied.** Live viewfinder, GPS-tagged captures, and the + recipe baked into the saved file. +- **Film simulations.** Built-in looks — PROVIPES, VELVIPES, CLASSIC CHRIPES, + CLASSIC NEGIPES, ASTIPES, ETERNIPES, ACRIPES, B&W HIGH CONTRAST and the LC + STREETLIFE pair — each with its own grain and tone curve. +- **The full adjustment set.** Exposure, contrast, highlights and shadows, + saturation, colour temperature, clarity, grain, and an HSL mixer with a + colour picker that samples straight off the photo. +- **Geometry.** Crop to a fixed ratio or free-form, quarter turns, and a + straighten ruler, plus printed frames (classic border, retro instant, wall + frame portrait/landscape). +- **Finishing.** Watermark and GPS stamp, EXIF carried through the export, JPEG + written with a proper 300 DPI JFIF header. +- **On-device upscaling.** A Real-ESRGAN pass runs locally when an export asks + for more pixels than the source has — no server sees the photo. +- **Recipes.** Save, favourite, export and import `.recipe` files; the web + build keeps them in your account, the phone build also keeps them on device. + +## The two builds + +| Build | Where | Stack | +| --- | --- | --- | +| iOS / Android | repo root | Expo + React Native, `@shopify/react-native-skia` for the render pipeline, NativeWind for styling | +| Web | `docker/` | Vite + React, CanvasKit (`canvaskit-wasm`) for the same pipeline, Fastify + SQLite API for accounts and recipes | + +The render engine is shared by design: the web build compiles the app's own +`src/utils/*` and type definitions unchanged, with `@shopify/react-native-skia` +aliased to a CanvasKit shim (`docker/frontend/src/engine/skiaShim.ts`). A look +looks the same on both because it is the same code. + +## Running the web build + +```bash +cd docker +cp .env.example .env +docker compose up -d --build +# → http://localhost:8090 +``` + +Photos never leave the browser: grading, framing, watermarking and JPEG +encoding all run in the visitor's tab; the API only stores accounts and recipe +JSON. See `docker/README.md` for the layout and the proxy setup. + +## Running the app + +```bash +npm install +npx expo start # Expo Go / dev client +npx expo run:android # or run:ios for a native build +``` + +## Repository layout + +``` +App.tsx, src/ the Expo app: screens, tool rail, viewfinder, shaders +docker/ the web build (frontend + API + compose file) + frontend/shared/ vendored copies of the app's types and utils + frontend/src/engine/ CanvasKit shim, export engine, super-resolution +docs/ privacy policy +THIRD_PARTY_NOTICES.md licences of the bundled fonts, models and libraries +``` + +## Licence + +See `LICENSE` and `THIRD_PARTY_NOTICES.md`.