🦅 Dulus 0.2.89 — live on PyPI
✨ Highlights:
🔤 **Local OCR everywhere**
- New `/ocr` command and `ExtractTextFromImage` tool — extract
text from images via pytesseract (with easyocr fallback).
Zero vision tokens, offline, instant.
- Use case: receipts, code screenshots, error stacks, dense
tables. Anything text-shaped inside an image.
📸 **WebBridgeScreenshot now auto-OCRs**
- One tool call returns `{ saved_to, text }`. Model no longer
has to chain Screenshot → ExtractText. No more "let me Read
this PNG" → 8KB of binary garbage in context.
🖼️ **/img OCR fallback**
- Vision models (Claude, GPT-4o, Gemini, etc.) now receive
image AND a verbatim text transcription side-by-side. Fewer
OCR-style misreads on receipts and code.
- Text-only models (or routes where the bridge drops the
image) now get the OCR text and can actually answer.
Graceful degrade > silent fail.
🦅 **Sandbox embedded inside the desktop GUI**
- Click "🦅 Sandbox" in the GUI Web tab → the Dulus OS renders
INSIDE the frame, not in a popup window. pywebview spawned
as a subprocess, reparented via Win32 SetParent into the
tkinter content frame. Production-grade Python desktop
integration.
- Drag inside the OS doesn't jitter the embed. Opens at GUI's
current size, frozen there.
- Smart URL: uses `:5000/sandbox/` if /webchat is running
(gives full API access), otherwise spins up a local
SandboxServer on a random port. Works offline either way.
📚 **kepano/obsidian-skills bundled**
- 5 skills shipped out of the box: defuddle, json-canvas,
obsidian-bases, obsidian-cli, obsidian-markdown.
- Dulus writes Obsidian Flavored Markdown by default —
wikilinks `[[Note]]`, callouts `> [!note]`, properties,
embeds. Killer pairing: open ~/.dulus/memory as an Obsidian
vault and the graph view connects related memories
automatically.
🌐 **LiteLLM gateway polish**
- One provider entry → 100 backends (OpenRouter, Groq,
Together, xAI, Mistral, Cohere, Perplexity, …)
- Welcome wizard auto-installs LiteLLM in-place and asks for
the backend-specific API key (no more exit-wizard,
pip-install, re-run dance).
📦 Install:
`pip install -U dulus`
🔗 PyPI:
pypi.org/project/dulus/0.2.8…
🔗 GitHub:
github.com/KevRojo/Dulus
🌐 Web:
kevrojo.github.io/Dulus/
Named after the bird, not the rocket. 🦅🇩🇴
$Dulus $DULUS
#Dulus