Describe the app and the two builds it ships from
The repository root had an empty README: anyone landing on it saw the Expo project and the docker/ web build side by side with nothing saying they are the same product. This is the English description of RecipesCam — what the recipes are, the looks and adjustments, the geometry and finishing tools, and the on-device upscale — plus how the two builds relate and how to run each.
This commit is contained in:
@@ -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`.
|
||||
|
||||
Reference in New Issue
Block a user