Where does Fusion store its default hotkeys?

User avatar
ShadowMaker SdR
Fusionator
Posts: 1885
Joined: 10 years ago
Has thanked: 1 time
Been thanked: 32 times

Where does Fusion store its default hotkeys?

#1

Unread post by ShadowMaker SdR »

Hi, based on a question over at the BMD forum I've started digging in the 'customize hotkeys' option in Fusion 9, but I can't seem to find any hotkeys related to splines in there (like shift-b for shape box or T and S for rotating and scaling or the publishing points shortcuts etc) These all work, so they must be defined somewhere, but I can't seem to find the file that keeps all these shortcut combinations.

The question on the BMD forum is about setting the multiframe options in a more intuitive way (with shortcuts) but I have no idea whether or not these options are exposed to the user.

User avatar
Greg Bovine
Double M
Posts: 129
Joined: 7 years ago
Location: Oslo, Norway
Contact:

Re: Where does Fusion store its default hotkeys?

#2

Unread post by Greg Bovine »

ShadowMaker SdR wrote: 7 years agoThe question on the BMD forum is about setting the multiframe options in a more intuitive way (with shortcuts) but I have no idea whether or not these options are exposed to the user.
Hello ShadowMaker SdR.

If you can't find the exact "easy" hotkey entry that Eugene Afanasiev wants in the Fusion Hotkeys Manager window, then the alternative workflow is to:

Switch over to using a Config:/ based .fu file that has Actions{} and Hotkeys {} entries with plain Lua code used to carry out the editing operations he needs on the currently selected active node in the flow area, or on the active node that is being viewed in the Fusion Viewer window.

Adding Hotkeys Entries to a .fu File

There is a Fusion 8 .fu Hotkeys thread here with background details on how a .fu file is created:
Menu configuration in Fusion 8.1

Eugene said he wanted entries for his hotkeys like this:
  • CTRL+ALT+SHIFT+1
  • CTRL+ALT+SHIFT+2
    CTRL+ALT+SHIFT+3
  • CTRL+ALT+SHIFT+4
It is likely easiest for a new to a .fu file tools programmer to have each Hotkeys {} entry link to a separate Lua script on disk that is run when the key is pressed:

Code: Select all

SHIFT_CONTROL_ALT_1 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNone.lua'}",
SHIFT_CONTROL_ALT_2 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskPrev.lua'}",
SHIFT_CONTROL_ALT_3 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNext.lua'}",
SHIFT_CONTROL_ALT_4 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskAll.lua'}",
Using Actions {} in a .fu File

Once he becomes more used to .fu file editing he could switch over to using several inline Actions {} entries in the same .fu file. This does make the Lua code a bit harder to write due to the need to use a more complex form of Lua code with elements like "obj:Comp()." needing to be added in place of the simpler "comp." command when running functions like "obj:Comp().ActiveTool". Also this process of creating a new Actions {} entry involves one restart of Fusion each time you make a code tweak or have a syntax error to see it work so you have to either do it manually with the File > Quit command and re-launch Fusion manually over and over, or you could to install Reactor and use the new "RestartFusion" atom that is found in the Reactor "Menus" category. RestartFusion adds a File > Restart Fusion menu item that auto relaunches Fusion in a single step.

Using Targets in a Hotkeys Entry

The Hotkeys {} entries in a .fu file have specific "Targets" that reflect the part of the Fusion UI where the hotkey is active and available for use. You get to define one target per block of Hotkeys {] in the file.

You can use the same hotkey key press combination copy/pasted in the .fu file multiple times with a different target listed for each of the Hotkeys {] code blocks so the same hotkey works in the Flow view, the Viewer window, and the Console tab if you wanted.

These hotkey Target areas are some of the more popular ones to choose from:
  • FlowView
  • FuFrame
  • GLView
  • ConsoleView
This process means if Eugene wanted his custom .fu file hotkeys and Lua script to work in the Fusion flow area he would use this line of code added to the .fu file:

Code: Select all

{
	Hotkeys {
		Target = "FlowView",

		SHIFT_CONTROL_ALT_1 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNone.lua'}",
		SHIFT_CONTROL_ALT_2 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskPrev.lua'}",
		SHIFT_CONTROL_ALT_3 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNext.lua'}",
		SHIFT_CONTROL_ALT_4 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskAll.lua'}",
	},
}
or you could duplicate the entries so the same hotkeys work and are active in more Target zones at the same time:

Code: Select all

{
	Hotkeys {
		Target = "FlowView",

		SHIFT_CONTROL_ALT_1 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNone.lua'}",
		SHIFT_CONTROL_ALT_2 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskPrev.lua'}",
		SHIFT_CONTROL_ALT_3 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNext.lua'}",
		SHIFT_CONTROL_ALT_4 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskAll.lua'}",
	},

	Hotkeys {
		Target = "GLView",

		SHIFT_CONTROL_ALT_1 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNone.lua'}",
		SHIFT_CONTROL_ALT_2 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskPrev.lua'}",
		SHIFT_CONTROL_ALT_3 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNext.lua'}",
		SHIFT_CONTROL_ALT_4 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskAll.lua'}",
	},

	Hotkeys {
		Target = "FuFrame",

		SHIFT_CONTROL_ALT_1 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNone.lua'}",
		SHIFT_CONTROL_ALT_2 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskPrev.lua'}",
		SHIFT_CONTROL_ALT_3 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNext.lua'}",
		SHIFT_CONTROL_ALT_4 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskAll.lua'}",
	},

	Hotkeys {
		Target = "ConsoleView",

		SHIFT_CONTROL_ALT_1 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNone.lua'}",
		SHIFT_CONTROL_ALT_2 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskPrev.lua'}",
		SHIFT_CONTROL_ALT_3 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskNext.lua'}",
		SHIFT_CONTROL_ALT_4 = "RunScript{filename = 'Scripts:/Comp/MultiFrameMaskAll.lua'}",
	},
}
What do you want the Hotkey Bound Script to *do*?

Writing the actual Lua script that does exactly what he wants the script to do would be a separate topic that would need more detail on how he needed the tool to respond to his active tool selection.

Should the script work on only the singular "active" node, or on all nodes that are selected in the flow area at that time of the same type?

Does anything else need to be done to the node at the same time?

To go into that territory I think Eugene would have to:
A) Still want to go this far complexity wise since it takes effort to do
B) He would need to be part of the conversation on this WSL thread here vs trying to do this task by carrying on the conversation on both the BMD Fusion Forum and on WSL forums at the same time. :)
Last edited by Greg Bovine 7 years ago, edited 1 time in total.

User avatar
ShadowMaker SdR
Fusionator
Posts: 1885
Joined: 10 years ago
Has thanked: 1 time
Been thanked: 32 times

Re: Where does Fusion store its default hotkeys?

#3

Unread post by ShadowMaker SdR »

B) He would need to be part of the conversation on this WSL thread here vs trying to do this task by carrying on the conversation on both the BMD Fusion Forum and on WSL forums at the same time. :)
I think this is as good as a time as any to redirect his attention to this thread. :-)

User avatar
ShadowMaker SdR
Fusionator
Posts: 1885
Joined: 10 years ago
Has thanked: 1 time
Been thanked: 32 times

Re: Where does Fusion store its default hotkeys?

#4

Unread post by ShadowMaker SdR »

@Greg Bovine I understand all you've just written. Thanks for that. And yes, that was indeed the thread I was referring to.
Even though my original question still stands in addition to that: where does Fusion store its defaults for which there is no config.fu file as far as I can tell.
I can't find this info in the scripting manual either. How do people like you and @AndrewHazelden *find* all this info?
There is no multiframe entry in the scripting manual, so how do you know what to write in those scripts?

User avatar
Greg Bovine
Double M
Posts: 129
Joined: 7 years ago
Location: Oslo, Norway
Contact:

Re: Where does Fusion store its default hotkeys?

#5

Unread post by Greg Bovine »

ShadowMaker SdR wrote: 7 years ago there is no config.fu file as far as I can tell. I can't find this info in the scripting manual either.
The Config:/ .fu file approach is for applying the customizations you do via code manually yourself.

A better Fusion 9 scripting manual would be really nice, wouldn't it? That's on the top of my personal wishlist items I'd like to see from BMD in the future. :)
ShadowMaker SdR wrote: 7 years agoHow do people like you and @AndrewHazelden *find* all this info?
That's a good question.

More time using Fusion, reading through all of the content that you can download from VFXPedia, downloading and checking out the new material in Reactor using a text editor, and writing your own small scripts and macros is the answer to learning just about everything you could possibly want to know about how to customize Fusion.

For everything else there is the WSL search field. :)
ShadowMaker SdR wrote: 7 years agoThere is no multiframe entry in the scripting manual, so how do you know what to write in those scripts?
For starters if you add a Polygon mask to your composite and copy that node from the Flow to your clipboard the Fusion .setting "macro" style code that makes up the node is visible to you. This text output lists every attribute that was adjusted on the node and also would show any UserControls or animation information on the node:
Code: [Select all] [Expand/Collapse] [Download] (Polygon.setting)
  1. {
  2.     Tools = ordered() {
  3.         Polygon1 = PolylineMask {
  4.             DrawMode = "InsertAndModify",
  5.             DrawMode2 = "InsertAndModify",
  6.             CtrlWZoom = false,
  7.             Inputs = {
  8.                 MaskWidth = Input { Value = 1920, },
  9.                 MaskHeight = Input { Value = 1080, },
  10.                 PixelAspect = Input { Value = { 1, 1 }, },
  11.                 ClippingMode = Input { Value = FuID { "None" }, },
  12.                 Center = Input { Value = { 0.566666666666667, 0.5 }, },
  13.                 Polyline = Input {
  14.                     SourceOp = "Polygon1Polyline",
  15.                     Source = "Value",
  16.                 },
  17.                 Polyline2 = Input {
  18.                     Value = Polyline {
  19.                     },
  20.                     Disabled = true,
  21.                 },
  22.             },
  23.             ViewInfo = OperatorInfo { Pos = { 776, 333 } },
  24.         },
  25.         Polygon1Polyline = BezierSpline {
  26.             SplineColor = { Red = 173, Green = 255, Blue = 47 },
  27.             NameSet = true,
  28.             KeyFrames = {
  29.                 [0] = { 0, Flags = { Linear = true, LockedY = true }, Value = Polyline {
  30.                         Closed = true,
  31.                         Points = {
  32.                             { Linear = true, X = 0.312047104429508, Y = 0.165406646571823, LX = -0.00171346767369103, LY = -0.203146876133594, RX = -0.219572765534915, RY = 0.095653556031255 },
  33.                             { Linear = true, X = -0.346671192175236, Y = 0.452367314665588, LX = 0.219572765534915, LY = -0.095653556031255, RX = 0.000467995003513651, RY = -0.219845359831331 },
  34.                             { Linear = true, X = -0.345267207164695, Y = -0.207168764828407, LX = -0.000467995003513651, LY = 0.219845359831331, RX = 0.21739130285771, RY = -0.0789550723335178 },
  35.                             { Linear = true, X = 0.306906701408435, Y = -0.44403398182896, LX = -0.21739130285771, LY = 0.0789550723335178, RX = 0.00171346767369103, RY = 0.203146876133594 }
  36.                         }
  37.                     } }
  38.             }
  39.         }
  40.     }
  41. }

Note the 3nd line says "Polygon1 = PolylineMask". This indicates the internal node type is "PolylineMask" and the user has given that specific node the user friendly name of "Polygon1".

Next you have to figure out what you want to do with the raw text format information you have for the PolylineMask node "settings" file based text clipping.

The breaks down to asking if there is a setting you want to change on the node? Do you want to read an attribute by its internal name? Does the node need a new custom expression added to a control? Do you want to connect another node to an input or output on the current node? Do you want to add/remove key-frames from attributes on this node?

Typically you would start by navigating through the following help resources searching for keywords and topics that you might think of that relates to the exact task you want to do at the moment.

After you find one or two small leads for tips on what you are trying to do in Fusion, the rest of the details become more apparent from doing small experiments in the Fusion Console tab with reading and changing the node attributes from Lua / python code on the text entry input line.

Since you are merely repeating these same approaches again and again with a similar methodology for each question you need to answer as you create your new tool in Fusion, it quickly becomes much easier do to this type of Fusion learning effort the next time you have a challenge come up that you want to solve.

The combined effect of exploring these Fusion techniques and reading over the help resources will develop the base level of Lua/Python programming skills you need to have to be able to create your own comp scripts/intool scripts/tool scripts/macros/expressions/UserControls elements in Fusion. You will also be able adjust any setting or Fusion preference you would likely need to change as you build your new addons.

The most consistency useful Fusion learning development resources are:
  • VFXPedia has the old classic tips and scripts from the Eyeon era. This is still mostly valid for Fusion 9.
  • WSL's search features gives some hints and examples
  • Running the Lua command "dump(bmd)" to list internal functions helps
  • The Fusion 8 Scripting Manual.pdf files gives a few more clues
  • The WSL "Action Listener.lua" script is handy
  • The WSL "FusionScript Help Browser.lua" script is handy
  • The online Lua 5.1 Reference Manual is handy for learning Lua scripting concepts
  • The Lua-Users Wiki Tutorials are handy for learning Lua scripting by small code examples
  • The old Pigsfly forum is handy for seeing how things were done in the Eyeon era with Fusion
You can probe any object in Fusion from Lua code with the addition of the function ":GetAttrs()" to the end of the object name. This will help you start to see the memory structures used to hold each setting the is present in the object/pointer/node's attributes like:

Code: Select all

dump(fusion:GetAttrs())
or

Code: Select all

dump(comp:GetAttrs())
or

Code: Select all

dump(Polygon1:GetAttrs())
You can explore the input data on a node using a mixture of "tool:GetInputList()" or "tool:GetInput('TheAttributeNameYouWantHere')". In this case "tool" is the standard variable in a Fusion tool script that represents the the active node you are interested in. You can use "comp.ActiveTool" to look at the currently highlighted and active node in Fusion:

Code: Select all

inputList = comp.ActiveTool:GetInputList()
dump(inputList)
There is a script on WSL by Chad Capeland that shows how to get the details on a node's input control names:
custom tool as bg from image

I see there is also a UI Manager GUI based version of that script called "List Input Control Names.lua" on WSL too:
List Input Control Names

The "comp:GetToolList()" command returns back a list with a Lua table of the selected nodes of a certain type in your Fusion comp, or it can return all of the nodes (selected or not) in your current composite:

Code: Select all

selectedNodes = true
toolList = comp:GetToolList(selectedNodes, 'PolylineMask')
dump(toolList)
In this case running the above command with Polygon mask node selected gave me back a Console Tab output of:

Code: Select all

table: 0x6cf7b358
	1 = Polygon (0x0x7f832eace800) [App: 'Fusion' on 127.0.0.1, UUID: d18ba265-4d4e-4229-a148-52731dd1a02e]
	
I would then probe that node for more details using:

Code: Select all

selectedNodes = true
toolList =comp:GetToolList(selectedNodes, 'PolylineMask')
-- dump(toolList)

-- Scan each of the individual nodes using ipairs from the current selection
for i, tool in ipairs(toolList) do
	dump(tool:GetAttrs())
	print('---------')

	-- Optionally create variables out of the node attributes that you could print back to the user
	attrs = tool:GetAttrs()
	toolID = tool:GetAttrs().TOOLS_RegID
	name = tool:GetAttrs().TOOLS_Name
end
In this case running the above command gives me back a Console Tab output of:

Code: Select all

table: 0x6cf7abe8
	TOOLI_ImageWidth = 1920
	TOOLB_CtrlWZoom = false
	TOOLB_NameSet = false
	TOOLNT_Region_End = table: 0x6cf7ad08
		1 = 1000000000
	TOOLI_Number_o_Inputs = 0
	TOOLB_PassThrough = false
	TOOLNT_Region_Start = table: 0x6cf7acc0
		1 = -1000000000
	TOOLS_RegID = PolylineMask
	TOOLB_Selected = true
	TOOLI_ImageHeight = 1080
	TOOLNT_EnabledRegion_End = table: 0x6cf7ac78
		1 = 1000000000
	TOOLN_ImageAspectX = 1
	TOOLNT_EnabledRegion_Start = table: 0x6cf7ac30
		1 = -1000000000
	TOOLN_ImageAspectY = 1
	TOOLB_ShowControls = true
	TOOLI_ImageDepth = 1
	TOOLS_Name = Polygon1
	TOOLB_HoldOutput = false
	TOOLI_ImageField = -1
	TOOLB_Visible = true
	TOOLB_Locked = false
	TOOLN_LastFrameTime = 0.012217999999997
	TOOLI_ID = 1
	TOOLB_CacheToDisk = false
---------
Exploring Fusion's Preferences

You can always open up the various Fusion user preference files that are stored in your Fusion User preferences folder in the "Profiles:/Default/" location to learn more about Fusion and how it saved your preferences. This can be done using Notepad++ by search randomly for keywords you are interested in, or just hitting the page down button and browsing through the file.

When you view a .prefs file you can see the raw preference variables from the Lua table for all Fusion preferences. This can also be done in the Fusion Console tab via Lua code if you want to.

Most of the user account specific settings the end artist can set in Fusion's Preferences "Globals and Default Settings" window is stored in this "Profiles:/Default/" folder, including the Fusion Render Node preferences file too.

You can directly read the preferences in a Lua table format using a Lua command like:

Comp Specific Preferences:

Code: Select all

fusionCompPrefsTable = fusion:GetPrefs("Comp")
dump(fusionCompPrefsTable)
or

Global and Defaults Preferences:

Code: Select all

fusionGlobalPrefsTable = fusion:GetPrefs("Global")
dump(fusionGlobalPrefsTable)
Use File Comparisons to See What You Did in Your Comp

Everything else in Fusion comes mostly from looking at the Fusion .comp file in a programmer's text editor.

I typically do this using Notepad++ with the free "Compare" plugin added via the Notepad++ Plugin Manager. This is also something you can do in any of your other favorite text editor's with their built-in file differencing and compare functions. You can realistically use any programmers text editing tool you want and will get similar end results. :)

Begin by saving an inital "start.comp" file out from Fusion. The file is used to mark what is in your comp before you make the changes you want to research.

Then make the node based changes you want manually to your comp in the Fusion flow area using the Fusion GUI.

At this point you would add all the nodes to the comp you need.

You would connect the nodes together, add custom expressions, instance nodes, change comp specific preferences, rename nodes, change the S1-S6 preferences, add keyframe animations, add group nodes, add intool scripts to nodes, and add any UserControls elements using the "Edit Controls..." window to your nodes.

You simply need to carry out the tasks in Fusion exactly as an end user would do manually. Your goal is to make the end Fusion .comp file look precisely how you want your custom Lua/Python scripted tool to modify things via code.

Finally save out a new "end.comp" file from Fusion.

A Fusion composite is a plain text file that is a raw Lua table dump from Fusion that was written to disk. This means that *everything* that can be done to a composite by the end Fusion artist is saved into this plain text format file. So *any* setting that was possible for the artist to do in the GUI session of Fusion that can be saved to disk, is a change that will be viewable by file differencing and file comparison approaches in your text editor.

You can see a full breakdown of what changed in the composite by opening the "start.comp" file and the "end.comp" file up in notepad++. The compare module will list each point in the document where something changed between the original and modified file. You can quickly see what attribute names were modified by your graphic session editing. Also expression tags are visible.

Anything in a .comp file that is at the Fusion default setting is sometimes ommited from having an entry in a .comp. If you change the setting off from the default setting for the control on the node then a new entry is visible in the "end.comp" file.

Then When All Else Fails

If there is a control you can't change from a native Fusion API function from Lua or Python you can do that directly on the comp file by manually poking the node's settings yourself.

For the really hard stuff that just doesn't want to be scripted easily with native Fusion Lua/Python based functions you can also have your Lua script select a node in the flow area by name, copy it as text to your clipboard copy/paste buffer, edit that text using a Lua command to find and replace elements in the Lua table for the macro, and then paste the patched node right back into your node flow again. If you had a reason to, you could also re-connect all of the original input and output connections too automatically.

This concept although a bit hackey is one of the reasons Fusion is so great since it is very very customizable. :D

The best example of this approach to editing a node is the "hos_Macro2Group" atom in Reactor's "Scripts/Tool" category. This script by "House of Secrets" does a neat trick to automatically convert a Macro node from a hard to look inside of "MacroOperator" node type you can't expand in the Fusion flow area, into a "GroupOperator" type which is just a regular group node which you can go inside of with a click of the little group node's "expand" icon.
Last edited by Greg Bovine 7 years ago, edited 1 time in total.

User avatar
AndrewHazelden
Fusius Of Borg
Posts: 2598
Joined: 10 years ago
Location: West Dover, Nova Scotia, Canada
Has thanked: 2 times
Been thanked: 7 times
Contact:

Re: Where does Fusion store its default hotkeys?

#6

Unread post by AndrewHazelden »

ShadowMaker SdR wrote: 7 years agoThere is no multiframe entry in the scripting manual, so how do you know what to write in those scripts?
@Greg Bovine listed a lot of options that a technically minded Fusion user can do if they have the time to learn all of those skills.

Where to Get Extra Help

I'd like to mention some more traditional (non programming) solutions to the the general problem of not being able to fully master Fusion to the level you would like. I think these tips could work well in this situation if you don't want to have to learn how to write a Lua/Python script by trial and error.

I am posting these options since I have been informed in the past that writing a script is supposedly never the right answer for an artist to have to do when they just want to use a graphics package to make nice looking imagery. :)

Step 1. Contact BMD tech support directly or your local Fusion Studio reseller in your region to see if they can help with your scripting question. They might have some Fusion hotkey examples pre-made or tips that show how to do this type of process from their own computer system, or in their support department knowledge base/cue cards/post-it notes/etc...

This step would mean volunteers on WSL don't have to re-invent the wheel each time a Fusion Studio user asks a technical question if that problem already has a solution, but the knowledge simply needs to get distributed better by BMD to the end user.

The toll free Blackmagic support phone number listed on the BMD website for USA and Canada is: 1-877 717 5248.
The Blackmagic support phone number for Europe, UK, Middle East and South Africa is: +44(0) 1565 830049.
The Blackmagic support phone number for Asia is: +65 6339 2171.
The Blackmagic support phone number for is Australia and New Zealand is: +61 3 9722 9700.
The Blackmagic support phone number for Japan is: +81 3 5465 2102.

You could also reach out to your local reseller and let them know your current needs aren't being met with the PDF documentation and learning tools provided with Fusion Studio. Customer feedback makes a difference.

If you bought your Fusion Studio dongle from B&H Photo then call their contact phone number 1-800-606-6969.

Alternatively if there is a trade show of BMD's coming up in your region attend it in person and talk to the presenter and business staff on hand to express your concerns that you can't take advantage of all the great features in Fusion because of a lack of up to date reference material, and tutorials.

Step 2. Make a WSL wishlist post that details the feature you want to see added to the next version of Fusion.

In this case you want to ask for more access to Fusion's built-in internal commands as Actions so they would be listed inside the View > Customize Hotkeys... window automatically. This would allow you to have more things hotkey-able with low effort and only a few clicks.

If a concerted effort was made by BMD to have more of Fusion's internal features exposed to the end user as "Actions", then artists and technical users could access them in the Hotkeys Manager, from a script, and in a .fu file more easily. This is a big win for all users and improves usability.

The more actions there are in Fusion it means the better the UI Manager "Action Listener" script would be at helping to automatically record your session in Fusion so making a custom Lua script becomes easy to do and less cryptic and confusing.

Step 3. Post a constructive and positive message on the BMD Forums to a thread like this "Dear BlackmagicDesign- Please own up to supporting Fusion" and we can see if enough genuine user interest can help corporate management at BMD notice that Fusion users have real interest and a need that could be met with more support and learning tools.

Without direct and consistent feedback coming from the many Fusion users out there, the message is not as clear and loud as it could be: I'd like to think that learning tools, along with effective and efficient support are just as big of a priority for professional users of software as any new feature addition might be.

When you combine these three options listed here with the other tips on this thread, just about any Fusion problem can be solved.