Recent Posts

Tame Your Video Chaos: Master Smart Bins in Davinci Resolve

  Tame Your Video Chaos: Master Smart Bins in Davinci Resolve Are you drowning in a sea of clips? Is your media pool looking more like a cluttered closet than an organized workspace? Fear not, young video editor! There's a superhero tool waiting to save your sanity: Smart Bins. Imagine a magical sorting hat for your video clips. That's essentially what Smart Bins are in Davinci Resolve. These nifty little features automatically filter your footage, making it a breeze to find exactly what you need. Let's dive in and discover how to harness their power. What are Smart Bins? Think of Smart Bins as automated file folders for your videos and audio. They sort your media based on specific criteria, like whether a clip has been used, its audio type (dialogue, music, effects), or even its frame rate. This means less time hunting through endless thumbnails and more time unleashing your creativity. Getting Started with Smart Bins First things first, make sure Smart Bi...

Moving Controls to a Different Page Tab

I am already losing track of what I have posted and what I haven't, after all, I am just emptying my head here.

We have repositioned controls in the inspector and now we are going to place different controls on different page tabs. 

First, what is a page tab? 

I have heard them called pages and also tabs so to clarify they are situated at the top of the inspector. The two default page tabs are "Controls" & "Settings" as they seem to be nearly always there. However, pull in a Text+ to the timeline and you see "Text" "Layout" "Transform" "Shading" "Image" and "Settings". There is also the "User" page tab which can be added in the "Edit Controls" panel, 


You may have noticed that this blog post is sponsored by "quotation marks"!

Why would I want to do this?

  • Separate categories of controls
  • Too many controls in the inspector
  • When rigging, have a "Global" settings page tab
  • It's cool!

To set this up you can start in the "Edit Controls" panel inside Fusion, however, it is likely the only page tab you can add is "User"

Page Tabs inside a Text+

I suggest you add all your controls into the "User" Page on each node you add controls. (just realized they are called pages). We can then move them and rename the pages in the code. 

You can also move existing controls into the "User" page so you have them together, however, I do not recommend this as we can move anything we want wherever we want after the macro is created and we open the .setting file. 

As we can customize the code there is no need to do any of the above, the only thing required is when adding a drop-down or label, create it in the "Edit Controls" panel. (although I can show you how you don't even need to do that)

NB. I am attempted to simplify things here and I am usually referring to 1 node, however, if you have 100 nodes it is the same principle just a lot more work.

I think it is time to jump into the code, coffee ready?

For demonstration purposes, I am going to place all the Background Color controls on a "New Page", you can name the page anything you want.

There is a little bit of best practice involved as it will work by adding Page = "New Page", To the "InstanceInputs" which show the controls in the inspector. I am also going to add "ICS_ControlPage = "New Page"," into the "Label" section of the node. This is so if the end-user opens the "Edit Controls" panel they will see the page.

You will also notice that I have added Page = "New Page" to the label InstanceInput, this then takes the label as well as the controls to the new page.

So here is the code added to the background InstanceInputs.

  1. -- label instance
  2.          Label02 = InstanceInput {          SourceOp = "Background1",
  3.          Source = "Label02",
  4.                                          Page = "New Page", },
  5.                                 -- end of label instance
  6.                                Input10 = InstanceInput {
  7. SourceOp = "Background1",
  8. Source = "TopLeftRed",
  9. Name = "Color",
  10. ControlGroup = 6,
  11. Default = 0,
  12. Page = "New Page",
  13. },
  14. Input11 = InstanceInput {
  15. SourceOp = "Background1",
  16. Source = "TopLeftGreen",
  17. ControlGroup = 6,
  18. Default = 0,
  19. Page = "New Page",
  20. },
  21. Input12 = InstanceInput {
  22. SourceOp = "Background1",
  23. Source = "TopLeftBlue",
  24. ControlGroup = 6,
  25. Default = 0,
  26. Page = "New Page",
  27. },
  28. Input13 = InstanceInput {
  29. SourceOp = "Background1",
  30. Source = "TopLeftAlpha",
  31. ControlGroup = 6,
  32. Default = 0,
  33. Page = "New Page",
  34. },
And here is the code added to the "UserControls" section of the "Label".
  1.                                     UserControls = ordered() {
  2. Label02 = {
  3. LINKS_Name = "Label02",
  4. LINKID_DataType = "Number",
  5. INPID_InputControl = "LabelControl",
  6. INP_Default = 0,
  7. INP_Integer = false,
  8. LBLC_DropDownButton = true,
  9. LBLC_NumInputs = 4,
  10. LBLC_NestLevel = 4,
  11. INP_External = false,
  12. INP_Passive = true,
  13. ICS_ControlPage = "New Page",
  14. }
  15. }



That's it!

Below is the full code.

All the green text is what you see in the inspector, these are the controls we checked in the "macro editor"
The text in Fuschia is the label we added, directly to the code.
The red text is the output, in fusion this would connect to the MediaOut. In the cut & edit page resolve handles this for you.
The yellow text is the code that makes up the node.
The aqua text is the label added using "edit controls" we can seriously customize this section.
--This is a comment
  1. {
  2. Tools = ordered() {
  3. DropDown = MacroOperator { 
  4. Inputs = ordered() {
  5. -- label instance
  6. Label01 = InstanceInput {
  7. SourceOp = "Text1",
  8. Source = "Label01",
  9. },
  10. -- end of label instance
  11. Input1 = InstanceInput {
  12. SourceOp = "Text1",
  13. Source = "StyledText",
  14. },
  15. Input2 = InstanceInput {
  16. SourceOp = "Text1",
  17. Source = "Font",
  18. ControlGroup = 2,
  19. },
  20. Input3 = InstanceInput {
  21. SourceOp = "Text1",
  22. Source = "Style",
  23. ControlGroup = 2,
  24. },
  25. Input4 = InstanceInput {
  26. SourceOp = "Text1",
  27. Source = "Red1Clone",
  28. Name = "Color",
  29. ControlGroup = 3,
  30. Default = 1,
  31. },
  32. Input5 = InstanceInput {
  33. SourceOp = "Text1",
  34. Source = "Green1Clone",
  35. ControlGroup = 3,
  36. Default = 1,
  37. },
  38. Input6 = InstanceInput {
  39. SourceOp = "Text1",
  40. Source = "Blue1Clone",
  41. ControlGroup = 3,
  42. Default = 1,
  43. },
  44. Input7 = InstanceInput {
  45. SourceOp = "Text1",
  46. Source = "Alpha1Clone",
  47. ControlGroup = 3,
  48. Default = 1,
  49. },
  50. Input8 = InstanceInput {
  51. SourceOp = "Text1",
  52. Source = "Size",
  53. Default = 0.16,
  54. },
  55. Input9 = InstanceInput {
  56. SourceOp = "Text1",
  57. Source = "CharacterSpacingClone",
  58. Name = "Tracking",
  59. Default = 1,
  60. },
  61. -- label instance
  62. Label02 = InstanceInput {
  63. SourceOp = "Background1",
  64. Source = "Label02",
  65.                                  Page = "New Page",
  66. },
  67. -- end of label instance
  68.                                  Input10 = InstanceInput {
  69. SourceOp = "Background1",
  70. Source = "TopLeftRed",
  71. Name = "Color",
  72. ControlGroup = 6,
  73. Default = 0,
  74. Page = "New Page",
  75. },
  76. Input11 = InstanceInput {
  77. SourceOp = "Background1",
  78. Source = "TopLeftGreen",
  79. ControlGroup = 6,
  80. Default = 0,
  81. Page = "New Page",
  82. },
  83. Input12 = InstanceInput {
  84. SourceOp = "Background1",
  85. Source = "TopLeftBlue",
  86. ControlGroup = 6,
  87. Default = 0,
  88. Page = "New Page",
  89. },
  90. Input13 = InstanceInput {
  91. SourceOp = "Background1",
  92. Source = "TopLeftAlpha",
  93. ControlGroup = 6,
  94. Default = 0,
  95. Page = "New Page",
  96. },
  97. },
  98. Outputs = {
  99. MainOutput1 = InstanceOutput {
  100. SourceOp = "Merge1",
  101. Source = "Output",
  102. }
  103. },
  104. ViewInfo = GroupInfo { Pos = { 0, 0 } },
  105. Tools = ordered() {
  106. Text1 = TextPlus {
  107. CtrlWZoom = false,
  108. Inputs = {
  109. Width = Input { Value = 1920, },
  110. Height = Input { Value = 1080, },
  111. UseFrameFormatSettings = Input { Value = 1, },
  112. ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
  113. StyledText = Input { Value = "DROPDOWN", },
  114. Font = Input { Value = "Open Sans", },
  115. Style = Input { Value = "Bold", },
  116. Size = Input { Value = 0.16, },
  117. VerticalJustificationNew = Input { Value = 3, },
  118. HorizontalJustificationNew = Input { Value = 3, },
  119. ManualFontKerningPlacement = Input {
  120. Value = StyledText {
  121. Array = {
  122. },
  123. Value = ""
  124. },
  125. },
  126. },
  127. ViewInfo = OperatorInfo { Pos = { 990, -16.5 } },
  128. UserControls = ordered() {
  129. Label01 = {
  130. LINKS_Name = "Label01",
  131. LINKID_DataType = "Number",
  132. INPID_InputControl = "LabelControl",
  133. INP_Integer = false,
  134. LBLC_DropDownButton = true,
  135. LBLC_NumInputs = 9,
  136. INP_External = false,
  137. INP_Passive = true,
  138. }
  139. }
  140. },
  141. Background1 = Background {
  142. Inputs = {
  143. Width = Input { Value = 1920, },
  144. Height = Input { Value = 1080, },
  145. UseFrameFormatSettings = Input { Value = 1, },
  146. ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
  147. TopLeftAlpha = Input { Value = 0, },
  148. },
  149. ViewInfo = OperatorInfo { Pos = { 880, 49.5 } },
  150. UserControls = ordered() {
  151. Label02 = {
  152. LINKS_Name = "Label02",
  153. LINKID_DataType = "Number",
  154. INPID_InputControl = "LabelControl",
  155. INP_Integer = false,
  156. LBLC_DropDownButton = true,
  157. LBLC_NumInputs = 4,
  158. INP_External = false,
  159. INP_Passive = true,
  160.                                                         ICS_ControlPage = "New Page",
  161. }
  162. }
  163. },
  164. Merge1 = Merge {
  165. Inputs = {
  166. Background = Input {
  167. SourceOp = "Background1",
  168. Source = "Output",
  169. },
  170. Foreground = Input {
  171. SourceOp = "Text1",
  172. Source = "Output",
  173. },
  174. PerformDepthMerge = Input { Value = 0, },
  175. },
  176. ViewInfo = OperatorInfo { Pos = { 990, 49.5 } },
  177. }
  178. },
  179. }
  180. },
  181. ActiveTool = "DropDown"
  182. }

Thanks for taking the time to read this post and if you would like to buy me a coffee, pizza, narrowboat then it is greatly appreciated.

Comments

Popular posts from this blog

DaVinci Resolve Expressions

Things You Didn't Know the Text+ or Text1 Could Do!

Expression Builder Plugin V2.0