# Node Editor: Improve working with frame nodes I've been prototyping ways to improve the frame nodes which I tested together with users on devtalk. In this note I'm summarizing the results of the discussion. - **[Link to the Feedback thread on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241)** # Prototypes ## 1. Improved Parenting Based Frames This was my original proposal which aimed to improve some of thhe shortcomings of how parenting during transform currently behaves. ### How it works What we have works, but there are small issues that can be improved: * Make the hitzone for frame joining more intuitive (right now it's the cursor, which can be confusing) * Highlight frames that nodes are going to attach to * Allow detaching nodes with a shortcut so they can be attached to a different frame There's a more detailed description and a demo video in the [opening post of the feedback thread on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241). ### Feedback #### General The proposed improvements have been recieved very positively. So - if nothing else - the proposal correctly identified some issues. --- :::success **"Oh, yes, please. Great idea. It feels like I’m wasting years of my life framing and de-framing nodes"** *by [@Hadriscus on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/5)* ::: :::success **"very nice feature, no more alt+P"** *by [@Caner-Aslan on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/6)* ::: :::success **"I love this idea- it’s annoying to have to “unparent” a node to remove it from a frame. I love the idea of being able to do this while moving it, I’ve been wanting this functionality for a long time"** *by [@joseph on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/2)* ::: :::success **i would love to have this functionality [..]"** *by [@anurag_raturi on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/4)* ::: :::success **"It’s an amazing improvement !!"** *by [@sozap on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/5)* ::: :::success **"Just tested the patch. Works like a charm for me. And cannot think of anything what would speak against the change."** *by [@moshus on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/12)* ::: :::success **"If it was integrated into vanilla I would really like it. I would definitely use Frames more, too."** *by [@gorgious on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/14)* ::: #### Hotkey For Unparenting Some users were unsure about <kbd>Alt</kbd> being a good choice, since it is also used for the link insertion while others found that fact intuitive. --- :::success **"This is something that I have unconsciously done many times (ALT + drag a node out of a frame) since it resembles the ALT + unlink a node and keep the connection between its child and parent. Met with the frustrating realization that I have to ALT + P beforehand [...]"** *by [@gorgious on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/14)* ::: :::warning **" Using “alt” for both frame and socket parenting creates conflict. [...] Maybe using shift for frames alt for sockets solves this? (edit: just noticed when you drag then press alt sockets does not detach, so that might not be a problem)"** *by [@Caner-Aslan on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/6)* ::: :::warning **"One thing that I’m not 100% sure is I think the Alt key [...]"** *by [@sozap on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/5)* ::: #### Hit-zone For Attaching Nodes Using the center of the selection to indicate the frames isn't perfect, but it seems good enough that you can get used to it. --- :::warning **"When I drag a node to a frame it highlights when only more than half of the node enters the frame. I think it will be better as soon as it touches the frame it highlights, so we don’t need to drag the node all the way into the middle zone of the frame."** *by [@Caner-Aslan on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/6)* **"[It] is also difficult when dragging several nodes into a small frame it becomes a bit difficult to find highlighted position."** *by [@Caner-Aslan on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/15)* :::success **"Upon further playing around, I have quite gotten used to it. I think it is good as it is."** *by [@Caner-Aslan on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/18)* ::: #### Unparented nodes inside of frames One inherent issue that comes with explicitly parenting nodes to frames is that it allows for situations where nodes look like they are inside of a frame without actually being parented. --- :::danger **"[A]sk yourself if you would ever want to have a node which is inside of a frame, but not parented to the frame, the answer will most likely be no. In fact when the node is inside of a frame but not its child, it’s in most cases just an error, because you forgot to parent the node to the frame."** *by [@LudvikKoutny on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/20)* ::: ## 2. Frames Without Parenting This idea was brought up during the discussion on devtalk and is a bigger change to how frames behave. ### How it works The premise is "What you see is what you get". Every node completely contained by a frame will be affected by it. * Frames can always be resized to add and remove nodes * In shrinking frames nodes can be "detached" by pressing a shortcut during transform - non-shrinking frames don't change their size can always Check out [this post on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/48) on the specifics of how the prototype worked. ### Feedback #### General The ability to freely resize frames to add and remove nodes was overall recieved positively. The need to manually resize the frame wasn't seen as an improvement, but keeping the shrink option seemed to alleviate that. --- :::success **"To me the basics of the behaviour feel much more intuitive (although [...] there is some issues as you point out)."** *by [@txo on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/49)* ::: :::success **"[Resizing frames with shrinking enabled] is just great. You can move around the frame and the nodes follow it but still being able to transparently leaving them outside when resizing is awesome."** *by [@txo on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/49)* ::: :::success **"This is pretty great. How to say it - it doesn’t feel like I’m suggesting the editor what I want to do, and hoping it agreed. I’m just dragging things in/out of frames, dragging frames, and it’s just fluidly responding exactly as I want it to."** *by [@thorn-neverwake on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/51)* ::: :::success **"The easiness of adding and removing nodes, feels really good [...]"** *by [@moshus on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/32)* ::: :::success **"I kind of like this version too. It is easy to add and remove nodes."** by [@canerasln on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/34) ::: :::warning **"What annoys is to manually resize the frames all the time. [...] Keeping the shrink options with this approach gets rid of the annoying manual resizing. But unfortunately it makes the [node stealing] even worse.""** *by [@moshus on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/32)* ::: :::warning **"Manual adjustment is a bit pain, but shrink button on the side panel helps it."** by [@canerasln on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/34) ::: :::danger **"It feels quite different and probably a bit of time is needed to adapt to the change. [...] My first impression is that it’s a more controversial change that would probably work better if included as a whole revamp of the node editor."** by [@sozap on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/33) ::: #### Node Stealing The fact that nodes will now be moved with a frame even if just temporarily putting it over some other nodes was pointed out as an issue both on devtalk and Blenderartists. While the behavior makes sense it wasn't seen as desirable. --- :::warning **"Most people will considering having two partially overlapping frames to be an error, or at the very least messy workflow. It makes sense to have smaller frames fully contained withing large frames, to describe some sort of hierarchy of node clusters. But having partially overlapping frames [...] has 0 informative value in terms of visually commenting your node based code."** *by [by @LudvikKoutny on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/59)* ::: :::danger **"I think it should be considered that very frequently, node frames aren’t intentionally overlapping- it’s usually a side effect of adding a node. [...][This] is a very common un-intentional scenario"** *by [@josephhansen on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/64)* ::: :::danger **"One thing that is odd (perhaps a price to pay) - if I move a frame (empty, or with a ton of nodes) OVER another large group of nodes… suddenly, all those “second nodes” join the party of the first frame. [...] Perhaps a frame shouldn’t be able to … “claim parenthood” of a node that’s already parented to another frame?"** *by [@thorn-neverwake on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/51)* ::: :::danger **"The assimilation of nodes [...] can really become an serious issue. When accidentally placing frames on top of each other. That can create a great mess."** *by [@moshus on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/32)* ::: :::danger **"I don’t like the idea of having nodes stolen by other frames, especially since by design building very tight tree makes more sense"** *by [@sozap on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/41) ::: #### Resizing Tweaks The general idea did get some positive feedback, but the some specifics of the implementation do need tweaking. --- :::success **"Love the spacebar thing, is one of those little things that is really nice to have."** *by [@txo on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/49)* ::: :::warning **"I find the ALT and SPACE hotkeys to be a bit odd; [...] It does work, but I’m having to made multiple attempts each time to remember the way it’s done."** *by [@thorn-neverwake on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/51)* ::: :::danger **"Also from time to time it happens that i resize the frame when i want to move it."** *by [@moshus on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/32)* ::: #### Disabling link insertion by default :::warning **"Different than current behavior, but I’m not sure which I prefer. I can see both ways appealing (or not) to people. For myself, it seems like I often have nodes “joining” when I was literally just trying to move them around, so perhaps the ALT-to-join is a good idea."** *by [@thorn-neverwake on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/51)* ::: ## 3. Intermediate Conclusion It's not entirely obvious which option is better. Frames without parenting bring a lot to the table in terms of possible usability and the simplicity of the concept is very compelling. The inherent issue of "node stealing" is concerning, though. We don't have reliable usage data to really quantify how much of a problem it is, but it has been brought up independently by both small groups of users testing the prototype. On the other hand, the existing, parenting based frames have served Blender well for quite a while. Users are used to the idea and improving them by adressing some of the shortcomings really has no downsides. ##### Next Steps For now I'll see if there is a way to "get the best of both worlds" by testing which of the improvements of the parentless approach can be adapted while still enforcing the "one node, one frame" rule. From an implementation standpoint removing parenting made some unnecessary complexity apparent, but a lot of the simpifications I noticed don't seem to be directly tied to also removing the parenting itself, so this will also be a godd way to test that. ## 4. Synthesis Based on the feedback summarized above I settled on the following compromise: * **Keep the "one frame per node" (parenting) concept for now** There doesn't seem to be an actual usecase to have multiple frames claim ownership of the same node, so why allow it. * **Realize the "what you see is what you get" idea, while restricting it to not allow "stealing" nodes** This avoids situations where an (unframed) node is on top of a frame without being part of it for the most part. * **Allow resizing frames to add and remove nodes** This works with parenting as long as you accept that you can't steal nodes from other frames doing this. * **Allow unparenting nodes during transform by pressing <kbd>Shift</kbd>** Since the feedback on using <kbd>Alt</kbd> was a bit mixed, I thought it be good to give this a try as an alternative. The improvements to frame resizing (Increased hitzone for resizing, <kbd>Space</kbd> to move etc.) are still included. ### Feedback Overall it seems like the compromise works as desired. #### General :::success **"OK, this is GREAT. :grin: The shift hotkey to unparent is a godsend, since I don’t have to reach for the “unparent” hotkey anymore. [...] And there’s never the ambiguous case where a node is over a frame but not parented to it. It doesn’t seem like much, but in practice it’s many small mental burdens lifted off of me."** *by [@Hadriscus on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/69)* ::: :::success **"Overall shrink behavior [...] works well"** *by [@thorn-neverwake on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/70)* ::: :::success **"Other than [a bug reported in the thread], I really like it."** *by [@txo on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/71)* ::: :::success **"Overall this works really well for me. Keeping the parenting to avoid stealing was a smart decision. Good work!"** *by [@moshus on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/46)* ::: :::warning **"One small thing i noticed, that do not work for me that well is: When linking a node at the bottom of the frame it do not get parented by it."** *NOTE: This is referring to a node not being added to a frame when it only partially overlaps it.* *by [@moshus on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/46)* ::: #### Node Stealing :::success **"Node stealing seems to be completely resolved. It picks up orphans off the “pasteboard”, but I’ve no problem with that whatsoever."** *by [@thorn-neverwake on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/70)* ::: #### Frame Resizing :::success **"Repeating, just because it’s great and I love it: the “click border” on frames, so much easier to grab than release build."** *by [@thorn-neverwake on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/70)* ::: :::success **"[The hitzone for frame resizing] seems to be better. At least resizing instead of moving did not happened that often to me anymore."** *by [@moshus on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/46)* ::: ## 5. Conclusion Overall the compromise seemed to be well recieved and align with what users expected and desired from the system. # Additional Ideas That Came Up *I added my thoughts as subpoints.* ### General - Adjust margin of the "Frame Selected" (and "Frame All"?) operator. *-[@txo on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/71)* - Improve naming of the "Copy Color" operator for node colors. *-[@txo on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/71)* - Preference to determine the default label size. I know I always make it bigger. *- [@txo on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/49)* - Maybe just making the default bigger is good enough? - An option to create each frame directly with a random color, and avoid having to tweak each one of them always *- [@txo on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/49)* - Have a redo pannel for the join operator? - "Add Frame" active tool? (see below) - What about an "Random Color" overlay for frames similar to the random object color in the viewport? - "Add Frame" active tool, as well as sdditional active tools for the node editor in general *- [@HooglyBoogly on devtalk](https://devtalk.blender.org/t/testing-wanted-for-joining-nodes-into-frames/28241/43)* - I've started to collect a few ideas here: https://hackmd.io/6iI1xBroRhaAkyTF90IuSQ?view ### Specific to the proposal - Adding a small shrink icon on [...] all frames would be really nice *- [@canerasln on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/34)* - An indicator for which frames do shrink sounds good to communicate the behavior in advance - An Operator to set/unset "Shrink" for all frames - *[@moshus on blenderartists](https://blenderartists.org/t/feedback-wanted-on-parenting-nodes-to-frames-during-transform/1456783/46)* --- ###### tags: `blender`, `nodes`