loopman9074 downloadsTurn photos, GIFs and videos into a customizable ambient gallery and digital photo frame inside Obsidian.
Turn your media into a living gallery.
LumaFrame turns folders of photos, GIFs and videos into a calm digital photo frame, fullscreen gallery and ambient media player.
The first-run experience is deliberately simple:
Choose media -> Choose look -> Press Play.
LumaFrame Media vault folder for photos and videosLumaFrame is currently installed manually as a community plugin. It is not published in the official Obsidian Community Plugins directory yet.
Open the repository:
Download or clone the project.
Build the plugin:
npm install
npm run build
In your Obsidian vault, create this folder if it does not exist:
<your vault>/.obsidian/plugins/lumaframe/
Copy these files from the LumaFrame project into that folder:
main.js
manifest.json
styles.css
Restart Obsidian.
Open Obsidian settings.
Go to Community plugins.
Turn off Restricted mode if needed.
Enable LumaFrame.
Use this when you want to keep editing the plugin code.
git clone https://github.com/loopman90/LumaFrame.git
cd LumaFrame
npm install
npm run build
Then copy the built files into your vault plugin folder:
mkdir -p "<your vault>/.obsidian/plugins/lumaframe"
cp main.js manifest.json styles.css "<your vault>/.obsidian/plugins/lumaframe/"
For active development, run:
npm run dev
After changes, reload Obsidian or disable and re-enable the plugin.
Advanced users can symlink the repository directly into an Obsidian vault:
ln -s "/path/to/LumaFrame" "<your vault>/.obsidian/plugins/lumaframe"
cd "/path/to/LumaFrame"
npm install
npm run dev
This keeps the plugin folder connected to your local Git checkout.
Obsidian needs these files in the plugin folder:
main.js
manifest.json
styles.css
Source files such as src/, tests/ and package.json are useful for development, but Obsidian only needs the built plugin files to load LumaFrame.
To update a manual install:
git pull
npm install
npm run build
cp main.js manifest.json styles.css "<your vault>/.obsidian/plugins/lumaframe/"
Then reload Obsidian.
LumaFrame Media folder in your vault, drop media onto the empty player, or add another vault folder under Sources.Images:
.jpg.jpeg.png.gif.webp.avif.svgVideos:
.mp4.webm.m4v.ogv.mpeg.mpgMOV is not listed as guaranteed support. LumaFrame only plays media when the current device can play it.
Sources answer: Where does the media come from?
LumaFrame only scans Sources explicitly added by the user. It never scans the whole vault, home directory, Pictures folder, Downloads folder or drives automatically.
On startup, LumaFrame creates a LumaFrame Media folder in your vault and adds it as a Source. Put photos, GIFs or videos in that folder and LumaFrame will see them.
When the player has no media yet, it shows a first-run empty state. You can drop supported media files onto the player to copy them into LumaFrame Media, open the folder in Obsidian's Files pane, or jump straight to Source management.
Use Choose in the Source settings to pick a folder from inside your current Obsidian vault. You can also enter a vault path manually. If you paste an absolute path that points inside the current vault, LumaFrame converts it to the matching vault path automatically.
External folders are not scanned in the community build because they require direct filesystem access outside the Obsidian vault API. Move or copy media into your vault, then add that vault folder as a Source.
Profiles answer: Which complete setup should be used?
A Profile references Sources, an optional Playlist, a Mode and a Preset. It does not duplicate those objects.
Presets answer: How should LumaFrame look?
Preset changes are meant to be explicit. The architecture includes normalized dirty-state comparison so a future editor can show Preset · Modified and require Save, Save As or Reset.
Modes answer: How should the next item be chosen?
Shuffle creates a real queue. Smart Shuffle uses lightweight local heuristics. Surprise Me prefers rarely shown media. No AI is used.
Playlists answer: Which specific files should be included and in what order?
Playlists can be created, renamed, deleted and reordered from settings. Media can be added from the Gallery View.
The gallery is a visual grid with lazy thumbnails, favorites and hide actions. File management actions should use Obsidian Vault APIs for vault files and safe desktop APIs for external files.
Use the player fullscreen button or press F while LumaFrame is focused.
The architecture separates Sessions from Profiles so independent windows and monitors can be added without sharing timers or queues. A separate native second-screen window depends on Obsidian/Electron support and is documented as a future desktop feature.
Space: Play / PauseRight Arrow: NextLeft Arrow: PreviousF: FullscreenG: Gallery ViewCore vault Sources, image playback, GIFs, supported videos, presets, profiles and gallery views are designed to work without desktop-only APIs. Native file watching, kiosk and second-screen features are desktop-oriented future work.
LumaFrame is completely local.
It does not implement analytics, telemetry, cloud processing, AI, external APIs, accounts, tracking or remote databases. It does not upload media, filenames, folder names, metadata or usage data.
The community build scans only vault folders explicitly added as Sources. Vault Sources are scanned through the Obsidian API.
LumaFrame's plugin interface, documentation, settings, commands and user-facing messages are written in English.
If no media appears, check that at least one Source is enabled and that the folder is inside the current vault. The Choose button in Source settings is the safest way to select a working folder.
If a video does not play, the device may not support that format. LumaFrame skips unsupported media and continues playback.