Skip to content

v0.4.0

Latest

Choose a tag to compare

@Anionex Anionex released this 09 Feb 11:28
· 115 commits to main since this release

Banana Slides v0.4.0 brings internationalization, dark mode, a redesigned editor experience, and dozens of quality-of-life improvements.


Highlights

✏️ New Editor Experience

  • MarkdownTextarea — A brand-new rich editing component with inline chips, formatting toolbar, image preview, and markdown-to-chips conversion on paste. Now user can paste images whereever in homepage, outline editor or description cards and they will be processed instantly.
  • OutlineEditor Redesign — Split-view layout: left panel for editing raw outline/description text, right collapsible drawer for structured outline cards.
  • Glassmorphism UI — Modal and MaterialGeneratorModal redesigned with a modern glassmorphism aesthetic.

🧮 LaTeX & Image Paste

  • Inline ($...$) and block ($$...$$) LaTeX formula rendering via KaTeX in all Markdown views.
  • Paste images directly from clipboard in description editors — they are auto-uploaded as materials and inserted as markdown image links.
  • Uploaded images now get AI-generated captions (Gemini / OpenAI) used as alt text.

🖼️ Material Center

A dedicated Material Center modal for browsing, filtering by project, batch selecting, bulk downloading (as zip), uploading, deleting, and previewing materials.

⚡ Performance

Frontend image loading optimized with compressed JPG thumbnails (cached_image_path). Originals are preserved for export quality.

🌍 Internationalization & Dark Mode

Full Chinese/English bilingual support powered by i18next, with light / dark / system theme switching. Every component has been adapted for dark mode.


Features

  • i18n + Dark Mode (#196)
  • MarkdownTextarea, OutlineEditor redesign, glassmorphism UI (#206)
  • LaTeX rendering, image paste, and AI captions (#203)
  • Material Center and Help Modal — Paginated onboarding guide, auto-shown on first visit (#53)
  • Image cache optimization — Thumbnail generation for faster frontend loading (#151)
  • Export quality assurance — "Allow partial export" toggle (default off), fail-fast with detailed error messages and help text (#190)
  • Settings service testing — One-click connectivity tests for Baidu OCR, text model, caption model, image generation, and MinerU PDF parsing; supports testing unsaved settings before saving
  • Editable outline & description in SlidePreview — Edit title, points, and description directly in the preview modal
  • Export outline & description to Markdown
  • Manual chapter (part) editing in outline (#194)
  • AI reasoning mode — Independent enable_reasoning toggles for text and image generation; Vertex thinking_budget support (#160)
  • Resolution mismatch detection — Warning dialog when image generation resolution doesn't match settings; OpenAI extra_body params for resolution control
  • Docker multi-arch — amd64 + arm64 builds
  • Pre-built Docker image deployment option
  • PPTX metadata — Author and date metadata in exported files

Bug Fixes

  • Export directory not created — Relative path caused PDF/PPTX export to fail with 500 (#201)
  • Reference files not available during generation — Files were associated after AI generation completed; now associated before (#201)
  • Image generation page data mismatch — Filtered page_ids caused outline data to be zipped with wrong pages (#201)
  • Stale closure in task polling — Switching projects caused polls to query the wrong project (#201)
  • Infinite polling on description generation failure — Added retry limit (#201)
  • Path traversal vulnerability — Export filenames and /files/ paths sanitized with secure_filename / os.path.abspath (#201, #206)
  • Export path double-joinget_absolute_path() wrapped an already-absolute path, causing 500
  • Memory leak — Object URLs not revoked in image previews (#201)
  • Description generation race condition — Now uses API response data directly instead of reading from store
  • Database session staleness — Expire session before export to prevent stale reads (#183)
  • Baidu OCR config — Read API key from Flask config (database settings) instead of only environment variables (#190)
  • Silent error swallowing — MinerU / Baidu OCR extraction failures now propagate to frontend (#190)
  • Image path sync — Added retry mechanism in pollImageTask
  • Batch delete — Use Promise.allSettled to handle partial failures (#201)

Improvements

  • Hover tooltip with format examples for outline/description creation tabs (#202)
  • HTTP error codes (503, 500, 429, etc.) show user-friendly localized messages (#202)
  • Modal: always show close button + Escape key support (#202)
  • Toast: new warning type, improved stacking, no header overlap (#202)
  • Stale project IDs silently cleaned from localStorage (#202)
  • Removed intrusive "service test tip" toast on first project creation (#202)
  • PORT renamed to BACKEND_PORT for consistency
  • Default text model updated to gemini-3-flash-preview

Infrastructure

  • GitHub Actions workflow for automatic README Chinese → English translation
  • E2E tests adapted for i18n (locale=zh-CN)
  • Test fixtures updated for open-source codebase (#204)
  • Docker: IN_DOCKER=1 set in backend Dockerfile

New Contributors

Full Changelog: v0.3.0...v0.4.0