A vibe-coded web interface to Digikam, allowing remote access to your Digikam photo albums.
- Browse albums and sub-albums, with a day-grouped photo grid
- Filter by tag, rating, media type (photos/videos), aspect ratio, and sub-albums
- Bookmarks (saved album + filter views)
- Full-screen lightbox: zoom/pan, keyboard navigation, video playback, slideshow, reverse-image-search (Yandex), and a metadata/info panel
- Screensaver / photo frame modes:
/random(an endpoint that redirects to a random photo's file) andautoplay=trueon any album URL (e.g./photos/Photos?min_rating=3&recursive=true&autoplay=true, which opens the lightbox in slideshow mode on load; the first key press or tap makes it fullscreen; a running slideshow keeps the screen awake via the Screen Wake Lock API, which needs HTTPS or localhost; a TV remote's Stop button stops it and Rewind/Fast forward step through the items; addinterval=10for 10s per image instead of the default 5, andshuffle=falsefor grid order instead of random — or set these in the lightbox's ▶ slideshow settings and use its "Copy slideshow link" button to get such a URL) - JSON API
- Installable on Android (and desktop) as a PWA
You can build and run digikam-web using Nix. To serve the Digikam database at its default location (~/.local/share/digikam/db/digikam4.db):
nix run github:edolstra/digikam-webFor available options, add --help:
nix run github:edolstra/digikam-web -- --helpThe flake exposes a NixOS module as nixosModules.default, which defines a systemd service running the backend. Add this flake as an input and import the module:
{
inputs.digikam-web.url = "github:edolstra/digikam-web";
outputs = { nixpkgs, digikam-web, ... }: {
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
modules = [
digikam-web.nixosModules.default
{
services.digikam-web = {
enable = true;
user = "alice"; # whose ~/.local/share/digikam DB is served
port = 8080; # optional, defaults to 8080 (bound to 127.0.0.1)
};
}
];
};
};
}For security and performance (HTTP/2), it's best to use reverse proxy like nginx in front of digikam-web, e.g.
services.nginx = {
enable = true;
recommendedProxySettings = true;
virtualHosts."photos.example.org" = {
forceSSL = true;
useACMEHost = "photos.example.org";
locations."/".proxyPass = "http://localhost:8080";
};
};
networking.firewall.allowedTCPPorts = [ 443 ];- Backend in Rust (axum + rusqlite).
- Frontend is a vanilla-JS single-page app served by the backend.
- Digikam's PGF thumbnails are decoded in the browser via webpgf compiled to WebAssembly.
digikam-webcurrently lacks authentication of any kind.


0 comments
log in to comment.