FolderFrame

How it works

Serve the app files and media folders, then open the gallery in a browser.

What you need

  • A computer, NAS or server that can serve static files
  • HTTP or HTTPS access — not a file opened from disk
  • HTML directory listings for every media folder
  • A modern browser and a reachable server

Web server examples: Caddy, NGINX, Apache and lighttpd. Enable directory browsing for media folders. No database, PHP or build step is needed.

On Unraid, use a suitable web-server container. FolderFrame is available in Unraid Community Apps.

EXAMPLE FOLDER STRUCTURE
FolderFrame/
├── index.html + app files
├── folderframe.config.json
└── photos/
    ├── Family/
    │   └── birthday.jpg
    ├── Vacations/
    │   └── beach.heic
    └── garden.mp4

Setup

01

Download the app

Download the app from GitHub. Keep its files together in your server’s web root.

Get the app ↗
02

Add your media

Add media to photos/ or define served folder paths in folderframe.config.json. Subfolders become albums.

Configuration guide ↗
03

Open the gallery

Check that /photos/ shows a directory listing, then open the app’s main address. Auto Refresh picks up media changes.

Hosting details ↗

Local test

RUN INSIDE THE DOWNLOADED APP FOLDER · REQUIRES PYTHON 3
python3 -m http.server 8000

# Then open http://localhost:8000

For testing or a trusted local network. Use a configured web server for a permanent installation.

Manual web-server examples

These compact examples use the deployment container paths: app files at /srv/app, media mounted read-only at /media, and container port 8080. They preserve the required browsable /photos/ URL.

NGINX · SERVER BLOCK
server {
    listen 8080;
    root /srv/app;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
    }

    location /photos/ {
        alias /media/;
        autoindex on;
        autoindex_exact_size off;
        add_header Cache-Control "no-store";
    }
}
CADDY · CADDYFILE
:8080 {
    redir /photos /photos/ 308

    handle_path /photos/* {
        root * /media
        header Cache-Control "no-store"
        file_server browse {
            hide .*
        }
    }

    handle {
        root * /srv/app
        header Cache-Control "no-cache"
        file_server
    }
}

Security. Directory listings expose filenames and media to anyone who can reach them. Serve only a dedicated media directory and add authentication and HTTPS before exposing it beyond a trusted network.