← Corpus / image-gin / other
image-gin/releases/011
- Path
- releases/0.1.1.md
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/, 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 mode
Then 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
Windows (PowerShell as admin)
New-Item -ItemType SymbolicLink `
-Path "C:\path\to\your-vault\.obsidian\plugins\image-gin" `
-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 raw
ArrayBufferend-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. The
image_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