Skip to content

v1.76.1

Choose a tag to compare

@Broccolito Broccolito released this 01 Jun 23:24

BioRouter v1.76.1 Release Notes

Release Date: June 2026
Repository: github.com/BaranziniLab/BioRouter

A feature release focused on multimodal image input. Vision-capable models now actually receive attached images — drop a screenshot, the model sees the bytes. Patch release on top of v1.76.0, no breaking changes.

Downloads

Platform File Install
macOS (Apple Silicon) BioRouter-1.76.1-arm64.dmg Open the DMG and drag BioRouter.app to /Applications
macOS (Intel) BioRouter-1.76.1-x64.dmg Open the DMG and drag BioRouter.app to /Applications
Windows (x64) BioRouter-win32-x64-1.76.1.zip Unzip and run BioRouter.exe
Linux Ubuntu / Pop!_OS (x64) biorouter_1.76.1_amd64.deb sudo dpkg -i biorouter_1.76.1_amd64.deb
Linux Fedora / RHEL (x64) BioRouter-1.76.1-1.x86_64.rpm sudo rpm -i BioRouter-1.76.1-1.x86_64.rpm

What's New

Multimodal image input

Vision-capable models can now actually read attached images. Drag a screenshot from Finder, paste from the clipboard, or use the paperclip button — the image bytes are sent to the model alongside your prompt instead of being silently dropped or hidden behind a file path.

Supported across 56 vision-capable models on 5 providers:

  • Anthropic — all 11 Claude 4.x variants (Opus / Sonnet / Haiku)
  • OpenAI — GPT-5.5, GPT-5.4, GPT-5, GPT-4.1, GPT-4o, o1, o3, o4-mini (20 models; excludes gpt-5.1-codex and o3-mini)
  • Google Gemini — all 19 Gemini 2.0 / 2.5 / 3 variants
  • Amazon Bedrock — all 4 Claude-on-Bedrock variants
  • Databricks — Claude variants only (databricks-claude-sonnet-4-5, databricks-claude-3-7-sonnet)

Models without vision support keep the attach button hidden — drops and pastes of images are ignored, so you can't accidentally send an image to a text-only model. A subtle inline banner shows up if you'd dropped an image and then switched to a non-vision model.

Per-session capability gating

In dashboard mode, each chat window is bound to its own session — possibly with a different model than your global default. Image-input gating reflects the session's own model, not the global one, so a dashboard window pinned to a text-only Ollama model hides the attach button while another window on Claude or GPT-4o keeps it.

Bulk extension and skill toggles

The Extensions and Skills bottom-menu picker rows gain a single-tap action to enable or disable all currently-visible items in parallel — useful for quickly priming a session with a specific set, or wiping it for a fresh test. Hub mode flips overrides for new chats; session mode applies to the active session and is summarized in a single toast.

Steadier auto-compact threshold tooltip

The triangle marker on the context-window gauge no longer flickers its tooltip when you graze its edges, and it stops popping the tooltip open on its own when the popover auto-focuses the slider. The hit area is also bigger so the marker is easier to grab without making the indicator look heavier.

What's Fixed

Drag-dropped images now actually reach the model

Pre-fix, dropped images kept their OS source path (/Users/you/Desktop/foo.png) which the temp-dir IPC validator correctly rejected — so attached images never reached the model and the send silently aborted with an unhandled rejection. Drops now write a temp copy on the way in, mirroring how clipboard pastes already worked.

createUserMessage errors are surfaced

A failure reading an attached image used to disappear into an unhandled promise rejection with no UI feedback. The send path now catches the error and surfaces it through the normal "Submit error" path.

Attachments carry through brand-new chat session creation

When the very first message of a brand-new chat included an attached image, BaseChat.handleFormSubmit threaded the text into the new-session navigation state but dropped the attachments entirely. The replay on the next page only saw the text, and the model received text-only. Attachments now carry through navigation alongside the initial message.

Gemini honors MessageContent::Image

The Google formatter's match arm had _ => {} as a catch-all after the Thinking variant, which silently swallowed image content blocks for user messages. Replaced with an explicit MessageContent::Image arm that emits Gemini's { inline_data: { mime_type, data } } wire shape — matching the format already used for tool-returned images in the same file.

OpenAI Responses API formatter includes images

The /v1/responses formatter (used by gpt-5.x, gpt-5.5, and codex variants) walked message.content but only handled MessageContent::Text. Image content blocks were silently dropped, so gpt-5.5 reached the model with text only — explaining the "I don't see an image" responses on the very models multimodal input was supposed to target. The formatter now emits user-role image blocks as the responses-API input_image shape with an inline data URL, alongside the existing chat-completions image handling.

Drop filter covers the message-area drop zone too

ChatInput's allDroppedFiles useMemo previously only stripped images out of its own drop channel. The parent BaseChat installs a second drop zone on the conversation-scroll area, and that channel was concatenated unfiltered — images dropped on the messages above the input still slipped through even when the active model had no vision support. Both channels are filtered now.

Banner styling

The "current model can't see images" mismatch banner replaced its amber alert background with the same muted bg-background-medium/60 + border-border-subtle treatment used for file-box previews elsewhere in the input panel, plus a small slashed-eye icon and softened copy.

Upgrading

No manual migration needed. Replace your existing installation with the new package for your platform.

  • macOS: open the new DMG and drag BioRouter.app to /Applications, overwriting the existing copy
  • Linux: sudo dpkg -i biorouter_1.76.1_amd64.deb or sudo rpm -U BioRouter-1.76.1-1.x86_64.rpm
  • Windows: unzip and replace the existing installation folder

Sessions saved before this release keep working — pre-v1.76.1 messages that embedded image paths in their text continue to render with the existing temp-path renderer, and only new messages emit structured image content blocks.

Changes Since v1.76.0

  • feat(providers): supports_vision on ModelInfo + per-provider seeding (Anthropic, OpenAI, Google, Bedrock, Databricks)
  • feat(ipc): read-temp-image-as-base64 handler with temp-dir validation
  • feat(message): async createUserMessage with structured image content blocks
  • feat(chat-input): hide attach + ignore image paste/drop when active model lacks vision
  • feat(chat-input): send images as structured ImageContent + vision-mismatch banner
  • feat(renderer): InlineImage component supporting either temp-path or base64; ImageContent rendering in user and assistant transcripts
  • feat(context): expose currentModelSupportsVision (with session-scoped override)
  • feat(ui): bulk extension/skill toggles + steadier context-window tooltip
  • fix(google): emit inline_data for user-attached MessageContent::Image
  • fix(openai-responses): include user-image content blocks in /v1/responses requests (the gpt-5.x fix)
  • fix(image-input): drag-dropped images write to temp dir so the IPC accepts them
  • fix(image-input): catch createUserMessage errors instead of unhandled rejection
  • fix(image-input): carry attachments through brand-new session creation
  • fix(image-input): per-session vision gating + filter parent drop channel
  • chore(api): regenerate OpenAPI client for supports_vision
  • chore(release): bump to 1.76.1

UCSF BioRouter is developed by the Baranzini Lab at the University of California, San Francisco.