SmartHopper 2.0.0-dev.260619: Unified AI I/O, GhJSON Patch, Audio/Speech support, Gemini, and more!
Pre-releaseThis major dev release reimagines SmartHopper's component surface with a unified *2* naming convention, introduces a complete family of typed AI input and output components with graceful fallback handling, adds GhJSON diff/patch operations for versioned Grasshopper workflows, and brings speech and music support across OpenAI, MistralAI and Google Gemini.
🔄 Unified Naming & Breaking Changes
Every AI tool and component has been renamed to a clearer source2target pattern:
- Tools:
text_generate→text2text,img_generate→text2img,file_to_md→file2md,web_to_md→web2md, etc.web_generic_page_readis removed—useweb2mdinstead. - Components:
AITextGenerate→AIText2TextComponent,AIImgGenerateComponent→AIText2ImgComponent,AIFileToMdComponent→AIFile2MdComponent, etc.WebPageReadComponentis removed—useWeb2MdComponentinstead.
Other breaking changes:
Model (M)replaced bySettings (S): all AI components now acceptAIRequestParameters(from the newAISettingsComponent) or a plain model name string for backward compatibility.- Batch API signatures changed:
AIBatchStatus.ResultBody→Resultsdictionary;SubmitBatchAsyncandOnBatchCompletedsignatures updated for multi-item support. - Removed
service_tierextra descriptor from OpenAI, Anthropic and MistralAI providers. Use the dedicatedBatchinput onAISettingsComponentinstead. ComponentBasedeep refactor: files saved before SmartHopper 1.1.0 lose persistent outputs on first open and must be re-run once.
📥📤 New AI I/O Component Family
A complete suite of typed input and output components now covers every common Grasshopper-to-AI data exchange:
- Input components (
SmartHopper > Input):Text2AI,Img2AI,Audio2AI,Json2AI,AIPromptComponent(formerlyAIInstructionsComponent), plus typed list variantsTextList2AI,NumberList2AI,IntegerList2AI,BooleanList2AIthat collapse branches into JSON arrays. - Output components (
SmartHopper > Output):AI2Text,AI2Boolean,AI2Number,AI2Integer,AI2Markdown,AI2Json,AI2Img,AI2Script, plus typed list variantsAI2TextList,AI2NumberList,AI2IntegerList,AI2BooleanListthat expand JSON arrays into typed branches.
Some output components carry an optional Fallback (F) input and a Used Fallback (UF) boolean output. When the AI response is unparseable or empty, the fallback value is emitted and UF = true.
📦 GhJSON Diff & Patch
Version your Grasshopper canvas with .ghpatch files:
- New AI tools:
gh_diff,gh_patch_apply,gh_patch_validate. - New Grasshopper components:
GhDiffComponents("Diff GhJSON"),GhPatchApplyComponents("Apply GhPatch"),SaveGhPatch,OpenGhPatch,GhValidateComponentsandGhPatchApplyToCanvasComponents.
These operations route through the GhJSON.NET 1.1.0 NuGet Package, still under testing.
🚀 Batch Processing UX
Batch jobs now show a live progress counter (Processing batch (YY/XX)...), survive file save/reload because sentinel trees are serialized with the document, and provide immediate cancellation feedback (Cancelling batch {id}... → Batch {id} cancelled successfully). Per-item custom IDs improve traceability, and order-based fallback matching recovers results when sentinel mapping is unavailable.
🆕 Google Gemini Provider and Audio Support [NOT TESTED FEATURES]
- Google Gemini is now a first-class provider with support for Gemini 3.1, 2.5, 2.0 and 1.5 models, including text generation, image generation, structured outputs, tool calling, extended thinking, batch processing and service-tier selection.
- Audio support lands for OpenAI, MistralAI and Gemini: speech-to-text (
whisper-1,voxtral-small-latest, etc.) and text-to-speech (tts-1,voxtral-tts-26-03, Gemini preview TTS). A newlyriamusic-generation endpoint is available on Gemini.
⚙️ Settings & Timeout Consolidation
AISettingsComponentassembles per-requestAIRequestParametersfrom universal inputs: Model, Temperature, Max Tokens, Top P, Seed, Timeout and Extras.AIExtraSettingsComponentdynamically generates inputs based on the selected provider's extra descriptors.- Timeout is now a single setting (default 300 s) with clear resolution priority: component input → settings → safe default.
📄 File, Web & Vision Processing
file2mdandAIFile2MdComponentconvert PDF, DOCX, PPTX, XLSX, HTML, CSV and more to Markdown with layout intelligence and image extraction.web2mdandWeb2MdComponentconvert web pages to Markdown with specialized handlers for Wikipedia, GitHub, GitLab and Stack Exchange.img2textnow supports batch mode and correctly transmits base64 image data forGH_ExtractedImageinputs across all providers.
📦 JSON Components & Utilities
New non-AI JSON components join the SmartHopper > JSON tab:
JsonSchemaComponent,JsonSchemaPropComponent,JsonSchemaPropObjectComponent,JsonSchemaPropArrayComponentJsonObjectComponent,JsonArrayComponent,JsonArray2TextListComponent,JsonObject2TextComponentJsonGetValueComponent(dot-notation paths),JsonMergeComponentJsonSanitizerComponentrecovers malformed AI-generated JSON via automatic markdown-fence stripping, brace-depth extraction and smart sanitization.
🛠️ Technical Requirements
- Rhino 8.0 or above is required
- Windows 10/11 or macOS
- Valid API keys for MistralAI, OpenAI, DeepSeek, Anthropic, OpenRouter or Google Gemini
⚠️ Important Notes
- This is a dev release with some features still unstable or subject to change
- API keys are required, and usage costs apply based on your provider
- Breaking: saved Grasshopper files using the old
Model (M)input or legacy component names will need reconnecting after upgrade - Documentation is currently under development
🤝 We Value Your Feedback!
Help shape SmartHopper's future by:
- Sharing your experiences with the new features
- Suggesting improvements via our discussion
- Telling us what AI capabilities would help your workflow most
We hope you enjoy these new features and improvements!
Happy designing! 🎨
Auto-generated release notes
What's Changed
- chore: add provider hash manifest for 1.4.2-alpha by @github-actions[bot] in #410
- ci: enhance milestone management and release automation workflows by @marc-romu in #411
- ci: new automatic milestone management, automatic update to yak, and release stages manager by @marc-romu in #412
- update dev by @marc-romu in #413
- feat(ai): Add batch API support, vision capabilities, file/markdown conversion, and AI settings components by @marc-romu in #416
- feat(ai-tools): rename AI tools and components to consistent naming convention by @marc-romu in #417
- docs: update contributors section for dev by @github-actions[bot] in #418
- chore: add provider hash manifest for 1.4.2-beta by @github-actions[bot] in #427
- [patch] ci: add reusable cherry-pick action and patch propagation workflow for multi-branch commit fan-out → dev by @github-actions[bot] in #432
- [patch] ci: add patch/ prefix to auto-delete branch patterns in PR cleanup workflow → dev by @github-actions[bot] in #433
- [patch] feat(model-registry): refresh AI model catalog across all providers with Apr 2026 updates and rebalance rankings → dev by @github-actions[bot] in #435
- ci: automate release notes generation with Mistral AI by @devin-ai-integration[bot] in #439
- ci: add concurrency controls, promotion freeze, auto-discover branches, and CI improvements by @devin-ai-integration[bot] in #442
- docs(rules): clarify Windsurf guidance by @devin-ai-integration[bot] in #443
- Update dev from main by @marc-romu in #444
- docs: update contributors section for main by @github-actions[bot] in #445
- [patch] ci: automate license header updates on PRs → dev by @github-actions[bot] in #446
- ci(models): automated provider model discovery via OpenRouter API by @marc-romu in #453
- chore: anonymize SmartHopperPublicKey for main by @github-actions[bot] in #454
- chore(models): auto-add new and deprecate stale OpenRouter models by @github-actions[bot] in #463
- chore(models): auto-add new and deprecate stale MistralAI models by @github-actions[bot] in #465
- ci: dispatch PR checks after bot writes by @devin-ai-integration[bot] in #469
- chore(models): auto-add new and deprecate stale DeepSeek models by @github-actions[bot] in #466
- chore(models): auto-add new and deprecate stale OpenAI models by @github-actions[bot] in #464
- chore(models): auto-add new and deprecate stale Anthropic models by @github-actions[bot] in #462
- fix(ci): handle 'already_exists' milestone error code by @devin-ai-integration[bot] in #479
- fix(ci): provider-models surfaces validation errors + non-fatal scheduled run by @devin-ai-integration[bot] in #480
- chore(templates): sync model-verification template with ProviderModels by @github-actions[bot] in #485
- fix: update manifest text dynamically in YAK upload workflow by @devin-ai-integration[bot] in #493
- ci: create version label when initializing stabilization path by @devin-ai-integration[bot] in #519
- chore(ci): rethink label colors, rename stale/needs-attention, add needs testers by @devin-ai-integration[bot] in #518
- [patch] fix(ci): strip date/build metadata from version labels → dev by @github-actions[bot] in #550
- [patch] fix(ci): strip date/build metadata from version labels → main by @github-actions[bot] in #553
- feat: SmartHopper 2.0.0 - Google Gemini Provider, Batch API, Vision Input, and Breaking Changes by @marc-romu in #420
- chore: update development version date to 2.0.0-dev.260616 by @github-actions[bot] in #556
- chore(templates): add 1.4.3 to model-verification template by @marc-romu in #557
- docs: update contributors section for dev by @github-actions[bot] in #561
- refactor: remove unused HashSet containers in AIInputPayloadMerger and gh_put by @devin-ai-integration[bot] in #562
- fix(ci): handle null $LASTEXITCODE in version-manager action by @devin-ai-integration[bot] in #563
- feat(fallback): implement Modality Fallback Resolver by @devin-ai-integration[bot] in #564
- feat(release): SmartHopper 2.0.0 — Gemini Provider, Batch API, Vision Input, and Breaking Changes by @marc-romu in #560
Full Changelog: 1.4.2-alpha...2.0.0-dev.260619