immich-drop: A Zero-Login Web App for Collecting Photos to Immich

Summary
immich-drop is a lightweight web application designed to simplify collecting photos and videos from various sources directly into your Immich server. It provides a secure, zero-login interface for guests to upload media via invite links, ensuring privacy and efficient organization. This tool is ideal for anyone looking to gather media from friends, family, or events without requiring them to have an Immich account.
Repository Info
Tags
Click on any tag to explore related repositories
Introduction
immich-drop is a lightweight, zero-login web application designed to simplify the process of collecting photos and videos from anyone directly into your Immich server. Built with FastAPI and Uvicorn on the backend, and static HTML/JS (Tailwind) for the frontend, it offers a secure and private way to gather media. Key features include public-by-URL invite links, optional password protection, automatic album assignment, robust duplicate prevention, and support for chunked uploads for large files. It also boasts a fully responsive UI with dark mode, ensuring a great experience across all devices.
For more details, visit the official GitHub repository: Nasogaa/immich-drop.
Installation
The recommended way to deploy immich-drop is using Docker Compose, which allows you to configure all settings directly within the docker-compose.yml file, eliminating the need for a separate .env file in production.
Here's a quick start guide using docker-compose.yml:
version: "3.9"
services:
immich-drop:
image: ghcr.io/nasogaa/immich-drop:latest
pull_policy: always
container_name: immich-drop
restart: unless-stopped
# Configure all settings here (no .env required)
environment:
# Immich connection (must include /api)
IMMICH_BASE_URL: https://immich.example.com/api
IMMICH_API_KEY: ${IMMICH_API_KEY}
# Optional behavior
IMMICH_ALBUM_NAME: dead-drop
PUBLIC_UPLOAD_PAGE_ENABLED: "false" # keep disabled by default
PUBLIC_BASE_URL: https://drop.example.com
# Large files: chunked uploads (bypass 100MB proxy limits)
CHUNKED_UPLOADS_ENABLED: "false" # enable chunked uploads
CHUNK_SIZE_MB: "95" # per-chunk size (MB)
# App internals
SESSION_SECRET: ${SESSION_SECRET}
# Expose the app on the host
ports:
- 8080:8080
# Persist local dedupe cache (state.db) across restarts
volumes:
- immich_drop_data:/data
# Simple healthcheck
healthcheck:
test: ["CMD-SHELL", "python - <<'PY'\nimport os,urllib.request,sys; url=f\"http://127.0.0.1:{os.getenv('PORT','8080')}/\";\ntry: urllib.request.urlopen(url, timeout=3); sys.exit(0)\nexcept Exception: sys.exit(1)\nPY"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
volumes:
immich_drop_data:
To run it, use the following CLI commands:
docker compose pull
docker compose up -d
For local development, you can use a .env file as described in the repository's documentation.
Examples
immich-drop offers a straightforward usage flow:
- Admin Workflow: Log in to the admin panel, navigate to the menu, and create an invite link. You can configure options such as one-time use, expiry dates, password protection, and assignment to a specific Immich album. Once created, share the link or its QR code with your intended recipients.
- Guest Workflow: Guests simply open the provided invite link in their browser. They can then drag and drop files or select them from their device. The application displays real-time upload progress and results, ensuring a smooth experience without requiring any login.
- Optional Public Uploader: For general collection, you can enable a public uploader page at the root URL (
/) by settingPUBLIC_UPLOAD_PAGE_ENABLED=trueand optionally definingIMMICH_ALBUM_NAMEfor automatic organization.
Why Use immich-drop?
immich-drop stands out as an excellent solution for media collection due to several compelling reasons:
- Effortless Media Collection: Provides a simple, zero-login interface for anyone to upload photos and videos directly to your Immich server, making it ideal for events, family sharing, or public submissions.
- Privacy and Security: Keeps your Immich API key server-side, never exposes server media to the browser, and offers public-by-URL invite links that can be password-protected, ensuring controlled access.
- Robust Features: Includes essential functionalities like duplicate prevention (local SHA-1 cache and optional Immich bulk-check), support for large files via chunked uploads, and automatic album assignment.
- User-Friendly Experience: Features a fully responsive UI with mobile-safe file pickers, dark mode support, and a progress queue with WebSocket updates and retry functionality for failed uploads.
- Seamless Immich Integration: Designed specifically for Immich, it ensures smooth asset ingestion, preserving metadata like EXIF timestamps and allowing for efficient organization within your Immich library.
Links
- GitHub Repository: https://github.com/Nasogaa/immich-drop
- License: MIT License