Sign inSign up

techbygiusi/picly

By techbygiusi

โ€ขUpdated 20 days ago

Self-hosted image uploader: public upload page, admin gallery, custom branding, SMB backup.

Image
0

73

techbygiusi/picly repository overview

โ Image Uploader

Self-hosted image uploader with a public upload page and a protected admin gallery. Guests upload photos from any phone or browser, no account needed; you collect, view and download everything in one place.

Built for events, teams, clubs and anyone who wants to collect photos without cloud services.

โ Features

  • Public upload page: drag & drop or file picker, multiple files at once, JPG, PNG, HEIC/HEIF (iPhone), WEBP and more, progress bar
  • Admin gallery: fast WebP previews, fullscreen viewer with swipe/keyboard, single download, delete, download all as ZIP
  • Full personalization in the browser: logo (also used as favicon), name, browser tab title, accent color and every text on the upload page
  • Timeline: optional schedule with times that highlights the current point automatically
  • First-run setup: choose admin username and password in the browser, protected by a one-time setup code
  • SMB backup: mirror uploads to a NAS/SMB share, instantly or on a schedule
  • Everything persistent in a single /app/data volume
  • Multi-arch: linux/amd64 and linux/arm64 (e.g. Raspberry Pi 4/5)

โ Quick start

docker run -d --name image-uploader \
  -p 3002:8080 \
  -v ./data:/app/data \
  --restart unless-stopped \
  techbygiusi/picly:latest

Then:

  1. Get the setup code: docker logs image-uploader
  2. Open http://SERVER-IP:3002/admin, enter the code and choose your admin username and password
  3. Personalize everything under Einstellungen
  4. Share http://SERVER-IP:3002/ with your guests

โ Docker Compose

services:
  image-uploader:
    image: techbygiusi/picly:latest
    container_name: image-uploader
    ports:
      - "3002:8080"
    environment:
      MAX_UPLOAD_MB: 25
      MAX_UPLOAD_FILES: 30
    volumes:
      - ./data:/app/data
    restart: unless-stopped

Update to the latest version:

docker compose pull && docker compose up -d

โ Environment variables

VariableDefaultDescription
MAX_UPLOAD_MB50Max size per file in MB
MAX_UPLOAD_FILES30Max files per upload
MAX_PARALLEL_UPLOADS12Parallel upload requests
MIN_FREE_SPACE_MB250Uploads are refused below this free disk space
SETUP_CODEautoFixed setup code instead of a generated one
JWT_SECRETautoSession secret, generated and stored in /app/data if empty
JWT_EXPIRATION24hAdmin session lifetime

โ Data

Everything lives in /app/data: uploads, admin account, settings, logo, timeline, backup config and preview cache. Back up this folder and you have everything.

Reset the admin account (images stay): delete data/admin.json and data/admin.json.bak, then restart the container.

โ Reverse proxy

Works behind Nginx, Caddy, Traefik or Cloudflare Tunnel. Allow large request bodies (e.g. client_max_body_size 512M; in Nginx) and long timeouts for big uploads.

โ License

AGPL-3.0 ยท made by TechByGiusiโ 

Tag summary

Content type

Image

Digest

sha256:0af0e86b0โ€ฆ

Size

73 MB

Last updated

20 days ago

docker pull techbygiusi/picly