Skip to content

Image Gin 0.1.1 — Ideogram support and modal UX parity

Choose a tag to compare

@mpstaton mpstaton released this 04 May 01:40

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:

  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.

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 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-plugin

Windows (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 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