top of page

Custom Safe Area 'generator' for Resolve


As of Resolve 16.2 you can now put appropriate .setting files into the Generators directory and these will then be available for use in the Edit Page. I've made a Macro in Fusion which can be used in this way for a custom Safe Area guide. Obviously using this kind of Safe guide will result in it being rendered on your output so keep that in mind!

My website doesn't make it particularly easy for me to save a .setting file for download but fortunately Fusion allows you to copy plain text into the Flow and the macro will appear so that you can right click and 'Save Settings'. Or you can simply paste the text into a text editor and save it with the .setting file extension. Then place the .setting file into the Generators directory (on a Mac that's "⁨Users⁩ ▸ ⁨USER▸ ⁨Library⁩ ▸ ⁨Application Support⁩ ▸ ⁨Blackmagic Design⁩ ▸ ⁨DaVinci Resolve⁩ ▸ ⁨Fusion⁩ ▸ ⁨Templates⁩ ▸ ⁨Edit⁩ ▸ ⁨Generators"⁩). More details can be found in the Readme file from Resolve Help>Documentation>Developer in the Fusion Templates directory.

Here's the Macro;

{

Tools = ordered() {

SafeArea_XY1 = MacroOperator {

Inputs = ordered() {

Input1 = InstanceInput {

SourceOp = "SafeArea_XY",

Source = "Level",

Name = "Safe Area Opacity",

Default = 1,

},

Input2 = InstanceInput {

SourceOp = "SafeArea_XY",

Source = "SafeAreaXpercentage",

Page = "Controls",

Default = 80,

},

Input3 = InstanceInput {

SourceOp = "SafeArea_XY",

Source = "SafeAreaYpercentage",

Page = "Controls",

Default = 80,

},

Input4 = InstanceInput {

SourceOp = "SafeArea_XY",

Source = "AreaThckness",

Name = "Line Thckness",

Page = "Controls",

Default = 3,

},

Input5 = InstanceInput {

SourceOp = "CenterX",

Source = "Level",

Name = "Crosshair Opacity",

Default = 1,

},

Input6 = InstanceInput {

SourceOp = "BackgroundShadow",

Source = "TopLeftAlpha",

Name = "Shadow Opacity",

ControlGroup = 6,

Default = 0.65,

},

},

Outputs = {

MainOutput1 = InstanceOutput {

SourceOp = "Merge2",

Source = "Output",

}

},

ViewInfo = GroupInfo { Pos = { 0, 0 } },

Tools = ordered() {

SafeArea_XY = RectangleMask {

CtrlWZoom = false,

NameSet = true,

Inputs = {

Filter = Input { Value = FuID { "Fast Gaussian" }, },

BorderWidth = Input {

Value = 0.003,

Expression = "AreaThckness/1000",

},

Solid = Input { Value = 0, },

MaskWidth = Input { Value = 720, },

MaskHeight = Input { Value = 576, },

PixelAspect = Input { Value = { 1.42222225666046, 1 }, },

ClippingMode = Input { Value = FuID { "None" }, },

Width = Input {

Value = 0.8,

Expression = "SafeAreaXpercentage/100",

},

Height = Input {

Value = 0.8,

Expression = "SafeAreaYpercentage/100",

},

},

ViewInfo = OperatorInfo { Pos = { 165, -16.5 } },

UserControls = ordered() {

SafeAreaXpercentage = {

LINKS_Name = "Safe Area X percentage",

LINKID_DataType = "Number",

INPID_InputControl = "SliderControl",

INP_Default = 80,

INP_Integer = true,

INP_MinScale = 1,

INP_MaxScale = 100,

INP_MinAllowed = 1,

INP_MaxAllowed = 100,

ICD_Center = 50,

IC_Steps = 1,

ICS_ControlPage = "Controls"

},

SafeAreaYpercentage = {

LINKS_Name = "Safe Area Y percentage ",

LINKID_DataType = "Number",

INPID_InputControl = "SliderControl",

INP_Default = 80,

INP_Integer = true,

INP_MinScale = 1,

INP_MaxScale = 100,

INP_MinAllowed = 1,

INP_MaxAllowed = 100,

ICS_ControlPage = "Controls"

},

Thickness = {

LINKS_Name = "Thickness",

LINKID_DataType = "Number",

INPID_InputControl = "SliderControl",

INP_Default = 3,

INP_Integer = true,

INP_MinScale = 0,

INP_MaxScale = 50,

INP_MinAllowed = 0,

INP_MaxAllowed = 50,

ICD_Center = 10,

IC_Steps = 1,

ICS_ControlPage = "Common"

},

AreaThckness = {

LINKS_Name = "Area Thckness",

LINKID_DataType = "Number",

INPID_InputControl = "SliderControl",

INP_Default = 3,

INP_Integer = true,

INP_MinScale = 0,

INP_MaxScale = 50,

INP_MinAllowed = 0,

INP_MaxAllowed = 50,

ICD_Center = 15,

IC_Steps = 1,

ICS_ControlPage = "Controls"

}

}

},

CenterX = RectangleMask {

NameSet = true,

Inputs = {

EffectMask = Input {

SourceOp = "SafeArea_XY",

Source = "Mask",

},

Filter = Input { Value = FuID { "Fast Gaussian" }, },

BorderWidth = Input {

Value = 0.003,

Expression = "SafeArea_XY.AreaThckness/1000",

},

MaskWidth = Input { Value = 720, },

MaskHeight = Input { Value = 576, },

PixelAspect = Input { Value = { 1.42222225666046, 1 }, },

ClippingMode = Input { Value = FuID { "None" }, },

Width = Input { Value = 0.08, },

Height = Input { Value = 0.001, },

},

ViewInfo = OperatorInfo { Pos = { 165, 16.5 } },

},

BackgroundShadow = Background {

NameSet = true,

Inputs = {

EffectMask = Input {

SourceOp = "CenterY",

Source = "Mask",

},

Width = Input { Value = 1920, },

Height = Input { Value = 1080, },

UseFrameFormatSettings = Input { Value = 1, },

["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },

TopLeftAlpha = Input { Value = 0.65, },

},

ViewInfo = OperatorInfo { Pos = { 440, 82.5 } },

},

CenterY = RectangleMask {

NameSet = true,

Inputs = {

EffectMask = Input {

SourceOp = "CenterX",

Source = "Mask",

},

Level = Input { Expression = "CenterX.Level", },

Filter = Input { Value = FuID { "Fast Gaussian" }, },

BorderWidth = Input {

Value = 0.003,

Expression = "SafeArea_XY.AreaThckness/1000",

},

MaskWidth = Input { Value = 720, },

MaskHeight = Input { Value = 576, },

PixelAspect = Input { Value = { 1.42222225666046, 1 }, },

ClippingMode = Input { Value = FuID { "None" }, },

Width = Input { Value = 0.003, },

Height = Input { Value = 0.118, },

},

ViewInfo = OperatorInfo { Pos = { 165, 49.5 } },

},

Background1 = Background {

Inputs = {

EffectMask = Input {

SourceOp = "CenterY",

Source = "Mask",

},

Width = Input { Value = 1920, },

Height = Input { Value = 1080, },

UseFrameFormatSettings = Input { Value = 1, },

["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },

TopLeftRed = Input { Value = 1, },

TopLeftGreen = Input { Value = 1, },

TopLeftBlue = Input { Value = 1, },

},

ViewInfo = OperatorInfo { Pos = { 165, 82.5 } },

},

Transform1 = Transform {

Inputs = {

Center = Input { Value = { 0.503, 0.495 }, },

Input = Input {

SourceOp = "BackgroundShadow",

Source = "Output",

},

},

ViewInfo = OperatorInfo { Pos = { 330, 82.5 } },

},

Merge2 = Merge {

Inputs = {

Background = Input {

SourceOp = "Transform1",

Source = "Output",

},

Foreground = Input {

SourceOp = "Background1",

Source = "Output",

},

PerformDepthMerge = Input { Value = 0, },

},

ViewInfo = OperatorInfo { Pos = { 220, 115.5 } },

}

},

}

},

ActiveTool = "SafeArea_XY1"

}

Recent Posts
Search By Tags
Follow Us
  • Twitter Classic
bottom of page