Created
April 27, 2026 09:38
-
-
Save AndrewHazelden/755eb71b7f94b728349a930e024e869a to your computer and use it in GitHub Desktop.
This script copies the currently selected nodes in a Fusion composite to the copy/paste clipboard buffer as a Mermaid flowchart. Mermaid is an open-source graphing format that allows you to create vector charts that can be saved to a markdown format and rendered inline in a webpage.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --[[ | |
| Copy As Mermaid - 2026-04-12 04.53 AM (UTC -4) | |
| By Andrew Hazelden | |
| This script copies the currently selected nodes in a Fusion composite to the copy/paste clipboard buffer as a Mermaid flowchart. | |
| Mermaid is an open-source graphing format that allows you to create vector charts that can be saved to a markdown format and rendered inline in a webpage. | |
| https://mermaid.ai/open-source/syntax/flowchart.html | |
| The WSL forum supports Mermaid graphs embedded in a pair of BBCode tags: | |
| [mermaid][/mermaid] | |
| GitHub Flavoured Markdown supports Mermaid graphs embedded in a pair of code tags: | |
| ```mermaid | |
| ``` | |
| Known Issues: | |
| - GroupOperator and MacroOperator items are not handled correctly. Tip: The internal nodes are used to generate the flowchart if you run this script with nothing selected in the node graph. If the Group node is selected the input and output connections are not added to the Mermaid graph. | |
| --]] | |
| -- ---------------------- | |
| -- Customization Options | |
| -- ----------------------- | |
| -- Mermaid Output Wrapper - Should BBCode tags or Markdown tags be used? | |
| local outputWrapper = "BBCode" | |
| -- local outputWrapper = "Markdown" | |
| -- Should the graph be rendered using a left/right or top/bottom orientation? | |
| -- local flowShape = "LR" | |
| local flowShape = "TB" | |
| -- ---------------------- | |
| -- ---------------------- | |
| -- ------------------ | |
| -- Mermaid elements | |
| -- ------------------ | |
| local mermaidContent = "" | |
| -- Colors | |
| local classDef = "" | |
| -- Node Connections | |
| local connections = "" | |
| -- Node Names | |
| local class = "" | |
| -- Check if nodes are selected | |
| local tools = comp:GetToolList(true) | |
| -- Fusion Registry Listing | |
| reg_map = fusion:GetRegList() | |
| -- ------------------ | |
| function Color(tbl) | |
| -- RGB to HEX Color Conversions | |
| local hexString = "B9B097" | |
| if tbl and tbl.TileColor then | |
| local r, g, b = tbl.TileColor.R, tbl.TileColor.G, tbl.TileColor.B | |
| hexString = string.format("%02X%02X%02X", | |
| math.floor(r * 255), | |
| math.floor(g * 255), | |
| math.floor(b * 255) | |
| ) | |
| end | |
| return hexString | |
| end | |
| -- Fallback to use all nodes since nothing was selected | |
| if #tools > 0 then | |
| print("[Copy As Mermaid] Selected Nodes") | |
| -- dump(tools) | |
| else | |
| print("[Copy As Mermaid] Nothing Selected - Using all nodes in comp") | |
| tools = comp:GetToolList(false) | |
| -- dump(tools) | |
| end | |
| print("[Node List]") | |
| if comp and comp.CurrentFrame and comp.CurrentFrame.FlowView then | |
| local flow = comp.CurrentFrame.FlowView | |
| for i, tool in ipairs(tools) do | |
| -- Get the node location in the flow | |
| local x, y = flow:GetPos(tool) | |
| if x == nil then | |
| x = 0 | |
| end | |
| if y == nil then | |
| y = 0 | |
| end | |
| -- Translate to Mermaid | |
| print(string.format("\t[#] %3d [Node Name] %20s [Reg ID] %20s [Pos XY] %f, %f", tonumber(i), tostring(tool:GetAttrs().TOOLS_Name), tostring(tool.ID), x, y)) | |
| end | |
| end | |
| print("\n[Copy As Mermaid][Graph Output]") | |
| if comp and comp.CurrentFrame and comp.CurrentFrame.FlowView then | |
| print("[Status] Generating output... This might take a few moments.\n\n") | |
| local flow = comp.CurrentFrame.FlowView | |
| -- Traverse the nodes | |
| for i, tool in ipairs(tools) do | |
| local toolAttrs = tool:GetAttrs() | |
| -- Scan the input connections | |
| inpNum = 1 | |
| while true do | |
| -- local inConnect = tool:FindMainInput(1) | |
| local inConnect = tool:FindMainInput(inpNum) | |
| inpNum = inpNum + 1 | |
| if inConnect then | |
| outConnect = inConnect:GetConnectedOutput() | |
| if outConnect then | |
| local prevTool = tool | |
| local t = outConnect:GetTool() | |
| if t then | |
| local inputName = tostring(t:GetAttrs().TOOLS_Name) .. '.' .. tostring(outConnect.Name) | |
| local outputName = tostring(prevTool:GetAttrs().TOOLS_Name) .. '.' .. tostring(inConnect.Name) | |
| -- Node Colors | |
| -- RGB to HEX Color Conversions | |
| local hexTileString = Color(tool) | |
| local classDefItem = string.format("\tclassDef %s fill:#%s,stroke:#333,color:#fff\n", tostring(tool:GetAttrs().TOOLS_Name), hexTileString) | |
| classDef = classDef .. tostring(classDefItem) | |
| -- Node Connections | |
| local inputNum = i | |
| local outputNum = nil | |
| -- Look up the output connection node number in the tools table | |
| for iT, outputT in ipairs(tools) do | |
| if tostring(t:GetAttrs().TOOLS_Name) == tostring(outputT.Name) then | |
| outputNum = iT | |
| break | |
| end | |
| end | |
| local inputOp = "" | |
| local outputOp = "" | |
| for _iR, reg in ipairs(reg_map) do | |
| if reg.ID:match(tool:GetAttrs().TOOLS_RegID) then | |
| inputOp = " (" .. tostring(reg:GetAttrs().REGS_OpIconString) .. ")" | |
| -- dump(reg) | |
| break | |
| end | |
| end | |
| -- inputOp = " (" .. tostring(prevTool:GetAttrs().TOOLS_RegID) .. ")" | |
| local inputLabel = tostring(prevTool:GetAttrs().TOOLS_Name) .. tostring(inputOp) | |
| if outputNum ~= nil then | |
| for _iR, reg in ipairs(reg_map) do | |
| if reg.ID:match(t:GetAttrs().TOOLS_RegID) then | |
| outputOp = " (" .. tostring(reg:GetAttrs().REGS_OpIconString) .. ")" | |
| -- dump(reg) | |
| break | |
| end | |
| end | |
| end | |
| -- outputOp = " (" .. tostring(t:GetAttrs().TOOLS_RegID) .. ")" | |
| local outputLabel = tostring(t:GetAttrs().TOOLS_Name) .. tostring(outputOp) | |
| if outputNum ~= nil and outputLabel ~= nil and inputNum ~= nil and inputLabel ~= nil then | |
| local connectionsItem = string.format('\tN%d(["%s"]) --> N%d(["%s"])\n', tonumber(outputNum), tostring(outputLabel), tonumber(inputNum), tostring(inputLabel)) | |
| connections = tostring(connections) .. tostring(connectionsItem) | |
| end | |
| -- Node Names | |
| local classItem = string.format("\tclass N%d %s\n", tonumber(i), tostring(tool:GetAttrs().TOOLS_Name)) | |
| class = class .. tostring(classItem) | |
| end | |
| else | |
| -- print('[Branch Completed] ' .. toolAttrs.TOOLS_Name .. ' primary input not connected to another node') | |
| -- Node Colors | |
| -- RGB to HEX Color Conversions | |
| local hexTileString = Color(tool) | |
| local classDefItem = string.format("\tclassDef %s fill:#%s,stroke:#333,color:#fff\n", tostring(tool:GetAttrs().TOOLS_Name), hexTileString) | |
| classDef = classDef .. tostring(classDefItem) | |
| -- Node Names | |
| local classItem = string.format("\tclass N%d %s\n", tonumber(i), tostring(tool:GetAttrs().TOOLS_Name)) | |
| class = class .. tostring(classItem) | |
| break | |
| end | |
| else | |
| -- print('[Flow Completed] ' .. toolAttrs.TOOLS_Name .. ' must be a creator tool') | |
| finalTool = tool | |
| -- Node Colors | |
| -- RGB to HEX Color Conversions | |
| local hexTileString = Color(tool) | |
| local classDefItem = string.format("\tclassDef %s fill:#%s,stroke:#333,color:#fff\n", tostring(tool:GetAttrs().TOOLS_Name), hexTileString) | |
| classDef = classDef .. tostring(classDefItem) | |
| -- Node Names | |
| local classItem = string.format("\tclass N%d %s\n", tonumber(i), tostring(tool:GetAttrs().TOOLS_Name)) | |
| class = class .. tostring(classItem) | |
| break | |
| end | |
| end | |
| end | |
| -- Append all the Mermaid elements into a single output: | |
| local mermaidOpen = "" | |
| local mermaidClose = "" | |
| -- Header and Footer tags | |
| if outputWrapper == "BBCode" then | |
| -- WSL PHP BBCode format | |
| mermaidOpen = "[mermaid]" | |
| mermaidClose = "[/mermaid]" | |
| else | |
| -- GitHub Flavoured Markdown format | |
| mermaidOpen = "```mermaid" | |
| mermaidClose = "```" | |
| end | |
| -- Mermaid graph LR/TB | |
| local mermaidHeader = "graph " | |
| mermaidHeader = mermaidHeader .. tostring(flowShape) | |
| -- Link wireline color | |
| local mermaidLinkStyle = "\tlinkStyle default stroke:#ffffff,stroke-width:2px;" | |
| -- Combined Document | |
| mermaidContent = tostring(mermaidOpen) .. "\n" .. tostring(mermaidHeader) .. "\n" .. tostring(classDef) .. "\n" .. tostring(connections) .. "\n" .. tostring(class) .. "\n" .. tostring(mermaidLinkStyle) .. "\n" .. tostring(mermaidClose) | |
| print(mermaidContent) | |
| -- Copy the Mermaid document into the copy/paste clipboard buffer | |
| bmd.setclipboard(mermaidContent) | |
| else | |
| print("[Copy As Mermaid][Error] Cannot Find FlowView window. The node graph might be detached on a 2nd monitor.") | |
| end |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
After running the script in the Fusion page or Fusion Studio you get the comp converted into a vendor neutral flowchart representation.
The console shows a short summary:

And the markdown encoded mermaid output lands in your copy/paste clipboard buffer:
This is the final inline vector rendered result:
graph TB classDef GlowIt fill:#8C5A3F,stroke:#333,color:#fff classDef GIt_PreKey fill:#B9B097,stroke:#333,color:#fff classDef GIt_PreKey fill:#B9B097,stroke:#333,color:#fff classDef GIt_Pass4 fill:#B9B097,stroke:#333,color:#fff classDef GIt_Pass4 fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB2 fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB2 fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB2 fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB4 fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB4 fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB4 fill:#B9B097,stroke:#333,color:#fff classDef GIt_Booster fill:#E98CB5,stroke:#333,color:#fff classDef GIt_Booster fill:#E98CB5,stroke:#333,color:#fff classDef G_GamReverse fill:#79A8D0,stroke:#333,color:#fff classDef G_GamReverse fill:#79A8D0,stroke:#333,color:#fff classDef GIt_ColOperation fill:#B9B097,stroke:#333,color:#fff classDef GIt_ColOperation fill:#B9B097,stroke:#333,color:#fff classDef GIt_ColOperation fill:#B9B097,stroke:#333,color:#fff classDef GIt_PostBlur fill:#B9B097,stroke:#333,color:#fff classDef GIt_PostBlur fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB3 fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB3 fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB3 fill:#B9B097,stroke:#333,color:#fff classDef GIt_Pass3 fill:#B9B097,stroke:#333,color:#fff classDef GIt_Pass3 fill:#B9B097,stroke:#333,color:#fff classDef GIt_ColorMeSurprised fill:#B9B097,stroke:#333,color:#fff classDef GIt_ColorMeSurprised fill:#B9B097,stroke:#333,color:#fff classDef GIt_Dilate fill:#79A8D0,stroke:#333,color:#fff classDef GIt_Dilate fill:#79A8D0,stroke:#333,color:#fff classDef GIt_Pass2 fill:#B9B097,stroke:#333,color:#fff classDef GIt_Pass2 fill:#B9B097,stroke:#333,color:#fff classDef GIt_GlowOnly fill:#E98CB5,stroke:#333,color:#fff classDef GIt_GlowOnly fill:#E98CB5,stroke:#333,color:#fff classDef GIt_GlowOnly fill:#E98CB5,stroke:#333,color:#fff classDef GIt_AlphaCrusherA fill:#B9B097,stroke:#333,color:#fff classDef GIt_AlphaCrusherA fill:#B9B097,stroke:#333,color:#fff classDef GIt_Settings fill:#B9B097,stroke:#333,color:#fff classDef GIt_Settings fill:#B9B097,stroke:#333,color:#fff classDef GIt_Settings fill:#B9B097,stroke:#333,color:#fff classDef GIt_SetDomain fill:#79A8D0,stroke:#333,color:#fff classDef GIt_SetDomain fill:#79A8D0,stroke:#333,color:#fff classDef GIt_DepecheModesApplied fill:#B9B097,stroke:#333,color:#fff classDef GIt_DepecheModesApplied fill:#B9B097,stroke:#333,color:#fff classDef GIt_DepecheModesApplied fill:#B9B097,stroke:#333,color:#fff classDef GIt_ColorizeStrength fill:#B9B097,stroke:#333,color:#fff classDef GIt_ColorizeStrength fill:#B9B097,stroke:#333,color:#fff classDef GIt_ColorizeStrength fill:#B9B097,stroke:#333,color:#fff classDef GIt_Grain fill:#B9B097,stroke:#333,color:#fff classDef GIt_Grain fill:#B9B097,stroke:#333,color:#fff classDef GIt_Source fill:#E98CB5,stroke:#333,color:#fff classDef GIt_Source fill:#E98CB5,stroke:#333,color:#fff classDef GIt_Source fill:#E98CB5,stroke:#333,color:#fff classDef GIt_4xSatBoost fill:#B9B097,stroke:#333,color:#fff classDef GIt_4xSatBoost fill:#B9B097,stroke:#333,color:#fff classDef GIt_Grad fill:#B9B097,stroke:#333,color:#fff classDef GIt_HuntingHighAndGlow fill:#B9B097,stroke:#333,color:#fff classDef GIt_GainGamSat fill:#B9B097,stroke:#333,color:#fff classDef GIt_GainGamSat fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB1 fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB1 fill:#B9B097,stroke:#333,color:#fff classDef GIt_CB1 fill:#B9B097,stroke:#333,color:#fff classDef GIt_Pass1 fill:#B9B097,stroke:#333,color:#fff classDef GIt_Pass1 fill:#B9B097,stroke:#333,color:#fff classDef GIt_Angle fill:#996600,stroke:#333,color:#fff classDef GIt_Angle fill:#996600,stroke:#333,color:#fff classDef GIt_AngleReverse fill:#996600,stroke:#333,color:#fff classDef GIt_AngleReverse fill:#996600,stroke:#333,color:#fff classDef GIt_ctrl fill:#954BCD,stroke:#333,color:#fff classDef GIt_ctrl fill:#954BCD,stroke:#333,color:#fff classDef GIt_RenderCache fill:#B9B097,stroke:#333,color:#fff classDef GIt_RenderCache fill:#B9B097,stroke:#333,color:#fff classDef GIt_KeepAlphaC fill:#B9B097,stroke:#333,color:#fff classDef GIt_KeepAlphaC fill:#B9B097,stroke:#333,color:#fff classDef GIt_KeepAlphaA fill:#B9B097,stroke:#333,color:#fff classDef GIt_KeepAlphaA fill:#B9B097,stroke:#333,color:#fff classDef GIt_KeepAlphaB fill:#B9B097,stroke:#333,color:#fff classDef GIt_KeepAlphaB fill:#B9B097,stroke:#333,color:#fff classDef SetDomain1 fill:#B9B097,stroke:#333,color:#fff classDef SetDomain1 fill:#B9B097,stroke:#333,color:#fff classDef GIt_AlphaCrusherC fill:#B9B097,stroke:#333,color:#fff classDef GIt_AlphaCrusherC fill:#B9B097,stroke:#333,color:#fff classDef GIt_AlphaCrusherB fill:#B9B097,stroke:#333,color:#fff classDef GIt_AlphaCrusherB fill:#B9B097,stroke:#333,color:#fff classDef GIt_ApplyModeFix fill:#B9B097,stroke:#333,color:#fff classDef GIt_ApplyModeFix fill:#B9B097,stroke:#333,color:#fff N35(["GIt_KeepAlphaB (Mat)"]) --> N2(["GIt_PreKey (LKy)"]) N13(["GIt_Dilate (ErDl)"]) --> N3(["GIt_Pass4 (Blur)"]) N27(["GIt_CB1 (Bol)"]) --> N4(["GIt_CB2 (Bol)"]) N14(["GIt_Pass2 (Blur)"]) --> N4(["GIt_CB2 (Bol)"]) N10(["GIt_CB3 (Bol)"]) --> N5(["GIt_CB4 (Bol)"]) N3(["GIt_Pass4 (Blur)"]) --> N5(["GIt_CB4 (Bol)"]) N28(["GIt_Pass1 (Blur)"]) --> N6(["GIt_Booster (BC)"]) N5(["GIt_CB4 (Bol)"]) --> N7(["G_GamReverse (BC)"]) N20(["GIt_ColorizeStrength (Bol)"]) --> N8(["GIt_ColOperation (Bol)"]) N12(["GIt_ColorMeSurprised (Clr)"]) --> N8(["GIt_ColOperation (Bol)"]) N37(["GIt_AlphaCrusherC (AMl)"]) --> N9(["GIt_PostBlur (Blur)"]) N4(["GIt_CB2 (Bol)"]) --> N10(["GIt_CB3 (Bol)"]) N11(["GIt_Pass3 (Blur)"]) --> N10(["GIt_CB3 (Bol)"]) N13(["GIt_Dilate (ErDl)"]) --> N11(["GIt_Pass3 (Blur)"]) N20(["GIt_ColorizeStrength (Bol)"]) --> N12(["GIt_ColorMeSurprised (Clr)"]) N18(["GIt_SetDomain (DoD)"]) --> N13(["GIt_Dilate (ErDl)"]) N13(["GIt_Dilate (ErDl)"]) --> N14(["GIt_Pass2 (Blur)"]) N39(["GIt_ApplyModeFix (Mat)"]) --> N15(["GIt_GlowOnly (Bol)"]) N9(["GIt_PostBlur (Blur)"]) --> N15(["GIt_GlowOnly (Bol)"]) N30(["GIt_AngleReverse (nil)"]) --> N16(["GIt_AlphaCrusherA (ADv)"]) N25(["GIt_HuntingHighAndGlow (CD)"]) --> N17(["GIt_Settings (Bol)"]) N22(["GIt_Source (Bol)"]) --> N17(["GIt_Settings (Bol)"]) N29(["GIt_Angle (nil)"]) --> N18(["GIt_SetDomain (DoD)"]) N31(["GIt_ctrl (CD)"]) --> N19(["GIt_DepecheModesApplied (Mrg)"]) N9(["GIt_PostBlur (Blur)"]) --> N19(["GIt_DepecheModesApplied (Mrg)"]) N36(["SetDomain1 (DoD)"]) --> N20(["GIt_ColorizeStrength (Bol)"]) N24(["GIt_Grad (3FN)"]) --> N20(["GIt_ColorizeStrength (Bol)"]) N15(["GIt_GlowOnly (Bol)"]) --> N21(["GIt_Grain (FGr)"]) N21(["GIt_Grain (FGr)"]) --> N22(["GIt_Source (Bol)"]) N23(["GIt_4xSatBoost (BC)"]) --> N22(["GIt_Source (Bol)"]) N33(["GIt_KeepAlphaC (Mat)"]) --> N23(["GIt_4xSatBoost (BC)"]) N33(["GIt_KeepAlphaC (Mat)"]) --> N26(["GIt_GainGamSat (BC)"]) N13(["GIt_Dilate (ErDl)"]) --> N27(["GIt_CB1 (Bol)"]) N6(["GIt_Booster (BC)"]) --> N27(["GIt_CB1 (Bol)"]) N13(["GIt_Dilate (ErDl)"]) --> N28(["GIt_Pass1 (Blur)"]) N26(["GIt_GainGamSat (BC)"]) --> N29(["GIt_Angle (nil)"]) N7(["G_GamReverse (BC)"]) --> N30(["GIt_AngleReverse (nil)"]) N25(["GIt_HuntingHighAndGlow (CD)"]) --> N31(["GIt_ctrl (CD)"]) N17(["GIt_Settings (Bol)"]) --> N32(["GIt_RenderCache (Mrg)"]) N2(["GIt_PreKey (LKy)"]) --> N33(["GIt_KeepAlphaC (Mat)"]) N31(["GIt_ctrl (CD)"]) --> N34(["GIt_KeepAlphaA (ADv)"]) N34(["GIt_KeepAlphaA (ADv)"]) --> N35(["GIt_KeepAlphaB (Mat)"]) N38(["GIt_AlphaCrusherB (BC)"]) --> N36(["SetDomain1 (DoD)"]) N8(["GIt_ColOperation (Bol)"]) --> N37(["GIt_AlphaCrusherC (AMl)"]) N16(["GIt_AlphaCrusherA (ADv)"]) --> N38(["GIt_AlphaCrusherB (BC)"]) N19(["GIt_DepecheModesApplied (Mrg)"]) --> N39(["GIt_ApplyModeFix (Mat)"]) class N1 GlowIt class N2 GIt_PreKey class N2 GIt_PreKey class N3 GIt_Pass4 class N3 GIt_Pass4 class N4 GIt_CB2 class N4 GIt_CB2 class N4 GIt_CB2 class N5 GIt_CB4 class N5 GIt_CB4 class N5 GIt_CB4 class N6 GIt_Booster class N6 GIt_Booster class N7 G_GamReverse class N7 G_GamReverse class N8 GIt_ColOperation class N8 GIt_ColOperation class N8 GIt_ColOperation class N9 GIt_PostBlur class N9 GIt_PostBlur class N10 GIt_CB3 class N10 GIt_CB3 class N10 GIt_CB3 class N11 GIt_Pass3 class N11 GIt_Pass3 class N12 GIt_ColorMeSurprised class N12 GIt_ColorMeSurprised class N13 GIt_Dilate class N13 GIt_Dilate class N14 GIt_Pass2 class N14 GIt_Pass2 class N15 GIt_GlowOnly class N15 GIt_GlowOnly class N15 GIt_GlowOnly class N16 GIt_AlphaCrusherA class N16 GIt_AlphaCrusherA class N17 GIt_Settings class N17 GIt_Settings class N17 GIt_Settings class N18 GIt_SetDomain class N18 GIt_SetDomain class N19 GIt_DepecheModesApplied class N19 GIt_DepecheModesApplied class N19 GIt_DepecheModesApplied class N20 GIt_ColorizeStrength class N20 GIt_ColorizeStrength class N20 GIt_ColorizeStrength class N21 GIt_Grain class N21 GIt_Grain class N22 GIt_Source class N22 GIt_Source class N22 GIt_Source class N23 GIt_4xSatBoost class N23 GIt_4xSatBoost class N24 GIt_Grad class N25 GIt_HuntingHighAndGlow class N26 GIt_GainGamSat class N26 GIt_GainGamSat class N27 GIt_CB1 class N27 GIt_CB1 class N27 GIt_CB1 class N28 GIt_Pass1 class N28 GIt_Pass1 class N29 GIt_Angle class N29 GIt_Angle class N30 GIt_AngleReverse class N30 GIt_AngleReverse class N31 GIt_ctrl class N31 GIt_ctrl class N32 GIt_RenderCache class N32 GIt_RenderCache class N33 GIt_KeepAlphaC class N33 GIt_KeepAlphaC class N34 GIt_KeepAlphaA class N34 GIt_KeepAlphaA class N35 GIt_KeepAlphaB class N35 GIt_KeepAlphaB class N36 SetDomain1 class N36 SetDomain1 class N37 GIt_AlphaCrusherC class N37 GIt_AlphaCrusherC class N38 GIt_AlphaCrusherB class N38 GIt_AlphaCrusherB class N39 GIt_ApplyModeFix class N39 GIt_ApplyModeFix linkStyle default stroke:#ffffff,stroke-width:2px;