Are directory listings required?
No. Use live listings on a normal web server, or publish a generated manifest on a static host.
Serve the app files and media folders, then open the gallery in a browser.
Caddy, NGINX, Apache and lighttpd can provide live directory listings. Cloudflare Pages, GitHub Pages and similar static hosts can publish a generated manifest instead. No database, PHP, backend or app build step is needed.
FolderFrame is available in Unraid Community Apps bundled with Caddy and performance options enabled.
FolderFrame/
├── index.html + app files
├── folderframe.config.json
└── photos/
├── Family/
│ └── birthday.jpg
├── Vacations/
│ └── beach.heic
└── garden.mp4No. Use live listings on a normal web server, or publish a generated manifest on a static host.
auto tries a manifest first, directory uses live listings, and manifest requires the published index. See Static-host discovery below
No. Deploy the app, media and manifest as static files. New media appears after you regenerate and redeploy the manifest. Static Pages installation
Download the app from GitHub. Keep its files together in your server’s web root.
Get the app ↗Add media to photos/ or define served folder paths in folderframe.config.json. Subfolders become albums.
Configuration guide ↗Open the app. Directory sources scan live listings; manifest sources load the published index.
Hosting details ↗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.
See Static Pages hosting options in Ways to install
autoDefault. Try a published manifest, then fall back to directory listings, which can then update the manifest for future scans.
directoryUse live directory listings and never request a manifest.
manifestRequire a generated manifest and never attempt directory discovery.
{
"id": "photos",
"label": "Photos",
"path": "photos/",
"thumbnailPath": "thumbnails/",
"manifestPath": "folderframe-data/library.json",
"discoveryMode": "manifest"
}FolderFrame/
├── index.html
├── app.js
├── folderframe.config.json
├── photos/
├── thumbnails/ # optional
└── folderframe-data/
├── library.json
└── library.d/
└── *.jsonscanCache is ignored.Generate the index with FolderFrame’s helper, then deploy it with the media. Configuration guide ↗
The official public demo uses strict manifest discovery on GitHub Pages.
These directory-discovery examples use the deployment container paths: app files at /srv/app, read-only libraries mounted below /media/ such as /media/Library, and container port 8080. They provide a browsable /photos/ URL. Static hosts can use the manifest workflow above instead.
Container installs. Docker and Unraid enable persistent thumbnails and manifests by default; the manifest reuses unchanged directory records on later scans. scanCache is a separate optional browser feature and is not required. Installation options
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";
}
}
: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
}
}