GSOC 2023: UV Editor Improvements

Hi, I’m Melissa! I’ll be working on some improvements to the UV editor and using this topic to post updates. I’m a newcomer to both open source and to Blender, but I’m excited to contribute to a program that makes art accessible to everyone! Parts of my proposal are included below, but you can find my full proposal here: GSOC 2023: UV Editor Improvements.

Feedback topic: UV Editor Improvements Feedback/Suggestions


The goal of this project is to implement user-suggested improvements to the UV Editor tools in order to help users create UV maps more easily. The main focus of the project would be incorporating more Mesh Edit tools into the 2d UV Editor such as Edge Slide, adding optional visible outlines to the UV islands as well as including the number of vertices removed by the Merge by Distance operator. Additionally, other small features that improve the user experience may be worked on if time allows.


The addition of more of the pre-existing Mesh Edit tools to the UV Editor would allow users to manipulate UV maps more quickly and easily, improving the UV Editing workflow overall. Adding optional outlines to UV islands allows users to easily distinguish between islands boosting productivity. Furthermore, including the number of vertices removed simply extends the pre-existing functionality, providing convenient information especially for users working with high polygon meshes in the UV Editor. Ultimately, the project would introduce multiple quality of life improvements to the UV Editor.


  • Adding Edge slide to the UV Editor: branch
  • Adding visible outlines to UV islands
  • Create popup for number of vertices removed when Merge by Distance is applied to UV map: branch
  • Additional task: Select Random for the UV Editor: branch
  • Potential additional tasks:
    • Adding other Mesh Edit tools to the UV editor as suggested by the community
    • Other features based on community suggestions
  • End-user documentation

Report Week 1

After discussing with my mentor, we decided to re-order the tasks, starting out with the easier ones. As the creating popup for Merge by Distance would be more complicated than initially expected, we decided to begin by adding Select Random to the UV editor. Overall, last week consisted of:

  • Looking through and trying to understand uv_remove_doubles_to_selected in
  • Looking at the select random operator in as well as overall to figure out how to implement Select Random for UVs
  • Implementing Select Random (incomplete as sync selection is unsupported) and pushing the changes to this branch.

Goals for this week:

  • Complete the Select Random feature
  • Begin the next task after a discussion with my mentor

Report Week 2

This week I focused on fixing my implementation of Select Random based on feedback from my mentor. This needed to be done as UVs connected to multiple faces were more likely to be selected. As suggested, I utilized element maps to try to solve this issue and spent time figuring out how they work and how to use them. However, due to family visiting I was not able to spend as much time working on it as I wanted to.

Overall, I did not complete as much as I wanted to this week, so my main goal for this coming week is to finish the Select Random operator and hopefully start the next task.


Report Week 3

This week I completed the revised version Select Random operator, and I plan to submit a pull request after any final adjustments, pending feedback from my mentor. I also looked over the existing code for the edge slide tool and revisited the merge by distance pop up deliverable.

Overall, Select Random took longer than I expected but it was worthwhile as a learning exercise and allowed me to feel more comfortable with Blender development although I still have a lot to learn. I also wasted a lot of time due to a misunderstanding I had, and plan to double check regarding important details in the future.

In the following week, I will be travelling so I will not be able to do much. However, if I have time I would like to try to start the merge by distance pop up and maybe further understand edge slide.


Report Week 4

As mentioned previously, I didn’t do much this week due to travelling.

This week I plan to begin on the Edge Slide feature.


Report Week 5

This week I completed the popup for the Merge Doubles operator as well as began working on the Edge Slide feature. As suggested by my mentor, I approached the Edge Slide feature iteratively, starting with simpler versions and getting more complex.

Overall, I’m happy with the progress I made last week and will continue working on the Edge Slide feature in the following week.


Report Week 6

This week I continued to work on the Edge Slide feature, creating a basic implementation which allows the user to slide selected vertices between two arbitrary adjacent vertices.

The next steps in order to create a functional edge slide would be to first order the array of vertices by their connectivity within each group of edges which then makes it simpler to later choose which edges to slide along. This and choosing which edges to slide along will be what I’ll be working on this week.


Report Week 7

This week I completed a basic implementation of ordering the array of vertices by connectivity and made progress on the choices of edge to slide along. In the following week, I’d like to finish choosing and having the correct ordering of the slide edges and improve my implementation of the ordering of the array to include more complex cases. I’d also if possible like to start working on cases where the edge is being moved towards a direction defined by the adjacent edges rather than towards one side or another.


Report Week 8

This week I improved and simplified the way I handled building the array of vertices to include more cases. I also implemented checking if the side loops of adjacent vertices are on the same side or not and flipping them if they aren’t. Overall, this has created a mostly functional edge slide feature with a number of areas for improvement which I will be working on this week.

Areas for improvement:

  • Handling of degenerate loops when building array and certain cases of circular loops
  • Improvements in the way directions to slide along are picked, this includes:
    • Generally improving which sides are picked in normal cases
    • Including the ability to slide in a direction rather than just towards an adjacent vertex

These may not all be finished by this week as some things may be somewhat complicated.


Report Week 9

This week I worked on handling degenerate loops and improving the side picking. These aspects, while functional, could still be improved and I plan to work with my mentor this coming week to improve them. Other than that I also integrated what I have with the transform logic to make it more interactable.

This week I plan on fixing any bugs I come across and working on generally improving my code.


Report Week 10

This week I worked on fixing any bugs I came across and generally cleaning up. I submitted pull requests for the edge slide feature and the other features I worked on during the coding period which can be seen here:

This week I plan to work on any further improvements based on feedback from the PRs as well as general improvements suggested by my mentor.


Report Week 11

This past week I mainly worked on fixing any bugs and formatting issues in the edge slide feature based on feedback from the PR, and as a result, it is working a lot better. I also added support for changing the ratio of randomly selected elements and random deselect to the select random feature.

In the following week, which will be the final week for any major changes, I plan to work on further improving the edge slide feature and adding any final improvements to all 3 features.


Report Week 12 - Final coding week

This week was the final week of this project and I worked mainly on adding support for sliding in an average direction for UVs that have more than 4 edges connected as well as fixing the edge slide feature based on feedback from the PR.

Overall I am happy with my progress with all of my features and how much I have learned through GSOC as a whole. As it stands now, my features are unlikely to be merged into main before the coding period ends, but I would like to continue working on them after. This coming week, I plan to write up my final report for GSOC.


Final Report - UV Editor Improvements

Project Summary

During this summer I worked on 3 features for the UV Editor:

  • Select Random
  • Adding a popup showing the number of UVs merged by the Merge by Distance operator
  • Edge Slide

Links to the pull requests for these features, which include demonstrations can be found in this previous post.
While the Select Random operator was not part of my initial proposal, after a discussion with my mentor, Campbell, at the beginning of the coding period we determined it to be a good starting point to get me acquainted with how UV editing works.


Select Random
This feature allows users to select or deselect random UV vertices, edges or faces. This can be modified by changing the seed and ratio for the selection, allowing users to select more or less. It also provides a random selection when sticky mode is disabled.

This feature proved to be more involved than initially expected and was the most challenging part of the summer for me. Overall, progress was slow at first and I lost some time due to my own misunderstandings, but I got a much better grasp of working with UVs as well as learnt the importance of good communication, so I’m glad I did it.

Merge by distance popup
This was a relatively small change, adding a popup that displays the number of UVs merged when using the Merge by Distance operator in the UV editor. This was quite simple, although it could be handled in a more elegant way.

Edge Slide
This feature allows users to slide UV edges towards adjacent vertices similar to the edge slide feature in the 3D viewport, making the editing of UV maps easier. The amount of sliding can be adjusted by changing the factor.

This feature took the longest, however, thanks to the guidance of my mentor, there was consistent progress and working on it was an enjoyable experience. He suggested I work on this feature in smaller functional chunks that I could build on, and that process worked well for me and made the project more manageable.

What still needs to be done

  • All features need to be cleaned up or modified according to feedback from pull requests before merging into main.
  • In the case of UV Edge Slide specifically, it will need to be integrated into the existing Edge Slide mode.

I will continue tweaking things during the coming Fall semester, and possibly making larger changes if time permits.


Thank you to Campbell for his continued guidance and patience throughout this project!