GSoC 2025: Adding handy features and UI improvements to Flamenco

Name

Vivian Leung

Contact

Blender chat: @vivz753

Synopsis

Flamenco has essential functions for managing and viewing render jobs, however, it could benefit from additional features that could speed up the workflow and improve the user experience. Taken from two of Blender’s project ideas for GSoC 2025: Web Configuration and Polish & Shine which both have the proposed mentor Sybren Stüvel, I plan to implement the following features: 1) a YAML configuration editor 2) mass job deletion and 3) UI-related bug fixes that are flagged in the Issues page.

Benefits

Studios that use Blender and are seeking to maximize their render efficiency with Flamenco will find these features handy, especially as the amount of renders scale and ease of management becomes essential. Artists who are unfamiliar with the scripting languages that come with custom tooling may find it daunting to configure or troubleshoot Flamenco. Additionally, these features aim to reduce the likelihood of unexpected errors, stall times, and redundant renders, allowing teams to move quickly and confidently especially in cases where design changes are introduced or the discovery of an unwanted detail occurs after multiple jobs have already been submitted.

  • By adding a configuration editor, users can easily edit and visualise the YAML file through an easy-to-use form. It will provide validation for the config options using inputs, dropdowns, and switches, and confirm with the user before being applied. This will prevent erroneous inputs and improve users’ understanding of settings options, and is an improvement to the original method of editing YAML files which requires users to make changes in a text editor.
  • By adding a mass job deletion feature, users can easily clean up multiple render jobs on the Flamenco web app, making large job sets more manageable.
  • By adding UI-related bug fixes, the app will provide an overall improved user experience.

Deliverables

1. Add YAML Configuration Editor Issue #99426
1. Add a tab for where a user can retrieve, edit, visualise, and save the configuration
2. Add validators for the config options, so changes can be checked before taking hold
3. Optionally (if time allows): a way for Flamenco Manager to load & apply the config w/o restarting the process
4. Optionally (if time allows): a custom job type for validating config paths, so that, for example, a macOS path can be actually checked on a Worker running macOS
2. Add a function for the mass deletion of jobs
3. Fix several issues from the tracker regarding cosmetic tweaks to the web interface UI/UX
4. End user documentation

Project Details

Deliverable 1: Mockup for the YAML Configuration page using settings based on Flamenco v3

This forum limits the amount of images allowed for new users to post.
For the latest mockups, view the Figma.

Currently, someone already has a PR #104372 for a backend API call to update the YAML file. I will reach out to see if I can lead the frontend and combine our efforts, otherwise pursue any and all unfinished parts.

Deliverable 2: Mockup for the mass job deletion feature

Description: Users should be able to delete a selected job and all the ones preceding it. First, they can select the job, click “Delete Preceding Jobs”, and confirm with the pop up modal. Clicking “Delete” will trigger an API call which marks all jobs older than a certain timestamp for deletion.
Hovering over the button will display a tooltip that describes its functionality.

Project Schedule

This will be adjusted as needed, and is based on the latest meeting agenda.

Finish up open PR’s (within next 2 weeks)

  • multi-select for Tasks
  • freeze the UI when holding shift
  • multi-select for Jobs
  • multi-select for Workers

First iteration (4 weeks):

  • Start working on YAML config editor (primary)
  • Work on multi-select for jobs and workers (secondary)

Second iteration (2 weeks):

  • Keep working on YAML config editor (primary)
  • Work on mass job deletion (secondary)

Third iteration: (2 weeks)

  • Keep working on YAML config editor (primary)
  • Work on any UI related issues i.e. resize handlers (secondary)

Final iteration: (2 weeks)

  • Write end user documentation
  • Test cases

Bio

My name is Vivian and I received a B.S. in Software Engineering at San Jose State University in 2019. I have 3 years of experience doing web development, and am looking for interesting projects to build my skills in the meantime as I take a break from working in the industry. In my free time, I paint and draw in traditional and digital mediums. Last summer, I took an Introduction to Blender course where I learned to model, light, and render an Italian Food Truck.
Javascript, HTML, and CSS are my strongest languages, and I am comfortable in C++ and Python when needed. I am new to Go, and am currently studying the language as I familiarize myself with the Flamenco API. In my work experience, I have built libraries for a wide range of custom web components. For a samples of my frontend work, see https://carrotsandhummus.art, an e-commerce store with UI/UX inspired by Neopets, BEA Technologies, a product landing page, and Materials Designer, a prototype I built in five days, with UI/UX inspired by classic terminal themes, which features a 3d visualizer and text editor for manipulating crystal lattices.

I am constantly looking for opportunities to unite my artistic intuition with my engineering background and was happy to see Blender on the GSoC approved organizations. It is my first time participating in GSoC and seeing that Blender has projects involving web technologies, I see it as a great chance for me to make a meaningful contribution, learn Go, and receive quality mentorship.

1 Like

Month 0 Week 3, May 19 - 23 (GSoC officially starts June 2)

This past month I have already begun working on contributing to the code for Flamenco to fix minor bugs and add functionality for multi-select on the Tasks table.

The following PR’s have been merged to do the following:

  • #104379 Adjust width for name column in Tasks table
  • #104383 Add key directives to HTML elements
  • #104387 Update dev docs
  • #104390 Update package

The following PR’s are ready to be merged:

Next, I will work on adding multi-select functionality to the Jobs and Workers table.

In terms of research, I learned about Promise.all and adding key listeners to Vue.js components. I discussed various designs with Sybren for both the frontend and backend changes required to implement multi-select, and after a lengthy conversation of 29 comments on #104386, we concluded that:

  • the API calls for task actions are best left alone, as they already follow the conventional standard for handling one entity (task) at a time, and to handle multiple actions we can concurrently make API calls for multiple tasks by using Promise.all, and even better, Promise.allSettled which runs through every promise even if there happens to be a reject.
  • It would be good to decouple the Task clicking side-effects (i.e. route to taskId, fetch task details, update the table if any task changes) from JobsView and encapsulate them inside of TasksTable. This was a bit tricky, like untangling many strings, and the code felt much cleaner afterward.
  • Multi-selection works similarly like general file browsers and explorers, so Shift + Click for range selection and Ctrl + Click for toggling selection were implemented. Ideally, it would match the Blender explorer perfectly (i.e. Shift + Click is not only additive but subtractive, Ctrl + Click can be used to toggle a selected item to be active) but those specifics will be reserved for a future implementation.
  • It would also be good to freeze the UI and prevent task rows from moving around (as they are ordered in ascending order by last updated timestamp) while a user is in the middle of trying to do a multi-selection (holding the Shift key down).
1 Like

Month 0 Week 4, May 26 - 30

#104386 Webapp: Add multi-select of tasks and support actions for multiple tasks has been merged! I am very proud to have landed this with the encouragement and guidance from my mentor :slight_smile: . Now that most of the design questions have solid answers for how to implement multi-selection, it isn’t too difficult to apply the same principles for adding multi-selection to the Jobs and Workers tables.

The following PR’s have been opened and are waiting to be reviewed:

  • #104391 Jobs table: Add multi-select and support actions for multiple items
  • #104394 Add a test script to add a mock Worker
  • #104395 Workers table: Add multi-select and support actions for multiple items
2 Likes

Month 1 Week 1, June 2 - 6

In today’s meeting agenda, Sybren and I discussed wrapping up the multi-select PR’s and moving on to focus on the YAML config editor. I discovered and filed an issue #104398 regarding a race condition when deleting multiple jobs. That along with the task of refactoring duplicate Tabulator code across Workers, Jobs, and Tasks table will be backlogged as secondary tasks.

The following PR’s have been merged to main:

  • #104394 Add a test script to add a mock Worker

These PR’s are wrapped up and ready to be merged after a final review:

  • #104388 Tasks Table: Freeze sorting on Shift key down
  • #104391 Jobs table: Add multi-select and support actions for multiple items
  • #104395 Workers table: Add multi-select and support actions for multiple items

The following PR’s have been opened and are WIP:

  • #104397 Refactor Tabulator Table initialization and functions
  • #104399 Add UI for YAML Configuration Editor

Month 1 Week 2, June 9 - 13

Today’s meeting agenda was quick. We discussed the continuation of work with the ongoing PR’s and Sybren and I troubleshooted Flamenco on the WSL environment on my Windows PC.

We quickly realized there was a typo in my flamenco-manager.yaml and the issue lied in the fact that Blender lived on Windows. The Flamenco Manager is only programmed to work with Blender in the same environment as it is run in, so I’ll try downloading Blender on WSL to see if that solves the issue.
Just in case I’m not able to get it to work, I also set up the dev environments for Flamenco on an old iMac and successfully rendered a job from Blender with a working animated cube/sphere! However, the iMac’s system software is limited to High Sierra 10.13.6, which most software has moved on from and no longer supports it. It was also only compatible with an older version of Blender (v3.3 and below), which unfortunately prevented me from rendering my current Blender projects (which required v3.6 and above).

As for the PR’s, their statuses as mentioned in the last post remain the same, with
#104391 Jobs Table: Add multi-select and support actions for multiple items
and #104388 Tasks Table: Freeze sorting on Shift key down
being just around the corner from being merged into main.

#104399 Add UI for YAML Configuration Editor, will be the main focus of the upcoming week, and #104397 Refactor Tabulator Table initialization and functions will be worked on once all multi-select PR’s are merged to main.

My progress so far on #104399:

  • Added a link on the navigation of Flamenco to access the YAML Config page
  • Implemented the form UI for editing the settings
  • Added a sticky side dialog (scrolls down with the user) to provide useful descriptions for each form input
  • Added a sticky nav (scrolls down with the user) and provides links to jump to each category

This week, I aim to dynamically render the proper form input (switch, dropdown, text input), based on the type of input expected for each, so that the code is a lot more readable and less redundant. Definitions for each input type will also be displayed to the user in the side dialog.
As a part of defining the input types and their definitions, I opened
#104400 - Add definitions for settings on the manager-configuration page on the project website last week.
With Sybren’s help and code comments from internal/manager/config/config.go, I added definitions for each attribute of the flamenco-manager.yaml file and together we refined the language and format to provide concise descriptions that will be useful to both developers and non-developers.