Image Gin 0.1.1 — Ideogram support and modal UX parity
Image Gin 0.1.1 — Ideogram support and modal UX parity
Image Gin generates AI images directly into your Obsidian vault. Pick
one or more size presets (banner, portrait, square, or your own),
type a subject prompt — or pull one from the file's image_prompt
frontmatter — and the plugin generates each image, saves it to your
configured output folder, and writes the resulting paths back into the
file's frontmatter. It also handles stock-image search via Magnific
and CDN upload via ImageKit, all from inside Obsidian.
This release adds Ideogram v3 as a third generation provider
alongside the existing Recraft integration, with brand-template prompt
wrapping for consistent visual identity across every generated image.
Both modals are now functionally symmetrical for everything that
isn't a genuine API-capability difference.
What's new in 0.1.1
Ideogram v3 added as a generation provider
A new "Generate Images (Ideogram)" command opens a dedicated Ideogram
modal with all of Ideogram's per-call knobs surfaced cleanly: aspect
ratio (auto-derived from your size presets), rendering speed
(FLASH | TURBO | DEFAULT | QUALITY), style type
(AUTO | GENERAL | REALISTIC | DESIGN | FICTION), magic-prompt mode
(AUTO | ON | OFF), negative prompt, and an optional Layerize-Text
post-processing pass that strips incidental text from the generated
image.
Recraft is not being deprecated. Both providers ship together,
with separate commands, separate modals, and separate settings
sections. Use whichever fits the task — or both.
Brand Template — keep visual identity consistent across every image
Ideogram has no equivalent of Recraft's server-side style_id, so
"make every image feel like our brand" becomes prompt engineering.
The Brand Template settings let you wrap every per-file prompt with
fixed style text:
| Field | What it's for |
|---|---|
| Prompt prefix — Style Notes | Visual style every image should share — illustration approach, palette mood, line/texture qualities |
| Prompt suffix — Brand Alignment | Brand-specific constraints — exact colors with hex values, recurring motifs, lighting/mood rules |
| Base negative prompt | Things you never want in any image — text overlays, watermarks, off-brand imagery |
Two assembly modes:
- Bookends — prefix prepended, suffix appended. Final =
prefix + per-file prompt + suffix. Good when your style guide
naturally brackets the subject. - Slot insertion — include the literal token
{prompt}somewhere
in the prefix. The per-file prompt is substituted at that exact
position; the suffix is ignored. Good when the per-file prompt needs
to land mid-sentence.
A live Resolved Prompt Preview in the modal shows the fully
assembled prompt before you generate, with mode-aware guidance text
explaining which assembly mode is active (or that no template is
configured yet).
Master "All" toggle on the size selector
Both the Recraft and Ideogram modals now carry a flush-right "All"
toggle in the Image Sizes header. Click on → every configured size
enables. Click off → all clear. Two-way sync with the individual
toggles: the master reflects "are all selected" in real time, and
flipping it programmatically updates each individual.
Last-session UI state persistence
Both modals now remember your last choices across opens — selected
sizes, "Write to frontmatter" toggle, and (for Ideogram) per-call
overrides for style type, rendering speed, magic-prompt mode, and
layerize. Persisted via Obsidian's standard plugin.saveData() —
nothing leaves your machine.
Per-file content (the prompt itself, frontmatter overrides) is
intentionally not persisted across modal opens — those live in
each note's frontmatter where they belong, and would mislead if
carried across files.
Frontmatter image_prompt auto-creation
When you open the modal on a file that doesn't yet have an
image_prompt key, the plugin writes image_prompt: "" to the
file's frontmatter immediately, surfacing the convention so you can
see and edit it directly in your note. Previously the key only
appeared after a successful generate, which made the contract
invisible to first-time users.
What's in the box
Four integrations, one workflow
| Integration | What it's for | Where it runs | Account / key |
|---|---|---|---|
| Recraft | AI image generation with custom-trained brand styles | Cloud (external.api.recraft.ai) |
Account + paid API key |
| Ideogram v3 | AI image generation with per-call style controls and optional text-layer stripping | Cloud (api.ideogram.ai) |
Account + paid API key |
| Magnific (formerly Freepik) | Stock-image search and selection | Cloud (api.magnific.com) |
Account + API key |
| ImageKit | CDN upload, automatic WebP conversion, image hosting | Cloud (upload.imagekit.io) |
Account + public/private key pair |
The plugin only contacts a remote service when you invoke its
command. Nothing is sent automatically. No telemetry. Every
integration is independently toggleable in settings — disable the
ones you don't use.
Image generation flow
Run Generate Images for Current File (Recraft) or
Generate Images (Ideogram) on any note. The modal lets you:
- Edit the per-file prompt — pre-filled from the note's
image_promptfrontmatter (auto-created if missing). - Pick image sizes — banner, portrait, square, or any custom
size you've added in settings. Master "All" toggle for one-click
selection. - (Ideogram only) Override per-call style/speed/magic-prompt
defaults; toggle Layerize Text post-processing. - Generate — each selected size produces one image, saved to
your configured output folder. The file's frontmatter is updated
with the resulting paths under per-size keys (banner_image,
portrait_image,square_image, etc.).
Local-to-remote image conversion
Run Convert Local Images to Remote Images to sweep a single note's
local image references and upload them to ImageKit, replacing the
links with CDN URLs in the same pass. Or run Batch Convert
Directory Images to Remote to do the same across an entire vault
folder.
Optional: convert to WebP on upload, remove local files after upload,
or keep both.
Magnific stock-image search
Run Search Magnific Images to query Magnific by keyword and pick
from the results. Selected images can be downloaded into your vault
or referenced by URL.
Image cache
Cached external images are stored locally to bypass Obsidian's CSP
restrictions and enable offline viewing. Configurable cache folder,
size cap, automatic cleanup of stale entries, and a Clear Cache
button in settings.
Commands at a glance
| Command | What it opens |
|---|---|
| Generate Images for Current File | Recraft generation modal |
| Generate Images (Ideogram) | Ideogram generation modal |
| Search Magnific Images | Magnific stock-image search modal |
| Convert Local Images to Remote Images | Local→ImageKit conversion for current note |
| Batch Convert Directory Images to Remote | Local→ImageKit conversion for a vault folder |
Bind any of them to a hotkey from Obsidian → Settings → Hotkeys.
Frontmatter contract
Image Gin reads from and writes to a small set of frontmatter keys —
all configurable.
Read on modal open:
| Key | Type | Used by | Effect |
|---|---|---|---|
image_prompt |
string | Recraft + Ideogram | Subject-matter prompt; pre-fills the modal textarea (and is auto-created as "" if missing) |
image_negative_prompt |
string | Ideogram only | Appended to the brand-wide base negative prompt |
image_style_type |
enum | Ideogram only | Overrides the default style_type (case-insensitive; invalid values fall back to default with a notice) |
image_seed |
number | Ideogram only | Pins the seed for reproducibility |
Written on generate:
| Key | Type | Effect |
|---|---|---|
image_prompt |
string | The current modal prompt (when "Write prompt to frontmatter" is on; on by default) |
<sizeId>_image |
string | Path to the generated image for each selected size (banner_image, portrait_image, square_image, or your custom size's YAML key) |
The plugin never overwrites image_negative_prompt, image_style_type,
or image_seed — those are user-managed inputs.
Installation
For users
From the Obsidian community directory (pending review):
Settings → Community Plugins → Browse → search "Image Gin" → Install
→ Enable.
Manually from this release: download main.js, manifest.json,
and styles.css into <vault>/.obsidian/plugins/image-gin-plugin/,
then enable the plugin in Settings → Community Plugins.
After installation, open Settings → Community Plugins → Image Gin
to add API keys for the providers you intend to use. Each provider is
independently toggleable — enable only the ones you need.
For contributors
Clone the repo into wherever you keep your Obsidian plugin source —
not directly into a vault's .obsidian/plugins/ directory:
git clone https://github.com/lossless-group/image-gin-plugin.git
cd image-gin-plugin
pnpm install
pnpm build # one-shot production build
# or
pnpm dev # watch modeThen symlink your dev checkout into the Obsidian vault you want to
test in. The convention is to keep your source tree somewhere like
~/code/obsidian-plugins/<name>/ and symlink it into each vault you
want to load it from:
macOS / Linux
ln -s /absolute/path/to/image-gin-plugin \
/absolute/path/to/your-vault/.obsidian/plugins/image-gin-pluginWindows (PowerShell as admin)
New-Item -ItemType SymbolicLink `
-Path "C:\path\to\your-vault\.obsidian\plugins\image-gin-plugin" `
-Target "C:\path\to\image-gin-plugin"After the symlink, enable the plugin in Settings → Community Plugins
(disable Safe Mode first if it's on). pnpm dev rebuilds on save;
reload Obsidian (Cmd/Ctrl+R in the dev console) to pick up changes.
PRs welcome — see the context-v/blueprints/ directory for design
notes (including Add-New-Image-API-to-Providers.md if you want to
add a fourth generation provider) and context-v/changelogs/ for
recent design decisions and their rationales.
A note on the "Magnific / Freepik" naming
The stock-image provider this plugin talks to was rebranded from
Freepik to Magnific during 2026. The API surface is
unchanged. The plugin uses the new Magnific name throughout, with
a one-shot migration in loadSettings() that moves any legacy
freepik config block to magnific so existing users' API keys
survive the upgrade automatically. No manual action needed.
Compatibility & requirements
- Obsidian: ≥ 1.8.10
- Platform: Desktop only (
isDesktopOnly: true— the plugin
uses NodeBufferandfsfor absolute-path image saves, and
Obsidian's mobile environment doesn't expose those). - Node / dev: Node 22+ if you're building from source, with
pnpm(required — see.npmrc).
Known limitations
- Ideogram aspect ratios are enum-based, not pixel-exact. The
plugin maps your pixel-based size presets to the closest Ideogram
aspect ratio (1x1,16x9,2x3, etc.). The modal shows the
resolved ratio next to each size so you know what's actually being
requested. If you need exact pixel dimensions, use Recraft. - Ideogram outputs at QUALITY rendering speed can be 5–10 MB.
The service holds image bytes as rawArrayBufferend-to-end
(no base64 round-trip) to avoid memory pressure on the renderer
thread. If you still hit issues with very large generations,
start withFLASHorTURBOand bump up toQUALITYonly after
a successful test. - The "Write prompt to frontmatter" toggle controls saves only,
not the existence of the key. Theimage_promptkey is
auto-created on modal open regardless. Turn the toggle off to
test prompts without persisting them; the original frontmatter
value stays intact. - No mobile support.
isDesktopOnly: trueis enforced because
the file-write paths use Node APIs not available in Obsidian's
Capacitor-based mobile runtime.
Credits
Built by The Lossless Group. Thanks to
Recraft, Ideogram, Magnific (formerly Freepik), and ImageKit for the
underlying providers, and to the Obsidian community for the plugin
platform that makes this kind of integration possible.
Issues and feedback: https://github.com/lossless-group/image-gin-plugin/issues