{"id":48367208,"url":"https://github.com/rishn/matte-api","last_synced_at":"2026-04-05T15:03:11.890Z","repository":{"id":348227003,"uuid":"1196620961","full_name":"rishn/Matte-API","owner":"rishn","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-31T09:31:02.000Z","size":64,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-31T11:03:51.999Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rishn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-30T21:57:10.000Z","updated_at":"2026-03-31T09:31:06.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rishn/Matte-API","commit_stats":null,"previous_names":["rishn/matte-api"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/rishn/Matte-API","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishn%2FMatte-API","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishn%2FMatte-API/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishn%2FMatte-API/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishn%2FMatte-API/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rishn","download_url":"https://codeload.github.com/rishn/Matte-API/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rishn%2FMatte-API/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31439444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T13:13:19.330Z","status":"ssl_error","status_checked_at":"2026-04-05T13:13:17.778Z","response_time":75,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-05T15:02:44.256Z","updated_at":"2026-04-05T15:03:11.880Z","avatar_url":"https://github.com/rishn.png","language":"Python","readme":"# \u003cimg src=\"https://github.com/rishn/Matte/blob/main/assets/Matte.png\" alt=\"Matte logo\" width=\"22\" height=\"22\" /\u003e Matte - API\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/rishn/Matte/blob/main/assets/Expanse.png\" alt=\"Expanse\" width=\"60%\" height=\"60%\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"React\" src=\"https://img.shields.io/badge/React-61DAFB?logo=react\u0026logoColor=black\" /\u003e\n  \u003cimg alt=\"Vite\" src=\"https://img.shields.io/badge/Vite-646CFF?logo=vite\u0026logoColor=white\" /\u003e\n  \u003cimg alt=\"Konva\" src=\"https://img.shields.io/badge/Konva-793EF7?logo=konva\u0026logoColor=white\" /\u003e\n  \u003cimg alt=\"Zustand\" src=\"https://img.shields.io/badge/Zustand-000000?logo=data:image/png;base64,iVBORw0KGgo\" /\u003e\n  \u003cimg alt=\"FastAPI\" src=\"https://img.shields.io/badge/FastAPI-005571?logo=fastapi\u0026logoColor=white\" /\u003e\n  \u003cimg alt=\"Python\" src=\"https://img.shields.io/badge/Python-3776AB?logo=python\u0026logoColor=white\" /\u003e\n  \u003cimg alt=\"PyTorch\" src=\"https://img.shields.io/badge/PyTorch-EE4C2C?logo=pytorch\u0026logoColor=white\" /\u003e\n  \u003cimg alt=\"SAM\" src=\"https://img.shields.io/badge/Segment%20Anything-model?color=8b5cf6\" /\u003e\n  \u003cimg alt=\"U2Net\" src=\"https://img.shields.io/badge/U2-Net-model?color=7c3aed\" /\u003e\n  \u003cimg alt=\"GitHub Actions\" src=\"https://img.shields.io/badge/GitHub%20Actions-2088FF?logo=githubactions\u0026logoColor=white\" /\u003e\n  \u003cimg alt=\"Docker\" src=\"https://img.shields.io/badge/Docker-2496ED?logo=docker\u0026logoColor=white\" /\u003e\n  \u003cimg alt=\"Render\" src=\"https://img.shields.io/badge/Render-20232A?logo=render\u0026logoColor=white\" /\u003e\n  \u003cimg alt=\"Firebase\" src=\"https://img.shields.io/badge/Firebase-FFCA28?logo=firebase\u0026logoColor=black\" /\u003e\n  \u003cimg alt=\"Supabase\" src=\"https://img.shields.io/badge/Supabase-3ECF8E?logo=supabase\u0026logoColor=white\" /\u003e\n\u003c/p\u003e\n\n**Matte,** a professional-grade photo editing web application with **AI-powered background removal, segmentation** and comprehensive photo editing features. Built with zero-cost deployment in mind using open-source models. This repository contains the backend workspace of the application. [Visit the frontend workspace.](https://github.com/rishn/Matte)\n\n![Editor](https://github.com/rishn/Matte/blob/main/assets/Editor.png)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://matte-educify-app.web.app\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Open%20Deployed%20Site-Visit-blue?style=for-the-badge\" alt=\"Open deployed site\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## Demos\n\n- Desktop Demo \n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://drive.google.com/file/d/1nsE5mgC_IrErSmwBttrUX9DTZVUw6cI1/view?usp=sharing\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\n    \u003cimg src=\"https://github.com/user-attachments/assets/8574a4a7-40a0-40f9-bde4-b95663f55779\" alt=\"Desktop Demo\" width=\"600\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## Features\n\n### AI-Powered Tools\n- **Automatic Background Removal**: U²-Net for fast, accurate salient object detection\n- **Magic Wand Tool**: SAM (Segment Anything Model) for interactive segmentation with point/box prompts\n- **Smart Masking**: Morphological refinement and feathering for professional results\n\n### Photo Editing\n- **Adjustments**: Brightness, Contrast, Exposure, Saturation\n- **Color Grading**: Temperature, Tint controls\n- **Tone Controls**: Highlights, Shadows\n- **Effects**: Vignette, Sharpness\n- **Preset Filters**: Vintage, Cinematic, B\u0026W, Warm, Cool, Dramatic, Soft, Vivid, Sepia, Fade\n\n### Photoshop-like Interface\n- Professional dark theme UI\n- Tool panel with selection, magic wand, eraser, move, and box select tools\n- Real-time canvas editing with Konva\n- Properties panel with collapsible sections\n- Layers panel for organization\n\n## Screenshots (Edited with Matte!)\n\n- Projects Page\n![Projects](https://github.com/rishn/Matte/blob/main/assets/Projects.png)\n\n- Using Crop Tool\n![Crop Tool](https://github.com/rishn/Matte/blob/main/assets/CropTool.png)\n\n- Sign Up Page\n![Sign Up](https://github.com/rishn/Matte/blob/main/assets/SignUp.png)\n\n- On Mobile\n   \u003ctable\u003e\n      \u003ctr\u003e\n         \u003ctd align=\"center\"\u003e\n            \u003cimg src=\"https://github.com/rishn/Matte/blob/main/assets/MobileEditor.png\" alt=\"Mobile Editor\" width=\"300\" /\u003e\n            \u003cdiv style=\"font-size:0.9em;color:#666;margin-top:6px;\"\u003eEditor\u003c/div\u003e\n         \u003c/td\u003e\n         \u003ctd align=\"center\"\u003e\n            \u003cimg src=\"https://github.com/rishn/Matte/blob/main/assets/MobileProjects.png\" alt=\"Mobile Projects\" width=\"300\" /\u003e\n            \u003cdiv style=\"font-size:0.9em;color:#666;margin-top:6px;\"\u003eProjects\u003c/div\u003e\n         \u003c/td\u003e\n      \u003c/tr\u003e\n   \u003c/table\u003e\n\n## Zero-Cost Setup\n\nThis application is designed to run **completely free** using:\n- **Local CPU inference** (no cloud GPU costs)\n- **Open-source models** (U²-Net, SAM)\n- **Self-hosted backend** (FastAPI)\n- **Modern frontend** (React + Vite)\n- **Optional authentication and verification** (Firebase Auth, Firestore)\n- **Optional object storage** (Supabase Storage) for storing full-resolution project images and reducing Firestore document sizes\n\n## Prerequisites\n\n- **Python 3.10+** with pip\n- **Node.js 16+** with npm\n- **4GB+ RAM** (8GB+ recommended for SAM)\n- **Git**\n\n## Quick Start\n\n### 1. Backend Setup\n\n```powershell\n# Clone the backend repo\ngit clone https://github.com/rishn/Matte-API.git\n\n# Navigate to backend\ncd PhotoStudio\\backend\n\n# Create virtual environment\npython -m venv venv\n\n# Activate virtual environment\n.\\venv\\Scripts\\Activate.ps1\n\n# Install dependencies\npip install --upgrade pip\npip install -r requirements.txt\n```\n\n### 2. Frontend Setup\n\n```powershell\n# Clone the frontend repo\ngit clone https://github.com/rishn/Matte-UI.git\n\n# Navigate to frontend\ncd PhotoStudio\\frontend\n\n# Install dependencies\nnpm install\n```\n\n### 3. Download Model Weights\n\nModel weight files (place them under `backend/models/weights` or where your handlers expect them):\n\n**U²-Net Weights:**  (U2NetP) — recommended for CPU inference\n```powershell\nVisit: https://drive.google.com/file/d/1rbSTGKAE-MTxBYHd-51l2hMOQPT_7EPy/view\nDownload to: .\\backend\\models\\weights\\u2netp.pth\n```\n\n**SAM Weights (optional, for magic wand tool):** (SAM ViT-B) — optional for interactive segmentation\n```powershell\n# Download SAM ViT-B (smallest, fastest for CPU)\nVisit: https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth\nDownload to: .\\backend\\models\\weights\\sam_vit_b_01ec64.pth\n```\n\n## 4. Run and Test\n\n1. **API**\n   ```powershell\n   # Navigate to backend\n   cd PhotoStudio\\backend\n\n   # Start backend server\n   # The backend exposes API routes used by the frontend (upload, signed-url, segmentation, etc.).\n   # You can run directly with Python or via Uvicorn:\n   python app.py # (or) uvicorn app:app --reload --host 0.0.0.0 --port 8000\n   ```\n   \n   Backend will run at: **http://localhost:8000**\n\n2. **UI**\n   ```powershell\n   # Open new terminal and navigate to frontend\n   cd PhotoStudio\\frontend\n\n   # Start development server\n   npm run dev\n   ```\n\n   Frontend will run at: **http://localhost:3000**\n\n3. The application is ready to test.\n\n## Usage Guide\n\n### Basic Workflow\n\n1. **Open Image**: Click \"Open\" button in header to load an image\n2. **Auto Remove Background**: \n   - Tool: Select \"Magic Wand\" tool\n   - Click on subject to segment automatically\n   - Uses U²-Net for fast background removal\n\n3. **Interactive Selection**:\n   - Tool: \"Box Select\" for box-based segmentation\n   - Click points on object for SAM-based selection\n   - Green points = foreground, Red points = background\n\n4. **Apply Adjustments**:\n   - Open Properties panel\n   - Use sliders for brightness, contrast, etc.\n   - Changes apply in real-time\n\n5. **Apply Filters**:\n   - Choose from preset filters (Vintage, Cinematic, etc.)\n   - Click to apply instantly\n\n6. **Export**: Click \"Export\" to download edited image\n\n### Tool Descriptions\n\n| Tool | Icon | Function |\n|------|------|----------|\n| Remove Background | 🖼️➖ | Remove background using AI |\n| Magic Wand | 🪄 | AI-powered object selection |\n| Eraser | 🧽 | Remove parts of image |\n| Pen | ✏️ | Add annotations and edits to images |\n| Box Select | ⬜ | Rectangle selection for SAM |\n\n## API Endpoints\n\n### Background Removal\n- `POST /api/segment/auto` - Automatic segmentation (U²-Net) (multipart form-data file upload)\n- `POST /api/segment/interactive` - Interactive segmentation (SAM) (JSON body: `{ image, mode, points?, box? }`)\n\n### Storage \u0026 Upload\n- `POST /api/upload` - Upload an image blob to server-side storage (Supabase). Expects `Authorization: Bearer \u003cFirebase ID token\u003e` and returns a `storagePath` plus a signed download URL.\n- `GET /api/signed-url?path=\u003cstoragePath\u003e` - Resolve a stored path to a temporary signed download URL (requires auth).\n- `POST /api/delete?path=\u003cstoragePath\u003e` - Delete previously uploaded storage objects (requires auth).\n\n### Misc\n- `GET /api/check-email-domain?email=...` - (Optional) Best-effort check to verify the email's domain has MX/A records to prevent creating accounts for clearly bogus domains.\n\n### Photo Editing\n- `POST /api/adjust` - Apply adjustments (JSON body: `{ image, adjustments }`)\n- `POST /api/filter` - Apply preset filter (JSON body: `{ image, preset }`)\n- `GET /api/filters/list` - Get/list available filters\n\n\n## Frontend dependencies (where to find them)\n\nAll Node dependencies for the UI are declared in `frontend/package.json`. Key packages used in the UI include:\n\n- `react`, `react-dom` — React\n- `vite`, `@vitejs/plugin-react` — dev server/build\n- `konva`, `react-konva` — canvas and drawing\n- `axios` — HTTP client\n- `zustand` — state management\n- `lucide-react` — icons\n- `react-dropzone` — file drop handling\n\n## Configuration\n\n### GPU Acceleration (Optional)\n\nIf you have a CUDA-capable GPU:\n\n```powershell\n# Uninstall CPU PyTorch\npip uninstall torch torchvision\n\n# Install GPU PyTorch\npip install torch torchvision --index-url https://download.pytorch.org/whl/cu118\n```\n\n## Project Structure\n\n```\nMatte/\n├── backend/\n│   ├── app.py                         # FastAPI server (API routes + Firebase Admin)\n|   ├── .env\n│   ├── models/\n│   │   ├── u2net_handler.py           # U²-Net wrapper\n│   │   └── sam_handler.py             # SAM wrapper\n│   ├── utils/\n│   │   └── image_processing.py        # Photo editing functions\n│   └── requirements.txt\n├── frontend/\n│   ├── index.html\n│   ├── package.json\n│   ├── vite.config.js\n│   ├── firebase.json                  # Firebase hosting / config (optional)\n│   ├── .firebaserc                    # Firebase CLI project alias (optional)\n│   ├── .env                           # Vite env (VITE_FIREBASE_*, VITE_API_URL, etc.)\n│   ├── src/\n│   │   ├── firebaseConfig.js          # Firebase client init used by the UI\n│   │   ├── components/                # React components (Header, Canvas, Panels, etc.)\n│   │   ├── services/                  # API client + save/upload helpers\n│   │   ├── store/                     # Zustand state (editor, toasts, history)\n│   │   ├── utils/                     # helpers (authErrors, adjustments, compositor)\n│   │   └── App.jsx\n│   └── package.json\n│   └── public/\n├── U-2-Net/                           # Cloned repo (gitignored)\n└── segment-anything/                  # Cloned repo (gitignored)\n```\n\n## Troubleshooting\n\n- Start the backend first so the frontend proxy can reach `/api`.\n- If you change Python dependencies, re-create the venv and `pip install -r requirements.txt`.\n- To test CORS or proxy issues, hit `http://localhost:8000/` (health endpoint) and `http://localhost:3000/` (frontend).\n\n### Models Not Loading\n- Ensure weights are downloaded to correct directories\n- Check console logs for specific errors\n- Models will fall back to traditional CV methods if unavailable\n\n### Slow Performance\n- Use lighter model variants (U2NetP, SAM ViT-B)\n- Reduce input image size\n- Consider ONNX export for production use\n\n### CORS Errors\n- Backend must be running on port 8000\n- Frontend on port 3000\n- Check CORS middleware configuration in `app.py`\n\n### Debug / Development flags\n\n- `DEBUG` (env var): when set to `1`, `true`, or `yes` (case-insensitive) the backend will surface more detailed error information and may re-raise certain exceptions to help debugging. For example, upload and signed-url endpoints include more descriptive errors in responses when `DEBUG` is enabled. Do not enable `DEBUG` in production.\n\n   ```powershell\n   # .env (backend)\n   DEBUG=true #development\n   ```\n\n## Authentication and Storage (optional)\n### Firebase — setup for Projects and Auth\n\nIf you enable Firebase integration for user login and cloud projects, create a Firebase project and set the following Vite environment variables in a local `.env` or `.env.local` file at the `frontend` folder root:\n\n```powershell\n# .env (frontend)\nVITE_FIREBASE_API_KEY=your_api_key\nVITE_FIREBASE_AUTH_DOMAIN=your_auth_domain\nVITE_FIREBASE_PROJECT_ID=your_project_id\nVITE_FIREBASE_MESSAGING_SENDER_ID=your_messaging_sender_id\nVITE_FIREBASE_APP_ID=your_app_id\nVITE_FIREBASE_CONTINUE_URL=http://localhost:3000\nVITE_API_URL=http://localhost:8000/api\n```\n\nNotes:\n- The frontend scaffold uses **Email/Password** authentication via **Firebase Authentication** (with email verification).\n- The Projects feature saves small, compressed thumbnails directly inside **Firestore** documents as base64 (`thumbnailBase64`) to avoid requiring Firebase Storage or paid plans. Small thumbnails (suggested max 256px, JPEG quality ~0.7) are also stored to stay well under Firestore's 1 MiB document size limit.\n\n### Supabase (recommended for storing full-resolution images)\n\nThis project uses Supabase Storage to hold full-resolution project images to avoid saving large base64 blobs in Firestore documents (which can exceed Firestore's 1 MiB limit). If you enable Supabase, set the following environment variables for the backend (or your deployment):\n\n```powershell\n# .env (backend)\nSUPABASE_URL=https://xyzcompany.supabase.co\nSUPABASE_SERVICE_ROLE_KEY=your_service_role_key\nSUPABASE_BUCKET=projects\n```\n\nNotes:\n- The backend uses the Supabase service role key to upload/delete objects on behalf of authenticated users and to create signed URLs. Keep this key secret (server-side only).\n- The frontend will call backend endpoints (`/api/upload`, `/api/signed-url`, `/api/delete`) which perform token verification and map storage operations to the requesting user.\n\n### Firebase Service Account (admin)\n\nThe backend uses the Firebase Admin SDK to verify Firebase ID tokens and perform privileged server-side operations (for example, `verify_id_token` to authenticate uploads, generate signed URLs, or check ownership of objects). The Admin SDK requires service-account credentials so the server can safely perform these admin-only checks.\n\nWhere to get the service account secrets\n\n- Firebase Console: Project Settings → Service Accounts → Generate new private key (this downloads the JSON key file).\n- Google Cloud Console: IAM \u0026 Admin → Service Accounts → Create/Manage keys → Download JSON key. Both sources produce the same JSON credentials the Admin SDK accepts.\n\nYou can supply the service account credentials in several ways; the backend supports multiple formats for convenience:\n\n- Provide the full service account JSON via an environment variable:\n   ```powershell\n   # .env (backend)\n   FIREBASE_SERVICE_ACCOUNT_JSON # the full JSON string (keep this secret on the server).\n   ```\n\n- Point to a downloaded JSON file:\n   ```powershell\n   # .env (backend)\n   FIREBASE_SERVICE_ACCOUNT_JSON=C:\\path\\to\\service-account.json\n   ```\n\n- Provide individual fields as environment variables (for ease during hosting):\n   ```powershell\n   # .env (backend)\n   FIREBASE_PROJECT_ID=your_project_id\n   FIREBASE_PRIVATE_KEY=\"-----BEGIN PRIVATE KEY-----\\n---\\n-----END PRIVATE KEY-----\\n\" # ensure line breaks are preserved; replace literal newlines with `\\n` if necessary\n   FIREBASE_CLIENT_EMAIL=your_adminsdk_username@your_project_id.iam.gserviceaccount.com\n   FIREBASE_PRIVATE_KEY_ID=your_private_key\n   FIREBASE_CLIENT_ID=your_client_id\n   FIREBASE_CLIENT_X509_CERT_URL=https://www.googleapis.com/robot/v1/metadata/x509/your_client_email\n   ```\n\n- Or export a downloaded JSON into an env var (beware of quoting/newlines):\n\n   ```powershell\n   $svc = Get-Content 'path\\to\\service-account.json' -Raw\n   [Environment]::SetEnvironmentVariable('FIREBASE_SERVICE_ACCOUNT_JSON', $svc, 'User')\n   ```\n\nKeep the service account secret server-side — do not expose it to the frontend.\n\n### Email Domain Validation (optional)\n\nFor additional protection against account abuse, the backend exposes a best-effort `GET /api/check-email-domain` endpoint which attempts to resolve MX records for the provided email domain (uses `dnspython` when available, otherwise falls back to an A/AAAA lookup). This helps block obviously bogus emails at signup.\n\nTo enable MX checks (recommended), install `dnspython` in your backend environment:\n\n```powershell\ncd PhotoStudio/backend\npip install dnspython\n```\n\nThe frontend uses this endpoint before attempting signup; the check is best-effort and will not block signup on transient network/DNS errors by default.\n\n## Deployment\n\n- **Frontend — Firebase Hosting + GitHub Actions:** \n   - The frontend is hosted on Firebase Hosting. In CI the workflow creates a `.env.production` (or sets build-time secrets) containing `VITE_API_URL` and `VITE_USE_SAM` before running `npm run build` so Vite embeds the build-time flags. Changing any `VITE_` environment variables requires rebuilding the frontend. \n   - A sample GitHub Actions workflow has been set up at `frontend/.github/workflows/firebase-hosting.yml`, **to enable automatic build and deploy on repo updates.** The workflow requires the repository secrets `FIREBASE_TOKEN`, `VITE_API_URL`, and `VITE_USE_SAM` to be configured.\n\n- **Backend — Render:** \n   - The backend is hosted as a Render Web Service (or similar). Server environment variables include `SUPABASE_URL`, `SUPABASE_SERVICE_ROLE_KEY`, `FIREBASE_*`, `USE_SAM`, and `MODEL_CACHE_DIR`. \n   - For reliable model availability, U2Net is baked into the image at build time when `BUILD_MODELS=true` and `U2NET_DOWNLOAD_URL` are used, or a persistent disk is attached and mounted at `/models` so weights persist across instances. The `docker-entrypoint.sh` script begins with a proper shebang (`#!/usr/bin/env bash`) on the first line and uses LF line endings; the image should be rebuilt after any entrypoint changes.\n\n\n## Roadmap\n\n- [X] Filters + custom adjustments utility\n- [X] History/undo system\n- [X] Multi-layer compositing\n- [X] Authentication\n- [X] Save and work with multiple projects\n- [ ] Explore other AI features\n\n## Acknowledgments\n\n- [U²-Net](https://github.com/NathanUA/U-2-Net) by Xuebin Qin et al.\n- [Segment Anything](https://github.com/facebookresearch/segment-anything) by Meta AI\n\n\n**Built using zero-cost, open-source tools**\n\n## Notes\n\n** *Subject segmentation (subject select) is disabled in hosted application, to deploy the remaining features smoothly using available free hosting services*","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frishn%2Fmatte-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frishn%2Fmatte-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frishn%2Fmatte-api/lists"}