mindfork mindfork

mindfork 0.23.0 — pictures

mindfork 0.23.0 is out. The assistant can now draw, whatever model you chat with — a local Gemma or Qwen on llama.cpp included — and you can draw without it. It is off by default, since every picture is paid for.

The assistant draws

  • Ask for a picture, or a change to one. With Image generation switched on (Settings → Tools), the assistant draws with the provider you pick: OpenAI's gpt-image-2.5-flare by default, at about a cent and a half a picture as measured, Gemini, xAI's Grok Imagine, or one of OpenRouter's picture models — Enter on the Model row lists them, marking the ones that can only draw a new picture. Ask it to change a picture the chat already has, one you attached or one it drew, and it sends that picture along.
  • Kept as the provider sent it. Every picture lands in the chat's files — /file list, /file open #N — and the assistant is shown a copy, so a model that sees can check it against what you asked.
  • Bounded, because it is paid for. One turn draws at most four pictures (a setting; 0 for no limit). Follow-ups and background runs never draw. When the provider refuses a picture, the assistant draws nothing more in that turn and asks you what to change — in the probe, both local models tried to draw a refused request again unasked, and xAI charges for a picture it refuses.

You draw

/image generate a fox in the snow — or /image generate 16:9 … for another shape — has the provider draw it, with no model in between. The picture is kept in the chat's files and attached to your next message, like a pasted one, so the next message can ask the model about it.

From your phone

Ask the companion for a picture through its Telegram bot and it comes back as a photo after the reply's words, named as the chat file it is kept as, so the next message can ask for a change to it. A picture larger than Telegram takes as a photo is sent as a smaller copy; the original stays in the chat's files.

Fixed

  • Long silences in a spoken reply. A reply read aloud could fall silent for ten or twenty seconds after a heading, a list or a code block. Blocks are now packed together and speech is made up to forty seconds ahead, so the reply plays through — and a request the speech provider leaves hanging is asked a second time.
  • Gemma 4 answering in JSON after a tool's picture. On llama.cpp, when a tool returned a picture — a chart from the Python sandbox, a screenshot from a plugin — Gemma 4 answered an English request with a block of JSON instead of a reply in 17 conversations of 21. Every OpenAI-compatible server now gets a tool's picture in a message of its own, and it happened in none of 21.

Your data

The chat files move to schema 7, because a chat file may now hold a picture the assistant drew, and 0.22.0 would have left such a chat out of its list without a word. Checked with 0.22.0 on a copy of data this version wrote: it stops at start, says the data comes from a newer version, and changes nothing. A backup is made before the step; restored with 0.22.0, it reads every chat in it. The new image_gen section of settings.json takes no step: an older version drops it when it saves its settings.

The Markdown parser is past RUSTSEC-2026-0414, which needs wiki links — mindfork never turns them on, so it was not affected.

The full list is in the changelog; downloads are on the releases page, and cargo install mindfork builds the same version from crates.io.