Post

GSoC 2025 - Week 1

The official coding period for GSoC 2025 started on 2nd June 2025. Here is the Week 1 update for my project:

In the meeting with my mentors Brady Johnston and Yuxuan Zhuang during the community bonding period, we discussed about several details of the project and agreed that the code written as part of this project will reside in the MolecularNodes repo.

I started off with a GSoC 2025: High level structure to start with (#870) discussion to outline what I would begin with. Based on these discussions, I created a Basic universe management APIs and GUI (#877) PR. This PR added the following things:

  • A base class for MDAnalysis visualization (MDAVis)
  • A UniverseManager class to manage MDAnalysis universes added to Blender
  • A UniverseView class that is responsible for all display aspects of the universe in Blender
  • APIs to add / delete / list / get / clear universes
  • Subscriptable and iterable access to the added universes using UniverseManager for easy data access
  • GUI within Blender for listing and managing (add / delete) the universes and Trajectory info
  • An example notebook that shows all the APIs added
  • Tests for all the new APIs
  • Documentation setup to pull all new APIs added under these classes

Here is a short video that shows the progress made so far:

There were several new things I learnt during this week. Here is a list of a few of them:

  • __init__ will get called everytime a singleton class is instantiated, so this needs to be guarded to prevent any repeated initializations
  • Blender’s bpy.msgbus.subscribe_rna method to subscribe to RNA property changes
    • How they have to be re-subscribed during new file loads using bpy.app.handlers.load_post.append
  • Blender’s collection property can be looked up by name using the find method, but the key name is immutable, so it needs to be saved for O(1) lookups
  • _ipython_key_completions_ method that allows key completions in IPython - for subscriptable access, __dir__ method to control what attributes can be shown and __iter__ for iterable support
  • Blender’s support for mix-in classes to simplify UI panelss
  • Showing a confirmation dialog (window_manager.invoke_confirm) or a properties dialog (window_manager.invoke_props_dialog) while invoking Blender operators, concept of the poll that determines panel visibility
  • A bit about pytest - setup and cleanup using fixtures (and yield) and writing basic tests
  • A bit about quarto for documentation
  • Jupyter Notebooks with Blender kernel and caveats

Next week, I plan to start working on styles support. I started a GSoC 2025: Styles support for MDA Universes #879 discussion to outline some of the approaches.

This post is licensed under CC BY 4.0 by the author.