Eiko Wagenknecht1k downloadsInsert images from a self-hosted Immich photo server.
An Obsidian plugin to insert images from a self-hosted Immich photo server. Pick photos from your recent uploads and embed them directly into your notes.
Adapted from obsidian-google-photos for Immich. I created this as an alternative to his Templater script.


http://nas:2283) and public URLs (e.g., https://immich.example.com)asset.read - for searching photosasset.view - for downloading thumbnailsalbum.read - for browsing albums (optional)Note: This plugin is not yet in the official Obsidian community plugin list. A PR has been submitted and is pending review.
eikowagenknecht/obsidian-immich-pickermain.js, manifest.json, and styles.css from the latest releaseimmich-picker in your vault's .obsidian/plugins/ directoryhttps://immich.example.com)Your API key is stored in your OS credential manager (Keychain on macOS, Credential Manager on Windows, libsecret on Linux), not in the plugin's data file. A key saved by an older version is migrated automatically on first load.
album.read permission)If your note has a date in its title (e.g., 2024-01-15.md) or frontmatter, the picker will suggest photos from that date:
Photos are matched on the date the camera recorded, so a day spent in another time zone still returns exactly that day's photos.
This is especially useful for daily notes or journal entries.
When you copy a photo URL from Immich (e.g., https://immich.example.com/photos/abc-123) and paste it into your note, the plugin will:
This can be disabled in settings if you prefer to paste plain URLs.
The Image mode setting controls what the plugin writes into your note:
| Mode | What it inserts | Notes |
|---|---|---|
| Local (default) | A thumbnail downloaded into your vault | Works offline and survives export |
| Remote | A markdown link to your Immich server | Nothing saved to your vault, but the plugin has to be installed to see the image |
| Shared | An Immich shared link | The URL works anywhere, and is readable by anyone who has it |
In local and shared mode, the plugin fills a named template to build the text it
inserts. Settings → Output templates starts with one, and you can add as many as
you like — useful when part of your vault goes somewhere else. The default wraps
the thumbnail in a link back to Immich, which is handy in Obsidian but trips up
publish plugins (Ghost, Hugo, and friends) that re-upload local embeds and only
recognise a plain :
# Default — one click back to the original
[]({{immich_url}})
# Publish-safe — a plain embed, backlink parked in a comment

<!--immich: {{immich_url}}-->
{{display_width}} is what carries the size — it becomes |400 for a 400px
image, and nothing when "Original size" is picked. A template without it always
inserts full-size images, whatever the picker's size selector says.
Once there is more than one template, two things appear:
Blog/posts get the
publish-safe one, everything else keeps the default. The deepest matching rule
wins, so a rule on Blog/drafts overrides one on Blog.The picker shows the resolved choice in a "Format" dropdown, so you can override it for a single insert without touching settings. Pasted Immich URLs and bulk conversion follow the folder rules on their own.
To move existing images from one mode to another, run "Convert Immich images" from the command palette:
Converting to shared links asks for confirmation first, since those URLs are public and do not expire.
Conversion needs the note to record which Immich asset an image came from. Remote and shared images always carry it in their URL. Local images carry it only if the template that inserted them includes {{immich_url}} or {{immich_thumbnail_url}}, either in the image itself or in a trailing <!--immich: {{immich_url}}--> comment. Images inserted from a template with neither are skipped by the scan, because nothing in the note says which photo they are.
Everything works on mobile. The plugin adds a ribbon icon, reachable from the hamburger menu. To put it on the toolbar above the keyboard instead, go to Settings → Toolbar, tap +, and search for "Immich".
The Commander plugin can also add Immich commands to the ribbon, context menus, and page headers.
| Setting | Description | Default |
|---|---|---|
| Server URL | Your Immich server URL | - |
| API Key | Your Immich API key | - |
| Image mode | How images are stored (Local/Remote/Shared) | Local |
| Remote image format | Server link or code block, for remote mode | Server link |
| Render in edit mode | Show remote images inline while editing | Enabled |
| Display width | Default width for inserted images | Original size |
| Photos per page | Photos loaded at a time (recent, search, pagination) | 9 |
| Grid columns | Number of columns in the photo grid | 3 |
| Include archived photos | Show archived photos in recent, search and date results (albums always show them) | Disabled |
| Get date from | Where to extract date for filtering (Disabled/Note title/Frontmatter) | Disabled |
| Date format | MomentJS format for parsing dates | YYYY-MM-DD |
| Frontmatter key | Property name containing the date | date |
| Location | Where to save thumbnails | Same folder as note |
| Filename format | MomentJS format for saved files | immich_2024-01-01--23-59-59.jpg |
| Output templates | Named Markdown templates for inserted images | One, []({{immich_url}}) |
| Default template | Template for notes no folder rule matches | The first one |
| Folder rules | Folders that get a template of their own | None |
| Convert pasted Immich links | Auto-convert pasted URLs to thumbnails | Enabled |
{{local_thumbnail_link}} - Path to the local thumbnail (the shared URL in shared mode){{immich_thumbnail_url}} - Direct thumbnail URL on the server{{immich_url}} - URL to the photo in Immich{{immich_asset_id}} - The Immich asset ID{{original_filename}} - Original filename from Immich{{taken_date}} - Date the photo was taken{{description}} - Photo description from Immich{{display_width}} - Width suffix for the alt text, e.g. |400, set by the display width setting and the picker's size selector# Install dependencies
npm install
# Development mode (watch for changes)
npm run dev
# Production build
npm run build
# Lint
npm run lint
Based on obsidian-google-photos by Alan Grainger (GPL-3.0).
GPL-3.0 - see LICENSE for details.