Mateusz Tomanek24 downloadsTrigger Ambient Director scenes, events and sounds from your notes with inline buttons.
Fire Ambient Director scenes, events and sounds straight from your session notes. Write an inline token and it renders as a clickable button — tap it while you read to switch the table's lights + music, without leaving the note.
The party reaches the gates of Stonebrook. `sm:scene:city`
As they haggle in the market you can drop in a `sm:sound:crowd` or, when the guards
turn hostile, `sm:event:alarm-bell`.
requestUrl, so no CORS issues and no browser tab
opens) and shows a small toast with the result.sm: and it suggests the kinds; type sm:scene: and it suggests the
scenes that actually exist on your server, with their name and tile art.Put the token in an inline code span (single backticks):
| Token | Fires |
|---|---|
`sm:scene:<id>` |
Activate a scene (GET /scenes/<id>/activate) |
`sm:event:<id>` |
Trigger an event (GET /events/<id>/trigger) |
`sm:sound:<id>` |
Play a sound (GET /sounds/<id>/play) |
`sm:music:<uri>` |
Play a Spotify URI/link (GET /music/play?id=<uri>) |
`sm:lights:reset` |
Reset lights to default (also :off, :on) |
Add a custom button label after a pipe: `sm:scene:city|▶ Enter the city`.
Without one, the button uses the entity's own name from the server.
This plugin lives in the app repo but isn't in the Obsidian community store. Build it and drop it into your vault:
cd integrations/obsidian
npm install
npm run build # produces main.js
Then copy main.js, manifest.json and styles.css into your vault at
<vault>/.obsidian/plugins/ambient-director/, and enable Ambient Director under
Settings → Community plugins. (On mobile, copy the same three files into that folder via your
sync of choice.)
For iterating on the plugin, npm run dev rebuilds on change; use the
Hot-Reload plugin to reload it in Obsidian automatically.
Open Settings → Ambient Director and set:
http://192.168.1.20:5252 (the same address you
open the panel at). On the same machine as the server, http://localhost:5252 works.Security:ApiKey on the server. It's stored in the vault's plugin
data, never written into your notes, so it isn't exposed when notes sync.Hit Test to confirm the connection. If ids change on the server, run the Refresh scene / event / sound lists command (or just wait — the list cache is short-lived).
Beyond the inline buttons, you can embed the whole control panel inside Obsidian: click the dice icon in the left ribbon (or run Open control panel from the command palette). It opens the app — pointed at your Server address — as a normal Obsidian tab you can split or drag beside your notes, so you can run scenes without leaving the window you prep in.
The toolbar has Reload (after restarting the server) and Open in browser (pop out to the system browser). On the first load, enter your API key in the embedded panel's own ⚙ button if the server has one set — it's remembered per device, just like on the iPad.
It embeds the app in an <iframe>. This works great when the server runs on this machine
(http://localhost:5252). A remote LAN-IP http server (e.g. http://192.168.1.20:5252) may be
blocked by the browser's mixed-content policy — there, use Open in browser, or on the iPad run
the panel as its installed PWA.