Nucleate - 2025-11

Monthly Devlog: UI Migration and Animation Optimization

Overview

November was focused on two major themes: migrating the UI framework from Tkinter to PySide6 to enhance user experience and robustness, and refining Blender-based animations for the splash page and app visuals. Alongside these, I worked on integrating AI engine controls, improving dark mode support, and addressing key performance and usability challenges. The month involved balancing ambitious feature goals with practical performance constraints and laying groundwork for future UI polish and workflow improvements.

Highlights & Progress

Animation & Visuals

  • Completed 7 out of 10 planned animations using Blender geometry nodes, targeting simple top-down 2D crystal-style visuals at 12 fps with ~240 KB per frame.
  • Explored Blender’s NLA track editor for multi-layer rendering and compositing on the splash page animation; however, this caused slow load times and GUI hangs.
  • Decided to prioritize simpler animations for smoother performance and began investigating direct GIF export from Blender to speed up workflow despite some quality trade-offs.

UI Framework Migration & Features

  • Migrated core UI framework from Tkinter to PySide6, gaining access to advanced features like tooltips, hover actions, buttons, signals, and threading.
  • Created reusable control panels with API-checking widgets for Notion, OpenAI, and Obsidian integrations.
  • Implemented Obsidian vault directory detection by checking for the presence of a .obsidian folder.
  • Developed a new scroll text class that overlays fake scroll bars on hidden native scroll bars to fix scroll behavior issues in dark mode.
  • Added status indicators for download completion and connection success, though error handling remains an area needing improvement.
  • Refactored the AI engine settings panel, introducing a llama model selection interface with recommended and custom options.
  • Separated business logic from UI code across multiple panels to improve maintainability.

Dark Mode & UX Enhancements

  • Implemented dark mode styling in most GUIs of the Nucleate app, inspired by GitKraken’s high-contrast style.
  • Began learning Qt’s buttons, signals, and threading to reduce errors and accelerate development.
  • Debated UI improvements such as looping GIF animations in the navigation tree and splitting side panels into persistent vs. frequently refreshed content for better UX flow.

Project Management & Strategy

  • Considered releasing a beta Tkinter version if PySide6 complexity proves too high.
  • Evolving pricing strategy toward a lower entry point with beta discounts to encourage early adoption.
  • Postponed features like cached files deletion and user-defined folders until after core dark mode work is stabilized.

Reflections

  • The PySide6 migration, while challenging due to a steep learning curve, has significantly improved UI robustness and opened up richer interaction possibilities.
  • Blender’s multi-layer animation approach, though visually compelling, introduced unacceptable performance bottlenecks, prompting a necessary shift toward simpler animations and alternative export methods.
  • Separating business logic from UI code was a productive step toward cleaner architecture and easier future enhancements.
  • Dark mode implementation was smoother than expected, especially with inspiration from existing high-contrast designs, but scroll behavior required a creative workaround with fake scroll bars.
  • Error handling in integrations like Ollama remains fragile and unclear, highlighting the need for more robust feedback mechanisms.
  • The ongoing debate about UI panel organization and memory persistence reflects a broader tension between performance optimization and hardware compatibility that will need careful balancing.

Next Steps

  • Optimize Blender animation pipeline with a focus on direct GIF export and simpler animation layers to reduce load times and UI slowdowns.
  • Continue refining PySide6 UI components, especially dialog systems for integration panels, to improve modularity and user experience.
  • Enhance error handling clarity and robustness across AI engine integrations and network-dependent features.
  • Explore UI side panel redesign to separate persistent content from frequently refreshed elements, improving workflow efficiency.
  • Finalize dark mode customization options and prepare for a second round of UI polish based on user feedback and internal testing.

Keynotes

Decisions & Observations

  • Decided to prioritize simpler Blender animations and direct GIF export to improve performance and reduce UI slowdowns.
  • Created reusable control panels with API-checking widgets and implemented Obsidian vault detection.

Issues & Next Steps

  • Needs to resolve fragile and unclear error handling in AI engine integrations and network features.
  • Will explore redesigning UI side panels to separate persistent content from frequently refreshed elements for better workflow.
  • Will continue refining PySide6 UI components, focusing on dialog systems for integration panels.
  • Will finalize dark mode customization and prepare for further UI polish based on feedback and testing.
  • Considering releasing a beta Tkinter version if PySide6 complexity proves too high.

Uncategorized Notes

  • Migrated UI framework from Tkinter to PySide6 to leverage advanced features and improve robustness.
  • Developed a custom scroll text class with fake scroll bars to fix dark mode scroll behavior issues.
  • Separated business logic from UI code to enhance maintainability.

Generated with Nucleate by Watchlight Studio — distilled from full transcription.