v0.4.0
Pre-release
Pre-release
What's Changed
Full Changelog: v0.3.0...v0.4.0
Summary
Detection Engine
- Migrated from YOLOv8m segmentation to RT-DETR-v2 (
ogkalu/comic-text-and-bubble-detector) — transformer-based detector with 3 classes:bubble,text_bubble,text_free - Overlays now clipped to bubble interiors via intersection logic — no more oversized masking regions
- Text-free detections (SFX, narration, floating text) are now detected and translated — previously missed entirely
- Upgraded
transformers>=4.50.0forrt_detr_v2architecture support - YOLO auto-disables after 3 consecutive failures, falls back to Gemini OCR
Overlay & Positioning
- Fixed scroll drift — overlays stay pinned after scrolling (removed scroll listener, use
position: absolutenaturally) - Fixed masking region width overshooting bubble boundaries
- Font size scales to rendered box dimensions with a floor of 10px — no more unreadable text
Rate Limit Handling
- Replaced 5-retry loop with: Flash → Flash Lite → stop
- Background broadcasts rate limit error directly to popup via
chrome.runtime.sendMessage— popup now shows the error toast instead of "Translation complete" - Processing stops immediately on rate limit; content script cleans up all overlays
Popup UX
- Replaced bottom status bar with Sonner toasts at top-center
- Custom themed toasts matching extension palette —
#C15F3Cfor errors,#4CAF50for success - Interior top-right ✕ close button, colour-matched per toast type
- Progress panel hides immediately on error or completion
- Removed unused
@radix-ui/react-slotdependency
Auth & Settings
- Google OAuth now opens in a popup window instead of a new tab
- Redesigned API key section with read-only display, show/hide, copy, and paste controls
Test Plan
- Add Gemini API key in Settings, click Translate on a manga page — overlays appear inside speech bubbles
- Scroll after translation — overlays stay pinned
- Trigger rate limit — popup shows error toast, not "complete"
- Click ✕ on a toast to dismiss manually
- With Python server running, verify SFX / floating text regions are detected
- Verify
/healthreturns `model_loaded: true