v1.76.1
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-codexando3-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.appto/Applications, overwriting the existing copy - Linux:
sudo dpkg -i biorouter_1.76.1_amd64.deborsudo 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 validationfeat(message): async createUserMessage with structured image content blocksfeat(chat-input): hide attach + ignore image paste/drop when active model lacks visionfeat(chat-input): send images as structured ImageContent + vision-mismatch bannerfeat(renderer): InlineImage component supporting either temp-path or base64; ImageContent rendering in user and assistant transcriptsfeat(context): expose currentModelSupportsVision (with session-scoped override)feat(ui): bulk extension/skill toggles + steadier context-window tooltipfix(google): emit inline_data for user-attached MessageContent::Imagefix(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 themfix(image-input): catch createUserMessage errors instead of unhandled rejectionfix(image-input): carry attachments through brand-new session creationfix(image-input): per-session vision gating + filter parent drop channelchore(api): regenerate OpenAPI client for supports_visionchore(release): bump to 1.76.1
UCSF BioRouter is developed by the Baranzini Lab at the University of California, San Francisco.