Correct.
The number of inputs your client registers is random, with a bias depending on the size of your existing utxo set.
The group of inputs your client registers is random, depending on the anonscore calculated for each utxo and the value of the utxo.
The number of outputs your client registers is random, depending on how many possible decomposition there are.
The value of outputs your client registers is random, depending on the value of other users input, and the sum value of all your inputs.
There are a lot of different possible input and output groups, we remove those that are very expensive, and pick randomly from the rest.
Here is a bit more thorough explanation from a year ago, there have been numerous changes and improvements since though.
https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2022-April/020202.html