WebGallery

A private, self-hosted photo gallery for Android

View the Project on GitHub kiedanski/webgallery

User Guide

Home User Guide Developer Docs

Setup

Connecting to your server

  1. Open WebGallery and you’ll see the setup screen
  2. Enter your Server URL — the base URL of your Tilde instance (e.g., https://photos.example.com)
  3. Enter your Username and Password
  4. Tap Connect — the app tests the connection and starts syncing

Your credentials are encrypted with AES-256-GCM and stored securely on the device.

Initial sync

The first sync downloads thumbnail metadata for your entire library. For a library with ~35,000 photos, this typically takes 2-3 minutes. Thumbnail images then download in the background — you can use the app while this happens.

A notification shows download progress. You can switch to other apps; the sync continues via a foreground service.


Browsing

Photos are organized in a grid by year and month, newest first. Each month section shows the month name and photo/video counts.

The grid adapts to your screen:

Year timeline

Swipe left from the right edge to reveal the year scrubber — a vertical list of all years in your library. Tap any year to jump directly to it. Each year shows how many thumbnails are synced out of the total (e.g., “2,450/2,500”).

Swipe the scrubber right to dismiss it.

Photo viewer

Tap any photo to open the full-screen viewer:

Videos

Tap a video (marked with a play icon) to open the video player. Videos stream directly from your server — no need to download the full file first. Standard controls (play/pause, seek, fullscreen) are provided by Media3.


Organizing

Favorites

Tap the heart icon in the viewer or long-press a photo and select Mark as favorite. Favorites are:

Flagging

Long-press a photo and select Flag for inspection to mark photos that look wrong (gray thumbnails, missing images, etc.). View all flagged photos in Settings > Diagnostics > Flagged images, where each entry shows:

This helps you diagnose sync issues with specific photos.


Editing

All edits go through an offline mutation queue — they work even without connectivity and are pushed to the server on the next sync.

Changing dates

Long-press a photo > Change date > pick a new date. This:

  1. Queues a date change mutation
  2. On sync: downloads the full image, modifies EXIF DateTimeOriginal, uploads back to the server
  3. The server reads the new EXIF date and auto-reorganizes the photo to the correct {year}/{month}/ directory

Editing tags

Long-press a photo > Edit tags > enter comma-separated tags (e.g., “vacation, family, beach”). Tags are stored on the server via WebDAV PROPPATCH and displayed in the photo actions sheet.

Deleting

Long-press a photo > Delete > confirm. The photo:

Queue management

Pending edits show as icon overlays on thumbnails:

The gallery top bar shows “X pending” when mutations are queued.

View and manage the queue in Settings > Diagnostics > Pending changes:

Sync freshness

The queue only flushes when the last sync was less than 10 minutes ago. If the sync is stale, the app automatically syncs first to prevent conflicts, then pushes edits.


Auto-Upload

Setting up watched folders

Go to Settings > Upload > Watched folders and tap + to add a folder:

How it works

  1. A background scanner checks watched folders every 30 minutes for new media files
  2. New files are uploaded to the server’s _inbox/ directory via WebDAV PUT
  3. The server automatically reads EXIF data, organizes photos into {year}/{month}/, and generates thumbnails
  4. If “Delete after upload” is enabled, the local file is deleted after successful upload

Per-folder settings

Each watched folder has its own settings:

Browsing folder contents

Tap any watched folder to browse its contents. The grid shows all media files with upload status overlays:

Manual controls

In the Watched Folders screen:


Settings

Storage

Appearance

Diagnostics

Server


Sync Details

How sync works

WebGallery uses a multi-level incremental sync:

  1. PROPFIND root — one HTTP request to discover all year directories
  2. Year-level ETag check — skip years where the server ETag hasn’t changed (except current year, which is always checked)
  3. Month-level content hash — even without server ETags, a SHA-256 hash of thumbnail filenames detects changes
  4. Only process changed months — fetch the file list, diff against local database, insert/update/delete
  5. Download missing thumbnails — batch download with 8 concurrent connections

For a 35,000-photo library with no changes, a re-sync completes in under 1 second.

Background sync

Sync runs as an Android foreground service with a notification showing progress. It continues when the app is backgrounded. Tap “Cancel” on the notification to stop.


Troubleshooting

Photos appear gray

Some thumbnails may fail to download due to network issues. Flag the photo for inspection (long-press > Flag for inspection) and check the error logs in Settings > Flagged images.

To re-download all missing thumbnails, pull down to refresh in the gallery.

Sync seems stuck

If sync is not picking up new photos:

  1. Go to Settings > Diagnostics > Force re-sync
  2. Pull down to refresh in the gallery
  3. The app will re-check all directories and download any missing thumbnails

Uploads not working

  1. Check that watched folders are enabled (toggle is on)
  2. Verify media permissions are granted (the app prompts on first use)
  3. Check WiFi — uploads default to WiFi-only
  4. Tap the cloud icon in Watched Folders to trigger an immediate upload