← 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:

FieldWhat it’s for
Prompt prefix — Style NotesVisual style every image should share — illustration approach, palette mood, line/texture qualities
Prompt suffix — Brand AlignmentBrand-specific constraints — exact colors with hex values, recurring motifs, lighting/mood rules
Base negative promptThings 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

IntegrationWhat it’s forWhere it runsAccount / key
RecraftAI image generation with custom-trained brand stylesCloud (external.api.recraft.ai)Account + paid API key
Ideogram v3AI image generation with per-call style controls and optional text-layer strippingCloud (api.ideogram.ai)Account + paid API key
Magnific (formerly Freepik)Stock-image search and selectionCloud (api.magnific.com)Account + API key
ImageKitCDN upload, automatic WebP conversion, image hostingCloud (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:

  1. Edit the per-file prompt — pre-filled from the note’s image_prompt frontmatter (auto-created if missing).
  2. Pick image sizes — banner, portrait, square, or any custom size you’ve added in settings. Master “All” toggle for one-click selection.
  3. (Ideogram only) Override per-call style/speed/magic-prompt defaults; toggle Layerize Text post-processing.
  4. 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.

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

CommandWhat it opens
Generate Images for Current FileRecraft generation modal
Generate Images (Ideogram)Ideogram generation modal
Search Magnific ImagesMagnific stock-image search modal
Convert Local Images to Remote ImagesLocal→ImageKit conversion for current note
Batch Convert Directory Images to RemoteLocal→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:

KeyTypeUsed byEffect
image_promptstringRecraft + IdeogramSubject-matter prompt; pre-fills the modal textarea (and is auto-created as "" if missing)
image_negative_promptstringIdeogram onlyAppended to the brand-wide base negative prompt
image_style_typeenumIdeogram onlyOverrides the default style_type (case-insensitive; invalid values fall back to default with a notice)
image_seednumberIdeogram onlyPins the seed for reproducibility

Written on generate:

KeyTypeEffect
image_promptstringThe current modal prompt (when “Write prompt to frontmatter” is on; on by default)
<sizeId>_imagestringPath 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 Node Buffer and fs for 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 ArrayBuffer end-to-end (no base64 round-trip) to avoid memory pressure on the renderer thread. If you still hit issues with very large generations, start with FLASH or TURBO and bump up to QUALITY only after a successful test.
  • The “Write prompt to frontmatter” toggle controls saves only, not the existence of the key. The image_prompt key 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: true is 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