# Group Default Node [Proposal]
This proposal presents a solution to the following two problems:
1. The default value for node group inputs can only be single values. They can't be fields or other more complex things. Some built-in nodes have a field as input by default (e.g. Noise Texture), so node groups should have the same capability. Having a more powerful system for defaults allows building easier to use assets.
2. Sometimes, when changing the default value of an input, one wants that all users of the node group are updated to use the new default value (unless it was explicitly changed).
## Inside the Node Group
Key to more flexible group inputs is the introduction of a new **Group Default** node. It's a bit similar to the Group Output node, but it has the inputs of the node group as sockets. There should be at most one *Group Default* node per node group.
![](https://i.imgur.com/bq8uw9N.png)
This node controls the default value of every group input. I can still be possible to change these values in the side bar of course for convenience or when the Group Default node has not been created yet.
Exposing the default values as sockets opens up new possibilities. For example, typically noise nodes have the position attribute as implicit default. Using the *Group Default* node, getting that behavior with a node group is as simple as connecting the *Position* node to the Vector input.
![](https://i.imgur.com/IxHrLmP.png)
Another common example would be to use a noise texture as default value. For example a simple Displace node group could be build as shown in the next image. The important new aspect is that it has a noise texture by default, but it can be easily overridden by passing in a different texture.
![](https://i.imgur.com/x7qzrCT.png)
## Using the Node Group
The group node (or modifier ui) works the same as before, if there is no Group Default node in the node group. If this node exists, there are two different cases for each socket:
* It is *unlinked*, so the default value is visible in the Group Defaults node directly. For such a socket, the behavior is the same as if the Group Default node would not exist. See for example the Scale input in the image above.
* It is *linked*. In this case the parent group node will not show the value, because it is controlled by the node group.
TODO: Problem is, when creating a new input, it is not connected to anything in the Group Default node. So the value will be copied to all user. We will probably need some way to indicate that a value is currently controlled by the group.
## FAQ
* Multiple Group Defaults nodes.
* Use Group Input to control Group Defaults node.
* Reuse Group Input node.
* Preset System.