Jump to: Board index » General » Fusion

Background Duplicate Effect

Learn about 3D compositing, animation, broadcast design and VFX workflows.
  • Author
  • Message
Offline

jashcraft18

  • Posts: 1
  • Joined: Wed Mar 19, 2025 3:18 pm
  • Real Name: Jeremy Ashcraft

Background Duplicate Effect

PostWed Mar 19, 2025 3:28 pm

Hey Everyone,
I’m pretty new to Fusion, so I appreciate your patience.

I’m working on a 9x16 vertical deliverable for a client, and they want the background to be a blurred duplicate of the main video. Outside of Fusion, I would normally just duplicate the clip, resize it, place it in the background, and add a blur—simple.

However, I need to do this inside Fusion because I’ve created a custom mask for the foreground video, which has specific pushes, zooms, and aspect ratio constraints.

The Issue:

I tried adding a new MediaIn node for the background, but because it references the same source as my foreground, it automatically goes full screen and no longer treats my foreground as a separate element.

How do I properly duplicate the video in Fusion, blur it, and keep my foreground layer intact with its custom mask and transformations?
Offline

Sam Steti

  • Posts: 3090
  • Joined: Tue Jun 17, 2014 7:29 am
  • Location: France

Re: Background Duplicate Effect

PostThu Mar 20, 2025 10:37 am

Hey

I admit I don't quite understand that "because it references the same source as my foreground, it automatically goes full screen and no longer treats my foreground as a separate element."
Anyway, as a potential start, that's how it may be :
Code: Select all
{
   Tools = ordered() {
      MediaIn = Loader {
         Clips = {
         },
         NameSet = true,
         ViewInfo = OperatorInfo { Pos = { 440, 148.5 } },
         UserControls = ordered() {
            MakeLocal = {
               INP_Default = 0,
               INPID_InputControl = "ButtonControl",
               BTNCS_Execute = "                  args = { tool = comp.ActiveTool, copyTree = true }\n                  path = comp:MapPath(\"Scripts:support/Loader_MakeLocal.lua\")\n                  comp:RunScript(path, args)\n               ",
               IC_ControlPage = 0,
               LINKID_DataType = "Number",
               LINKS_Name = "Make Local",
            }
         }
      },
      Whatever = MatteControl {
         NameSet = true,
         Inputs = {
            Background = Input {
               SourceOp = "MediaIn",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 605, 115.5 } },
      },
      Blur1 = Blur {
         Inputs = {
            Input = Input {
               SourceOp = "MediaIn",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 605, 181.5 } },
      },
      Whatever_1 = MatteControl {
         NameSet = true,
         Inputs = {
            Background = Input {
               SourceOp = "Whatever",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 715, 115.5 } },
      },
      Merge1 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Blur1",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "Whatever_2",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, },
         },
         ViewInfo = OperatorInfo { Pos = { 825, 181.5 } },
      },
      Whatever_2 = MatteControl {
         NameSet = true,
         Inputs = {
            Background = Input {
               SourceOp = "Whatever_1",
               Source = "Output",
            },
         },
         ViewInfo = OperatorInfo { Pos = { 825, 115.5 } },
      },
      Note1 = Note {
         Inputs = {
            Comments = Input { Value = "This implies everything is yet in the right resolution. Else you can add a Letterbox node to fix what needs to be", }
         },
         ViewInfo = StickyNoteInfo {
            Pos = { 770, 247.5 },
            Flags = {
               Expanded = true
            },
            Size = { 185, 94.3 }
         },
      }
   }
}
*MacMini M1 16 Go - Sonoma - Ext nvme SSDs on TB3 - 14 To HD in 2 x 4 disks USB3 towers
*Legacy MacPro 8core Xeons, 32 Go ram, 2 x gtx 980 ti, 3SSDs including RAID
*Resolve Studio everywhere, Fusion Studio too
*https://www.buymeacoffee.com/videorhin
Online
User avatar

KrunoSmithy

  • Posts: 4320
  • Joined: Fri Oct 20, 2023 11:01 pm
  • Warnings: 1
  • Real Name: Kruno Stifter

Re: Background Duplicate Effect

PostThu Mar 20, 2025 11:23 am

If you using resolve, there is a blanking fill open FX filter that does this automatically, for social media usage.

Blanking Fill

This plugin is specifically designed to quickly fill black frame blanking with a stylized image derived from the clip itself, to make blanking less intrusive for viewers in documentaries and news segments. In the following example, the Blanking Fill plugin is used to add image to the left and right of “pillarboxed” standard definition 4:3 video that appears within a High Definition or Ultra High Definition 16:9 aspect ratio.

sshot-923.jpg
sshot-923.jpg (117.16 KiB) Viewed 671 times


You could also do this by duplicating the original track on the timeline, blurring it, and the duplicate on top you simply crop.

................................................

If you want to do it in fusion, you could do something like this. (I've used blue circle as pattern for this so you can use it to, but obviously you would put in your own footage instead)

sshot-926.jpg
sshot-926.jpg (70.33 KiB) Viewed 668 times


sshot-924.jpg
sshot-924.jpg (91.15 KiB) Viewed 671 times


Just copy and paste this code here into your clipboard and than in fusion node area. And you should see the same thing.

Code: Select all
{
   Tools = ordered() {
      Your_Footage = GroupOperator {
         NameSet = true,
         Outputs = {
            Output1 = InstanceOutput {
               SourceOp = "Crop1",
               Source = "Output",
            }
         },
         ViewInfo = GroupInfo {
            Pos = { -175.255, 10.5746 },
            Flags = {
               AllowPan = false,
               ConnectedSnap = true,
               AutoSnap = true,
               RemoveRouters = true
            },
            Size = { 486.739, 66.3636, 243.37, 24.2424 },
            Direction = "Horizontal",
            PipeStyle = "Direct",
            Scale = 1,
            Offset = { 331.255, -1.93825 }
         },
         Tools = ordered() {
            Ellipse1 = EllipseMask {
               Inputs = {
                  Filter = Input { Value = FuID { "Fast Gaussian" }, },
                  MaskWidth = Input { Value = 1920, },
                  MaskHeight = Input { Value = 1080, },
                  PixelAspect = Input { Value = { 1, 1 }, },
                  UseFrameFormatSettings = Input { Value = 1, },
                  Width = Input { Value = 0.834249713023051, },
                  Height = Input { Value = 0.834249713023051, }
               },
               ViewInfo = OperatorInfo { Pos = { -519.687, 10.5746 } },
            },
            Background1 = Background {
               Inputs = {
                  GlobalOut = Input { Value = 359, },
                  Width = Input { Value = 250, },
                  Height = Input { Value = 250, },
                  ["Gamut.SLogVersion"] = Input { Value = FuID { "SLog2" }, },
                  TopLeftGreen = Input { Value = 0.666666666666667, },
                  TopLeftBlue = Input { Value = 1, },
                  EffectMask = Input {
                     SourceOp = "Ellipse1",
                     Source = "Mask",
                  }
               },
               ViewInfo = OperatorInfo { Pos = { -411.735, 10.5746 } },
            },
            Transform1 = Transform {
               Inputs = {
                  Size = Input { Value = 0.841, },
                  Edges = Input { Value = 1, },
                  Input = Input {
                     SourceOp = "Background1",
                     Source = "Output",
                  }
               },
               ViewInfo = OperatorInfo { Pos = { -277.856, 10.5746 } },
            },
            Crop1 = Crop {
               Inputs = {
                  XSize = Input { Value = 1920, },
                  YSize = Input { Value = 1080, },
                  Input = Input {
                     SourceOp = "Transform1",
                     Source = "Output",
                  }
               },
               ViewInfo = OperatorInfo { Pos = { -150.885, 10.5746 } },
            }
         },
      },
      MediaIn = Note {
         NameSet = true,
         CustomData = {
            Path = {
               Map = {
                  ["Setting:"] = "Macros:\\Hypertext Compositor\\"
               }
            },
         },
         Inputs = {
            Comments = Input { Value = "Where it says Your_Footage add your own footage 1080p is what I used for reference, but you can adjust it to resolution you need.", }
         },
         ViewInfo = StickyNoteInfo {
            Pos = { -182.667, 34.6388 },
            Flags = {
               Expanded = true
            },
            Size = { 94.9962, 50.6881 }
         },
         UserControls = ordered() {
            UIManagerButton = {
               INP_Integer = false,
               LINKID_DataType = "Number",
               BTNCS_Execute = "               comp = app:GetAttrs().FUSIONH_CurrentComp\n               -- Add a '{dragDropCompFile = comp:MapPath(\"\")}' section below between the {} with your .htm file specified so Resolve users can access the SBS HTML note.\n               comp:RunScript(\"Config:/HypertextCompositor/HypertextCompositor.lua\" , {})\n               ",
               ICS_ControlPage = "File",
               INPID_InputControl = "ButtonControl",
               LINKS_Name = "Display SBS Help",
            }
         }
      },
      Resize1 = BetterResize {
         Inputs = {
            Width = Input { Value = 3413, },
            Height = Input { Value = 1920, },
            KeepAspect = Input { Value = 1, },
            HiQOnly = Input { Value = 0, },
            PixelAspect = Input { Value = { 1, 1 }, },
            Input = Input {
               SourceOp = "Crop1",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 15.7342, 68.429 } },
      },
      Blur = Blur {
         NameSet = true,
         Inputs = {
            Filter = Input { Value = FuID { "Fast Gaussian" }, },
            XBlurSize = Input { Value = 40, },
            Input = Input {
               SourceOp = "Resize1",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 157.723, 68.429 } },
      },
      Letterbox1 = Letterbox {
         Inputs = {
            Width = Input { Value = 1080, },
            Height = Input { Value = 1920, },
            Mode = Input { Value = 1, },
            HiQOnly = Input { Value = 0, },
            FilterMethod = Input { Value = 8, },
            Input = Input {
               SourceOp = "Crop1",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 156.188, 10.5746 } },
      },
      MediaOut = Note {
         NameSet = true,
         Inputs = {
            Comments = Input { Value = "After Merge1 add your mediaOut node", }
         },
         ViewInfo = StickyNoteInfo {
            Pos = { 277.918, 107.522 },
            Flags = {
               Expanded = true
            },
            Size = { 180, 74.6967 }
         },
      },
      SetDomain1 = SetDomain {
         Inputs = {
            Mode = Input { Value = FuID { "Set" }, },
            Input = Input {
               SourceOp = "Letterbox1",
               Source = "Output",
            }
         },
         ViewInfo = OperatorInfo { Pos = { 306.378, 10.5746 } },
      },
      Merge1 = Merge {
         Inputs = {
            Background = Input {
               SourceOp = "Blur",
               Source = "Output",
            },
            Foreground = Input {
               SourceOp = "SetDomain1",
               Source = "Output",
            },
            PerformDepthMerge = Input { Value = 0, }
         },
         ViewInfo = OperatorInfo { Pos = { 306.378, 68.429 } },
      }
   }
}


Usually when you go from 16:9 horizontal to 9:16 vertical you lose some resolution if you want it to fit in so you will have to do some resizing and fitting.

Resize node and letterbox would do the trick. Resize for resizing original you want blur or you can use transform tool and background node, but resize is somewhat easier, and you would use letterbox for fitting one aspect ratio to another. Set Domain simply limits the rendering area and acts as crop here.

I would suggest you use Blanking Fill open fx filter in resolve since its probably going to render it quicker and its more convenient to use. For the record I hate that type of effect from eye soar point of view, but if you wanted to do it or needed to that those are some ways to do it.

Its hard to account for specific masks or whatever you are using since I haven't seen it and don't know how they are constructed, but depending on what you need, similar approach can be used.

The other methods might involve using fusion clips or various other methods which conform all elements to timeline resolution automatically so you only have to change timeline format from horizontal to vertical, but because there are lot of resizing and suspect ratio change , depending on the complexity of what you do in fusion, you would need to set it up as you work to accommodate for resolution and more importantly aspect ratio change.

Most tools have auto resolution option in the image tab which will conform them to same resolution, usually of the timeline but it could be of the clips, depending how you work. If you using fusion clips than all elements follow same resolution which means if auto resolution option is turned on, they all change correspondingly.

But tricky is the part when you need to change aspect ratio, like going from horizontal to vertical. Because you don't want your logo or text to be squeezed to fit the new vertical aspect ratio with same resolution, you want it to change resolution but not aspect ratio and for that you usually want to use letterbox tool , which allows for that.

Return to Fusion

Who is online

Users browsing this forum: No registered users and 32 guests