"})," tag in HTML. It provides a container with basic styling that can be further composed."]}),"\n",(0,t.jsx)(n.h3,{id:"absolute-positioning",children:"Absolute positioning"}),"\n",(0,t.jsx)(d.default,{}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"View"})," supports absolute positioning for its child components. If not provided explicitly, an absolutely positioned child will inherit ",(0,t.jsx)(n.code,{children:'"width"'})," and ",(0,t.jsx)(n.code,{children:'"height"'})," from the parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"View"})," can be absolutely positioned relative to its parent if the parent component supports it."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"static-positioning",children:"Static positioning"}),"\n",(0,t.jsxs)(n.p,{children:["When children of a ",(0,t.jsx)(n.code,{children:"View"})," component have a static position, they are placed next to each other."]}),"\n",(0,t.jsxs)(n.h4,{id:"for-directionrow",children:["For ",(0,t.jsx)(n.code,{children:"direction=row"}),":"]}),"\n",(0,t.jsxs)(n.p,{children:["Children of a ",(0,t.jsx)(n.code,{children:"View"})," component form a row, with items aligned to the top. The size of each child will be calculated in the following way:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["If the ",(0,t.jsx)(n.code,{children:"width"})," or ",(0,t.jsx)(n.code,{children:"height"})," of a child component is defined, then those values take priority."]}),"\n",(0,t.jsxs)(n.li,{children:["If the ",(0,t.jsx)(n.code,{children:"height"})," is not defined, the component will have the same ",(0,t.jsx)(n.code,{children:"height"})," as its parent."]}),"\n",(0,t.jsxs)(n.li,{children:["If the ",(0,t.jsx)(n.code,{children:"width"})," is not defined, we calculate the sum ",(0,t.jsx)(n.code,{children:"width"})," of all components with that value defined.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["If it is larger than the parent's ",(0,t.jsx)(n.code,{children:"width"}),", then the ",(0,t.jsx)(n.code,{children:"width"})," of the rest of the components is zero."]}),"\n",(0,t.jsxs)(n.li,{children:["If it is smaller than the parent's ",(0,t.jsx)(n.code,{children:"width"}),", calculate the difference and divide the resulting value equally between all children with unknown widths."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.h4,{id:"for-directioncolumn",children:["For ",(0,t.jsx)(n.code,{children:"direction=column"}),":"]}),"\n",(0,t.jsxs)(n.p,{children:["Analogous to the ",(0,t.jsx)(n.code,{children:"direction=row"})," case, but children form a column instead, with items aligned to the left."]}),"\n",(0,t.jsx)(n.h3,{id:"transitions",children:"Transitions"}),"\n",(0,t.jsxs)(n.p,{children:["On the scene update, a ",(0,t.jsx)(n.code,{children:"View"})," component will animate between the original state and the new one if the ",(0,t.jsx)(n.code,{children:"transition"})," field is defined. Both the original and the new scene need to define a component with the same ",(0,t.jsx)(n.code,{children:"id"}),". Currently, only some of the fields support animated transitions:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"width"})," / ",(0,t.jsx)(n.code,{children:"height"})," - Only supported within the same positioning mode. If the positioning mode changes between the old scene and the new one, the transition will not work."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"bottom"})," / ",(0,t.jsx)(n.code,{children:"top"})," / ",(0,t.jsx)(n.code,{children:"left"})," / ",(0,t.jsx)(n.code,{children:"right"})," / ",(0,t.jsx)(n.code,{children:"rotation"})," - Only supports transition when changing a value of the same field. If the old scene defines a ",(0,t.jsx)(n.code,{children:"left"})," field and the new one does not, the transition will not work."]}),"\n"]}),"\n",(0,t.jsx)(s.default,{})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},5660:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var t=i(5893),o=i(1151);const s={},d=void 0,r={id:"api/generated/component-View",title:"component-View",description:"View",source:"@site/pages/api/generated/component-View.md",sourceDirName:"api/generated",slug:"/api/generated/component-View",permalink:"/docs/api/generated/component-View",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{}},l={},c=[{value:"View",id:"view",level:2},{value:"Properties",id:"properties",level:4},{value:"Transition",id:"transition",level:2},{value:"Properties",id:"properties-1",level:4},{value:"EasingFunction",id:"easingfunction",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"view",children:"View"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:'type View = {\n id?: string;\n children?: Component[];\n width?: f32;\n height?: f32;\n direction?: "row" | "column";\n top?: f32;\n left?: f32;\n bottom?: f32;\n right?: f32;\n rotation?: f32;\n transition?: Transition;\n overflow?: "visible" | "hidden" | "fit";\n background_color_rgba?: string;\n}\n'})}),"\n",(0,t.jsx)(n.h4,{id:"properties",children:"Properties"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"id"})," - Id of a component."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"children"})," - List of component's children."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"width"})," - Width of a component in pixels. Exact behavior might be different based on the parent\ncomponent:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:'If the parent component is a layout, check sections "Absolute positioning" and "Static\npositioning" of that component.'}),"\n",(0,t.jsx)(n.li,{children:"If the parent component is not a layout, then this field is required."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"height"})," - Height of a component in pixels. Exact behavior might be different based on the parent\ncomponent:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:'If the parent component is a layout, check sections "Absolute positioning" and "Static\npositioning" of that component.'}),"\n",(0,t.jsx)(n.li,{children:"If the parent component is not a layout, then this field is required."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"direction"})," - Direction defines how static children are positioned inside a View component.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:'"row"'})," - Children positioned from left to right."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:'"column"'})," - Children positioned from top to bottom."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"top"})," - Distance in pixels between this component's top edge and its parent's top edge.\nIf this field is defined, then the component will ignore a layout defined by its parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"left"})," - Distance in pixels between this component's left edge and its parent's left edge.\nIf this field is defined, this element will be absolutely positioned, instead of being\nlaid out by its parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"bottom"})," - Distance in pixels between the bottom edge of this component and the bottom edge of its parent.\nIf this field is defined, this element will be absolutely positioned, instead of being\nlaid out by its parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"right"})," - Distance in pixels between this component's right edge and its parent's right edge.\nIf this field is defined, this element will be absolutely positioned, instead of being\nlaid out by its parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"rotation"})," - Rotation of a component in degrees. If this field is defined, this element will be\nabsolutely positioned, instead of being laid out by its parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"transition"})," - Defines how this component will behave during a scene update. This will only have an\neffect if the previous scene already contained a View component with the same id."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"overflow"})," - (",(0,t.jsxs)(n.strong,{children:["default=",(0,t.jsx)(n.code,{children:'"hidden"'})]}),") Controls what happens to content that is too big to fit into an area.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:'"visible"'})," - Render everything, including content that extends beyond their parent."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:'"hidden"'})," - Render only parts of the children that are inside their parent area."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:'"fit"'})," - If children components are too big to fit inside the parent, resize everything inside to fit."]}),"\n",(0,t.jsx)(n.p,{children:"Components that have unknown sizes will be treated as if they had a size 0 when calculating\nscaling factor."}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"This will resize everything inside, even absolutely positioned elements. For example, if\nyou have an element in the bottom right corner and the content will be rescaled by a factor 0.5x,\nthen that component will end up in the middle of its parent"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"background_color_rgba"})," - (",(0,t.jsxs)(n.strong,{children:["default=",(0,t.jsx)(n.code,{children:'"#00000000"'})]}),") Background color in a ",(0,t.jsx)(n.code,{children:'"#RRGGBBAA"'})," format."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"transition",children:"Transition"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"type Transition = {\n duration_ms: f64;\n easing_function?: EasingFunction;\n}\n"})}),"\n",(0,t.jsx)(n.h4,{id:"properties-1",children:"Properties"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"duration_ms"})," - Duration of a transition in milliseconds."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"easing_function"})," - (",(0,t.jsxs)(n.strong,{children:["default=",(0,t.jsx)(n.code,{children:'"linear"'})]}),") Easing function to be used for the transition."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"easingfunction",children:"EasingFunction"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:'type EasingFunction = \n | { function_name: "linear"; }\n | { function_name: "bounce"; }\n | {\n function_name: "cubic_bezier";\n points: [f64, f64, f64, f64];\n }\n'})}),"\n",(0,t.jsx)(n.p,{children:"Easing functions are used to interpolate between two values over time."}),"\n",(0,t.jsxs)(n.p,{children:["Custom easing functions can be implemented with cubic B\xe9zier.\nThe control points are defined with ",(0,t.jsx)(n.code,{children:"points"})," field by providing four numerical values: ",(0,t.jsx)(n.code,{children:"x1"}),", ",(0,t.jsx)(n.code,{children:"y1"}),", ",(0,t.jsx)(n.code,{children:"x2"})," and ",(0,t.jsx)(n.code,{children:"y2"}),". The ",(0,t.jsx)(n.code,{children:"x1"})," and ",(0,t.jsx)(n.code,{children:"x2"})," values have to be in the range ",(0,t.jsx)(n.code,{children:"[0; 1]"}),". The cubic B\xe9zier result is clamped to the range ",(0,t.jsx)(n.code,{children:"[0; 1]"}),".\nYou can find example control point configurations ",(0,t.jsx)(n.a,{href:"https://easings.net/",children:"here"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},9342:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var t=i(5893),o=i(1151);const s={},d=void 0,r={id:"common/absolute-position",title:"absolute-position",description:"A component is absolutely positioned if it defines fields like top, left, right, bottom, or rotation.",source:"@site/pages/common/absolute-position.md",sourceDirName:"common",slug:"/common/absolute-position",permalink:"/docs/common/absolute-position",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{}},l={},c=[];function a(e){const n={p:"p",...(0,o.a)(),...e.components};return(0,t.jsx)(n.p,{children:"A component is absolutely positioned if it defines fields like top, left, right, bottom, or rotation.\nThose fields define the component's position relative to its parent. However, to respect those values,\nthe parent component has to be a layout component that supports absolute positioning."})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>r,a:()=>d});var t=i(7294);const o={},s=t.createContext(o);function d(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:d(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/6ecc9e9d.bb0461cd.js b/assets/js/6ecc9e9d.bb0461cd.js
new file mode 100644
index 000000000..12b60b513
--- /dev/null
+++ b/assets/js/6ecc9e9d.bb0461cd.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[6019,6633,2317],{9620:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>u,frontMatter:()=>r,metadata:()=>c,toc:()=>h});var t=i(4848),o=i(8453),s=i(1711),d=i(2110);const r={sidebar_position:2,hide_table_of_contents:!0},l="View",c={id:"api/components/View",title:"View",description:"View is the compositor's core layout mechanism. Its role is analogous to the",source:"@site/pages/api/components/View.md",sourceDirName:"api/components",slug:"/api/components/View",permalink:"/docs/api/components/View",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,hide_table_of_contents:!0},sidebar:"sidebar",previous:{title:"InputStream",permalink:"/docs/api/components/InputStream"},next:{title:"Rescaler",permalink:"/docs/api/components/Rescaler"}},a={},h=[{value:"Absolute positioning",id:"absolute-positioning",level:3},{value:"Static positioning",id:"static-positioning",level:3},{value:"For
:",id:"for-directioncolumn",level:4},{value:"Transitions",id:"transitions",level:3}];function p(e){const n={code:"code",h1:"h1",h3:"h3",h4:"h4",li:"li",p:"p",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"view",children:"View"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:"View"})," is the compositor's core layout mechanism. Its role is analogous to the\n",(0,t.jsx)(n.code,{children:"
"})," tag in HTML. It provides a container with basic styling that can be further composed."]}),"\n",(0,t.jsx)(n.h3,{id:"absolute-positioning",children:"Absolute positioning"}),"\n",(0,t.jsx)(d.default,{}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"View"})," supports absolute positioning for its child components. If not provided explicitly, an absolutely positioned child will inherit ",(0,t.jsx)(n.code,{children:'"width"'})," and ",(0,t.jsx)(n.code,{children:'"height"'})," from the parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"View"})," can be absolutely positioned relative to its parent if the parent component supports it."]}),"\n"]}),"\n",(0,t.jsx)(n.h3,{id:"static-positioning",children:"Static positioning"}),"\n",(0,t.jsxs)(n.p,{children:["When children of a ",(0,t.jsx)(n.code,{children:"View"})," component have a static position, they are placed next to each other."]}),"\n",(0,t.jsxs)(n.h4,{id:"for-directionrow",children:["For ",(0,t.jsx)(n.code,{children:"direction=row"}),":"]}),"\n",(0,t.jsxs)(n.p,{children:["Children of a ",(0,t.jsx)(n.code,{children:"View"})," component form a row, with items aligned to the top. The size of each child will be calculated in the following way:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["If the ",(0,t.jsx)(n.code,{children:"width"})," or ",(0,t.jsx)(n.code,{children:"height"})," of a child component is defined, then those values take priority."]}),"\n",(0,t.jsxs)(n.li,{children:["If the ",(0,t.jsx)(n.code,{children:"height"})," is not defined, the component will have the same ",(0,t.jsx)(n.code,{children:"height"})," as its parent."]}),"\n",(0,t.jsxs)(n.li,{children:["If the ",(0,t.jsx)(n.code,{children:"width"})," is not defined, we calculate the sum ",(0,t.jsx)(n.code,{children:"width"})," of all components with that value defined.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["If it is larger than the parent's ",(0,t.jsx)(n.code,{children:"width"}),", then the ",(0,t.jsx)(n.code,{children:"width"})," of the rest of the components is zero."]}),"\n",(0,t.jsxs)(n.li,{children:["If it is smaller than the parent's ",(0,t.jsx)(n.code,{children:"width"}),", calculate the difference and divide the resulting value equally between all children with unknown widths."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.h4,{id:"for-directioncolumn",children:["For ",(0,t.jsx)(n.code,{children:"direction=column"}),":"]}),"\n",(0,t.jsxs)(n.p,{children:["Analogous to the ",(0,t.jsx)(n.code,{children:"direction=row"})," case, but children form a column instead, with items aligned to the left."]}),"\n",(0,t.jsx)(n.h3,{id:"transitions",children:"Transitions"}),"\n",(0,t.jsxs)(n.p,{children:["On the scene update, a ",(0,t.jsx)(n.code,{children:"View"})," component will animate between the original state and the new one if the ",(0,t.jsx)(n.code,{children:"transition"})," field is defined. Both the original and the new scene need to define a component with the same ",(0,t.jsx)(n.code,{children:"id"}),". Currently, only some of the fields support animated transitions:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"width"})," / ",(0,t.jsx)(n.code,{children:"height"})," - Only supported within the same positioning mode. If the positioning mode changes between the old scene and the new one, the transition will not work."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"bottom"})," / ",(0,t.jsx)(n.code,{children:"top"})," / ",(0,t.jsx)(n.code,{children:"left"})," / ",(0,t.jsx)(n.code,{children:"right"})," / ",(0,t.jsx)(n.code,{children:"rotation"})," - Only supports transition when changing a value of the same field. If the old scene defines a ",(0,t.jsx)(n.code,{children:"left"})," field and the new one does not, the transition will not work."]}),"\n"]}),"\n",(0,t.jsx)(s.default,{})]})}function u(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},1711:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var t=i(4848),o=i(8453);const s={},d=void 0,r={id:"api/generated/component-View",title:"component-View",description:"View",source:"@site/pages/api/generated/component-View.md",sourceDirName:"api/generated",slug:"/api/generated/component-View",permalink:"/docs/api/generated/component-View",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{}},l={},c=[{value:"View",id:"view",level:2},{value:"Properties",id:"properties",level:4},{value:"Transition",id:"transition",level:2},{value:"Properties",id:"properties-1",level:4},{value:"EasingFunction",id:"easingfunction",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"view",children:"View"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:'type View = {\n id?: string;\n children?: Component[];\n width?: f32;\n height?: f32;\n direction?: "row" | "column";\n top?: f32;\n left?: f32;\n bottom?: f32;\n right?: f32;\n rotation?: f32;\n transition?: Transition;\n overflow?: "visible" | "hidden" | "fit";\n background_color_rgba?: string;\n}\n'})}),"\n",(0,t.jsx)(n.h4,{id:"properties",children:"Properties"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"id"})," - Id of a component."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"children"})," - List of component's children."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"width"})," - Width of a component in pixels. Exact behavior might be different based on the parent\ncomponent:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:'If the parent component is a layout, check sections "Absolute positioning" and "Static\npositioning" of that component.'}),"\n",(0,t.jsx)(n.li,{children:"If the parent component is not a layout, then this field is required."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"height"})," - Height of a component in pixels. Exact behavior might be different based on the parent\ncomponent:","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:'If the parent component is a layout, check sections "Absolute positioning" and "Static\npositioning" of that component.'}),"\n",(0,t.jsx)(n.li,{children:"If the parent component is not a layout, then this field is required."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"direction"})," - Direction defines how static children are positioned inside a View component.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:'"row"'})," - Children positioned from left to right."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:'"column"'})," - Children positioned from top to bottom."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"top"})," - Distance in pixels between this component's top edge and its parent's top edge.\nIf this field is defined, then the component will ignore a layout defined by its parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"left"})," - Distance in pixels between this component's left edge and its parent's left edge.\nIf this field is defined, this element will be absolutely positioned, instead of being\nlaid out by its parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"bottom"})," - Distance in pixels between the bottom edge of this component and the bottom edge of its parent.\nIf this field is defined, this element will be absolutely positioned, instead of being\nlaid out by its parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"right"})," - Distance in pixels between this component's right edge and its parent's right edge.\nIf this field is defined, this element will be absolutely positioned, instead of being\nlaid out by its parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"rotation"})," - Rotation of a component in degrees. If this field is defined, this element will be\nabsolutely positioned, instead of being laid out by its parent."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"transition"})," - Defines how this component will behave during a scene update. This will only have an\neffect if the previous scene already contained a View component with the same id."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"overflow"})," - (",(0,t.jsxs)(n.strong,{children:["default=",(0,t.jsx)(n.code,{children:'"hidden"'})]}),") Controls what happens to content that is too big to fit into an area.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:'"visible"'})," - Render everything, including content that extends beyond their parent."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:'"hidden"'})," - Render only parts of the children that are inside their parent area."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.code,{children:'"fit"'})," - If children components are too big to fit inside the parent, resize everything inside to fit."]}),"\n",(0,t.jsx)(n.p,{children:"Components that have unknown sizes will be treated as if they had a size 0 when calculating\nscaling factor."}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"This will resize everything inside, even absolutely positioned elements. For example, if\nyou have an element in the bottom right corner and the content will be rescaled by a factor 0.5x,\nthen that component will end up in the middle of its parent"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"background_color_rgba"})," - (",(0,t.jsxs)(n.strong,{children:["default=",(0,t.jsx)(n.code,{children:'"#00000000"'})]}),") Background color in a ",(0,t.jsx)(n.code,{children:'"#RRGGBBAA"'})," format."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"transition",children:"Transition"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:"type Transition = {\n duration_ms: f64;\n easing_function?: EasingFunction;\n}\n"})}),"\n",(0,t.jsx)(n.h4,{id:"properties-1",children:"Properties"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"duration_ms"})," - Duration of a transition in milliseconds."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"easing_function"})," - (",(0,t.jsxs)(n.strong,{children:["default=",(0,t.jsx)(n.code,{children:'"linear"'})]}),") Easing function to be used for the transition."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"easingfunction",children:"EasingFunction"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:'type EasingFunction = \n | { function_name: "linear"; }\n | { function_name: "bounce"; }\n | {\n function_name: "cubic_bezier";\n points: [f64, f64, f64, f64];\n }\n'})}),"\n",(0,t.jsx)(n.p,{children:"Easing functions are used to interpolate between two values over time."}),"\n",(0,t.jsxs)(n.p,{children:["Custom easing functions can be implemented with cubic B\xe9zier.\nThe control points are defined with ",(0,t.jsx)(n.code,{children:"points"})," field by providing four numerical values: ",(0,t.jsx)(n.code,{children:"x1"}),", ",(0,t.jsx)(n.code,{children:"y1"}),", ",(0,t.jsx)(n.code,{children:"x2"})," and ",(0,t.jsx)(n.code,{children:"y2"}),". The ",(0,t.jsx)(n.code,{children:"x1"})," and ",(0,t.jsx)(n.code,{children:"x2"})," values have to be in the range ",(0,t.jsx)(n.code,{children:"[0; 1]"}),". The cubic B\xe9zier result is clamped to the range ",(0,t.jsx)(n.code,{children:"[0; 1]"}),".\nYou can find example control point configurations ",(0,t.jsx)(n.a,{href:"https://easings.net/",children:"here"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},2110:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var t=i(4848),o=i(8453);const s={},d=void 0,r={id:"common/absolute-position",title:"absolute-position",description:"A component is absolutely positioned if it defines fields like top, left, right, bottom, or rotation.",source:"@site/pages/common/absolute-position.md",sourceDirName:"common",slug:"/common/absolute-position",permalink:"/docs/common/absolute-position",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{}},l={},c=[];function a(e){const n={p:"p",...(0,o.R)(),...e.components};return(0,t.jsx)(n.p,{children:"A component is absolutely positioned if it defines fields like top, left, right, bottom, or rotation.\nThose fields define the component's position relative to its parent. However, to respect those values,\nthe parent component has to be a layout component that supports absolute positioning."})}function h(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>d,x:()=>r});var t=i(6540);const o={},s=t.createContext(o);function d(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:d(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/72fe5344.acf09f74.js b/assets/js/72fe5344.5545caa5.js
similarity index 95%
rename from assets/js/72fe5344.acf09f74.js
rename to assets/js/72fe5344.5545caa5.js
index 0a068daac..f31d65a8a 100644
--- a/assets/js/72fe5344.acf09f74.js
+++ b/assets/js/72fe5344.5545caa5.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[3224],{5174:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>c});var r=i(5893),s=i(1151);const o={},l="Requirements",t={id:"deployment/requirements",title:"Requirements",description:"LiveCompositor imposes certain requirements both in the runtime and during a build. Specifics might differ depending on the way you use the compositor and features you are requiring.",source:"@site/pages/deployment/requirements.md",sourceDirName:"deployment",slug:"/deployment/requirements",permalink:"/docs/deployment/requirements",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{},sidebar:"sidebar",previous:{title:"Deployment",permalink:"/docs/deployment/overview"},next:{title:"Configuration",permalink:"/docs/deployment/configuration"}},d={},c=[{value:"WebGPU features",id:"webgpu-features",level:2},{value:"Hardware requirements",id:"hardware-requirements",level:2},{value:"Software requirements",id:"software-requirements",level:2},{value:"Dockerfile",id:"dockerfile",level:3},{value:"Binaries from GitHub releases",id:"binaries-from-github-releases",level:3},{value:"Building from source",id:"building-from-source",level:3},{value:"Nix",id:"nix",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"requirements",children:"Requirements"}),"\n",(0,r.jsx)(n.p,{children:"LiveCompositor imposes certain requirements both in the runtime and during a build. Specifics might differ depending on the way you use the compositor and features you are requiring."}),"\n",(0,r.jsx)(n.h2,{id:"webgpu-features",children:"WebGPU features"}),"\n",(0,r.jsx)(n.p,{children:"If a feature is not supported then compositor server will fail on startup."}),"\n",(0,r.jsx)(n.p,{children:"Always required:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"TEXTURE_BINDING_ARRAY"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"PUSH_CONSTANTS"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Enabled by default:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"SAMPLED_TEXTURE_AND_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"UNIFORM_BUFFER_AND_STORAGE_TEXTURE_ARRAY_NON_UNIFORM_INDEXING"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Those options are enabled by default, but can be disabled using ",(0,r.jsx)(n.a,{href:"/docs/deployment/configuration#live_compositor_required_wgpu_features",children:(0,r.jsx)(n.code,{children:"LIVE_COMPOSITOR_REQUIRED_WGPU_FEATURES"})})," environment variable."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"All of the above features should be available on almost any GPU. If you are getting an error\nabout unsupported features, then most likely, the issue is caused by missing or too old drivers."})}),"\n",(0,r.jsx)(n.h2,{id:"hardware-requirements",children:"Hardware requirements"}),"\n",(0,r.jsx)(n.p,{children:"Supported platforms:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Linux - ",(0,r.jsx)(n.code,{children:"x86_64"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"It should work with any GPU from hardware perspective. Even though very unlikely, it is possible\nthat some GPUs might not have drivers that implement all the required features."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"macOS - Apple Silicon"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Other platforms are not regularly tested, but compositor should also work on:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Linux - ",(0,r.jsx)(n.code,{children:"aarch64"})," (Note that by default docker on Apple Silicon macOS is running ",(0,r.jsx)(n.code,{children:"aarch64"})," Linux)"]}),"\n",(0,r.jsxs)(n.li,{children:["macOS - ",(0,r.jsx)(n.code,{children:"x86_64"})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"software-requirements",children:"Software requirements"}),"\n",(0,r.jsx)(n.h3,{id:"dockerfile",children:"Dockerfile"}),"\n",(0,r.jsxs)(n.p,{children:["Dockerfile defines all software requirements. Configurations provided in ",(0,r.jsx)(n.a,{href:"https://github.com/software-mansion/live-compositor/tree/master/build_tools/docker",children:"the compositor repo"}),"\nare written to work with both GPU and CPU based rendering. To use them in your own project, just copy\nthe Dockerfile and replace ",(0,r.jsx)(n.code,{children:"COPY . /root/project"})," with an appropriate ",(0,r.jsx)("nobr",{children:(0,r.jsx)(n.code,{children:"RUN git clone ..."})})," command."]}),"\n",(0,r.jsxs)(n.p,{children:["If you want to use a different distro or different Ubuntu version then consult the ",(0,r.jsx)(n.a,{href:"#building-from-source",children:(0,r.jsx)(n.code,{children:"building from source"})})," section."]}),"\n",(0,r.jsx)(n.h3,{id:"binaries-from-github-releases",children:"Binaries from GitHub releases"}),"\n",(0,r.jsx)(n.p,{children:"For Linux:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"FFmpeg 6"}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"glibc"})," 2.35 or higher (version used by Ubuntu 22.04)"]}),"\n",(0,r.jsxs)(n.li,{children:["MESA (e.g. ",(0,r.jsx)(n.code,{children:"mesa-vulkan-drivers"})," package on Ubuntu)","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"23.2.1"})," or higher for CPU based rendering"]}),"\n",(0,r.jsxs)(n.li,{children:["For GPU based rendering the lowest version we tested was ",(0,r.jsx)(n.code,{children:"22.0.1"}),", but older version might also work."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"For macOS:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"FFmpeg 7 (this version will mostly follow a default version available in Homebrew)"}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"Changing FFmpeg version on macOS might be troublesome, so we decided to produce binaries that will\nbe easiest to use for most users, even if this means updating FFmpeg version in a minor or patch release.\nChanges like that might be considered unsafe, but in case of LiveCompositor macOS platform will be used\nmostly for development, and it is highly unlikely to be used for a production deployment."})}),"\n",(0,r.jsx)(n.h3,{id:"building-from-source",children:"Building from source"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"FFmpeg 6 or higher. Build time version has to be the same as runtime version."}),"\n",(0,r.jsx)(n.li,{children:"Rust toolchain."}),"\n",(0,r.jsxs)(n.li,{children:["Following libraries (for build time you will need version with header files if your distro ships them separately):","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["FFmpeg dependencies: ",(0,r.jsx)(n.code,{children:"libavcodec"}),", ",(0,r.jsx)(n.code,{children:"libavformat"}),", ",(0,r.jsx)(n.code,{children:"libavfilter"}),", ",(0,r.jsx)(n.code,{children:"libavdevice"}),", ",(0,r.jsx)(n.code,{children:"libavutil"}),", ",(0,r.jsx)(n.code,{children:"libswscale"}),", ",(0,r.jsx)(n.code,{children:"libswresample"})]}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"libopus"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"libssl"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Linux specific (with a Vulkan backend):"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["MESA","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"23.2.1"})," or higher for CPU based rendering"]}),"\n",(0,r.jsxs)(n.li,{children:["For GPU based rendering the lowest version we tested was ",(0,r.jsx)(n.code,{children:"22.0.1"}),", but older version might also work."]}),"\n",(0,r.jsxs)(n.li,{children:["e.g. for Ubuntu","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["build time: ",(0,r.jsx)(n.code,{children:"apt-get install libegl1-mesa-dev libgl1-mesa-dri libxcb-xfixes0-dev"})]}),"\n",(0,r.jsxs)(n.li,{children:["runtime: ",(0,r.jsx)(n.code,{children:"apt-get install mesa-vulkan-drivers"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"nix",children:"Nix"}),"\n",(0,r.jsx)(n.p,{children:"LiveCompositor repository includes a nix flake, but because compositor is highly dependent on hardware and\navailable drivers this configuration might not be self-contained/portable as nix configuration are expected\nto be in general."}),"\n",(0,r.jsx)(n.p,{children:"This configuration is primary used for development, and it is not recommended unless you know what you are doing."})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>t,a:()=>l});var r=i(7294);const s={},o=r.createContext(s);function l(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[2775],{5255:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>c});var r=i(4848),s=i(8453);const o={},l="Requirements",t={id:"deployment/requirements",title:"Requirements",description:"LiveCompositor imposes certain requirements both in the runtime and during a build. Specifics might differ depending on the way you use the compositor and features you are requiring.",source:"@site/pages/deployment/requirements.md",sourceDirName:"deployment",slug:"/deployment/requirements",permalink:"/docs/deployment/requirements",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{},sidebar:"sidebar",previous:{title:"Deployment",permalink:"/docs/deployment/overview"},next:{title:"Configuration",permalink:"/docs/deployment/configuration"}},d={},c=[{value:"WebGPU features",id:"webgpu-features",level:2},{value:"Hardware requirements",id:"hardware-requirements",level:2},{value:"Software requirements",id:"software-requirements",level:2},{value:"Dockerfile",id:"dockerfile",level:3},{value:"Binaries from GitHub releases",id:"binaries-from-github-releases",level:3},{value:"Building from source",id:"building-from-source",level:3},{value:"Nix",id:"nix",level:3}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"requirements",children:"Requirements"}),"\n",(0,r.jsx)(n.p,{children:"LiveCompositor imposes certain requirements both in the runtime and during a build. Specifics might differ depending on the way you use the compositor and features you are requiring."}),"\n",(0,r.jsx)(n.h2,{id:"webgpu-features",children:"WebGPU features"}),"\n",(0,r.jsx)(n.p,{children:"If a feature is not supported then compositor server will fail on startup."}),"\n",(0,r.jsx)(n.p,{children:"Always required:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"TEXTURE_BINDING_ARRAY"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"PUSH_CONSTANTS"})}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Enabled by default:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"SAMPLED_TEXTURE_AND_STORAGE_BUFFER_ARRAY_NON_UNIFORM_INDEXING"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"UNIFORM_BUFFER_AND_STORAGE_TEXTURE_ARRAY_NON_UNIFORM_INDEXING"})}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["Those options are enabled by default, but can be disabled using ",(0,r.jsx)(n.a,{href:"/docs/deployment/configuration#live_compositor_required_wgpu_features",children:(0,r.jsx)(n.code,{children:"LIVE_COMPOSITOR_REQUIRED_WGPU_FEATURES"})})," environment variable."]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"All of the above features should be available on almost any GPU. If you are getting an error\nabout unsupported features, then most likely, the issue is caused by missing or too old drivers."})}),"\n",(0,r.jsx)(n.h2,{id:"hardware-requirements",children:"Hardware requirements"}),"\n",(0,r.jsx)(n.p,{children:"Supported platforms:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Linux - ",(0,r.jsx)(n.code,{children:"x86_64"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"It should work with any GPU from hardware perspective. Even though very unlikely, it is possible\nthat some GPUs might not have drivers that implement all the required features."}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"macOS - Apple Silicon"}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Other platforms are not regularly tested, but compositor should also work on:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Linux - ",(0,r.jsx)(n.code,{children:"aarch64"})," (Note that by default docker on Apple Silicon macOS is running ",(0,r.jsx)(n.code,{children:"aarch64"})," Linux)"]}),"\n",(0,r.jsxs)(n.li,{children:["macOS - ",(0,r.jsx)(n.code,{children:"x86_64"})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"software-requirements",children:"Software requirements"}),"\n",(0,r.jsx)(n.h3,{id:"dockerfile",children:"Dockerfile"}),"\n",(0,r.jsxs)(n.p,{children:["Dockerfile defines all software requirements. Configurations provided in ",(0,r.jsx)(n.a,{href:"https://github.com/software-mansion/live-compositor/tree/master/build_tools/docker",children:"the compositor repo"}),"\nare written to work with both GPU and CPU based rendering. To use them in your own project, just copy\nthe Dockerfile and replace ",(0,r.jsx)(n.code,{children:"COPY . /root/project"})," with an appropriate ",(0,r.jsx)("nobr",{children:(0,r.jsx)(n.code,{children:"RUN git clone ..."})})," command."]}),"\n",(0,r.jsxs)(n.p,{children:["If you want to use a different distro or different Ubuntu version then consult the ",(0,r.jsx)(n.a,{href:"#building-from-source",children:(0,r.jsx)(n.code,{children:"building from source"})})," section."]}),"\n",(0,r.jsx)(n.h3,{id:"binaries-from-github-releases",children:"Binaries from GitHub releases"}),"\n",(0,r.jsx)(n.p,{children:"For Linux:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"FFmpeg 6"}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"glibc"})," 2.35 or higher (version used by Ubuntu 22.04)"]}),"\n",(0,r.jsxs)(n.li,{children:["MESA (e.g. ",(0,r.jsx)(n.code,{children:"mesa-vulkan-drivers"})," package on Ubuntu)","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"23.2.1"})," or higher for CPU based rendering"]}),"\n",(0,r.jsxs)(n.li,{children:["For GPU based rendering the lowest version we tested was ",(0,r.jsx)(n.code,{children:"22.0.1"}),", but older version might also work."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"For macOS:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"FFmpeg 7 (this version will mostly follow a default version available in Homebrew)"}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsx)(n.p,{children:"Changing FFmpeg version on macOS might be troublesome, so we decided to produce binaries that will\nbe easiest to use for most users, even if this means updating FFmpeg version in a minor or patch release.\nChanges like that might be considered unsafe, but in case of LiveCompositor macOS platform will be used\nmostly for development, and it is highly unlikely to be used for a production deployment."})}),"\n",(0,r.jsx)(n.h3,{id:"building-from-source",children:"Building from source"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"FFmpeg 6 or higher. Build time version has to be the same as runtime version."}),"\n",(0,r.jsx)(n.li,{children:"Rust toolchain."}),"\n",(0,r.jsxs)(n.li,{children:["Following libraries (for build time you will need version with header files if your distro ships them separately):","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["FFmpeg dependencies: ",(0,r.jsx)(n.code,{children:"libavcodec"}),", ",(0,r.jsx)(n.code,{children:"libavformat"}),", ",(0,r.jsx)(n.code,{children:"libavfilter"}),", ",(0,r.jsx)(n.code,{children:"libavdevice"}),", ",(0,r.jsx)(n.code,{children:"libavutil"}),", ",(0,r.jsx)(n.code,{children:"libswscale"}),", ",(0,r.jsx)(n.code,{children:"libswresample"})]}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"libopus"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.code,{children:"libssl"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Linux specific (with a Vulkan backend):"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["MESA","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"23.2.1"})," or higher for CPU based rendering"]}),"\n",(0,r.jsxs)(n.li,{children:["For GPU based rendering the lowest version we tested was ",(0,r.jsx)(n.code,{children:"22.0.1"}),", but older version might also work."]}),"\n",(0,r.jsxs)(n.li,{children:["e.g. for Ubuntu","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["build time: ",(0,r.jsx)(n.code,{children:"apt-get install libegl1-mesa-dev libgl1-mesa-dri libxcb-xfixes0-dev"})]}),"\n",(0,r.jsxs)(n.li,{children:["runtime: ",(0,r.jsx)(n.code,{children:"apt-get install mesa-vulkan-drivers"})]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"nix",children:"Nix"}),"\n",(0,r.jsx)(n.p,{children:"LiveCompositor repository includes a nix flake, but because compositor is highly dependent on hardware and\navailable drivers this configuration might not be self-contained/portable as nix configuration are expected\nto be in general."}),"\n",(0,r.jsx)(n.p,{children:"This configuration is primary used for development, and it is not recommended unless you know what you are doing."})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>l,x:()=>t});var r=i(6540);const s={},o=r.createContext(s);function l(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/7a01de4d.cc84cd50.js b/assets/js/7a01de4d.bc5e4c29.js
similarity index 79%
rename from assets/js/7a01de4d.cc84cd50.js
rename to assets/js/7a01de4d.bc5e4c29.js
index 15ea0d4bc..191b7ccde 100644
--- a/assets/js/7a01de4d.cc84cd50.js
+++ b/assets/js/7a01de4d.bc5e4c29.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[3303],{1171:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>g,frontMatter:()=>a,metadata:()=>o,toc:()=>p});var r=t(5893),s=t(1151);const a={},i=void 0,o={id:"api/generated/renderer-Image",title:"renderer-Image",description:"Image",source:"@site/pages/api/generated/renderer-Image.md",sourceDirName:"api/generated",slug:"/api/generated/renderer-Image",permalink:"/docs/api/generated/renderer-Image",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{}},c={},p=[{value:"Image",id:"image",level:2}];function d(e){const n={code:"code",h2:"h2",pre:"pre",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"image",children:"Image"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'type Image = \n | {\n asset_type: "png";\n url?: string;\n path?: string;\n }\n | {\n asset_type: "jpeg";\n url?: string;\n path?: string;\n }\n | {\n asset_type: "svg";\n url?: string;\n path?: string;\n resolution?: {\n width: u32;\n height: u32;\n };\n }\n | {\n asset_type: "gif";\n url?: string;\n path?: string;\n }\n'})})]})}function g(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>i});var r=t(7294);const s={},a=r.createContext(s);function i(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[5319],{8899:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>g,frontMatter:()=>a,metadata:()=>o,toc:()=>p});var r=t(4848),s=t(8453);const a={},i=void 0,o={id:"api/generated/renderer-Image",title:"renderer-Image",description:"Image",source:"@site/pages/api/generated/renderer-Image.md",sourceDirName:"api/generated",slug:"/api/generated/renderer-Image",permalink:"/docs/api/generated/renderer-Image",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{}},c={},p=[{value:"Image",id:"image",level:2}];function d(e){const n={code:"code",h2:"h2",pre:"pre",...(0,s.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h2,{id:"image",children:"Image"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-typescript",children:'type Image = \n | {\n asset_type: "png";\n url?: string;\n path?: string;\n }\n | {\n asset_type: "jpeg";\n url?: string;\n path?: string;\n }\n | {\n asset_type: "svg";\n url?: string;\n path?: string;\n resolution?: {\n width: u32;\n height: u32;\n };\n }\n | {\n asset_type: "gif";\n url?: string;\n path?: string;\n }\n'})})]})}function g(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>i,x:()=>o});var r=t(6540);const s={},a=r.createContext(s);function i(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/7ef038ae.a20fec29.js b/assets/js/7ef038ae.a20fec29.js
deleted file mode 100644
index 2fbe79c94..000000000
--- a/assets/js/7ef038ae.a20fec29.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[3268,6279],{3270:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var i=t(5893),o=t(1151),r=t(3140);const s={sidebar_position:7,hide_table_of_contents:!0},a="Image",c={id:"api/components/Image",title:"Image",description:"A component for rendering images.",source:"@site/pages/api/components/Image.md",sourceDirName:"api/components",slug:"/api/components/Image",permalink:"/docs/api/components/Image",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,hide_table_of_contents:!0},sidebar:"sidebar",previous:{title:"Shader",permalink:"/docs/api/components/Shader"},next:{title:"WebView",permalink:"/docs/api/components/WebView"}},d={},p=[];function m(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",p:"p",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"image",children:"Image"}),"\n",(0,i.jsx)(n.p,{children:"A component for rendering images."}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["To use this component, you need to first register the image with matching ",(0,i.jsx)(n.code,{children:"image_id"})," using ",(0,i.jsx)(n.a,{href:"/docs/api/routes#register-image",children:(0,i.jsx)(n.code,{children:"register image"})})," request."]})}),"\n",(0,i.jsx)(r.default,{})]})}function l(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(m,{...e})}):m(e)}},3140:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=t(5893),o=t(1151);const r={},s=void 0,a={id:"api/generated/component-Image",title:"component-Image",description:"Image",source:"@site/pages/api/generated/component-Image.md",sourceDirName:"api/generated",slug:"/api/generated/component-Image",permalink:"/docs/api/generated/component-Image",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{}},c={},d=[{value:"Image",id:"image",level:2},{value:"Properties",id:"properties",level:4}];function p(e){const n={a:"a",code:"code",h2:"h2",h4:"h4",li:"li",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"image",children:"Image"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"type Image = {\n id?: string;\n image_id: string;\n}\n"})}),"\n",(0,i.jsx)(n.h4,{id:"properties",children:"Properties"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"id"})," - Id of a component."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"image_id"})," - Id of an image. It identifies an image registered using a ",(0,i.jsx)(n.a,{href:"/docs/api/routes#register-image",children:(0,i.jsx)(n.code,{children:"register image"})})," request."]}),"\n"]})]})}function m(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>s});var i=t(7294);const o={},r=i.createContext(o);function s(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/7ef038ae.e6962913.js b/assets/js/7ef038ae.e6962913.js
new file mode 100644
index 000000000..bc5e1a5b7
--- /dev/null
+++ b/assets/js/7ef038ae.e6962913.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[722,7305],{9816:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var i=t(4848),o=t(8453),r=t(9509);const s={sidebar_position:7,hide_table_of_contents:!0},a="Image",c={id:"api/components/Image",title:"Image",description:"A component for rendering images.",source:"@site/pages/api/components/Image.md",sourceDirName:"api/components",slug:"/api/components/Image",permalink:"/docs/api/components/Image",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:7,frontMatter:{sidebar_position:7,hide_table_of_contents:!0},sidebar:"sidebar",previous:{title:"Shader",permalink:"/docs/api/components/Shader"},next:{title:"WebView",permalink:"/docs/api/components/WebView"}},d={},p=[];function m(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",p:"p",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"image",children:"Image"}),"\n",(0,i.jsx)(n.p,{children:"A component for rendering images."}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["To use this component, you need to first register the image with matching ",(0,i.jsx)(n.code,{children:"image_id"})," using ",(0,i.jsx)(n.a,{href:"/docs/api/routes#register-image",children:(0,i.jsx)(n.code,{children:"register image"})})," request."]})}),"\n",(0,i.jsx)(r.default,{})]})}function l(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(m,{...e})}):m(e)}},9509:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var i=t(4848),o=t(8453);const r={},s=void 0,a={id:"api/generated/component-Image",title:"component-Image",description:"Image",source:"@site/pages/api/generated/component-Image.md",sourceDirName:"api/generated",slug:"/api/generated/component-Image",permalink:"/docs/api/generated/component-Image",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{}},c={},d=[{value:"Image",id:"image",level:2},{value:"Properties",id:"properties",level:4}];function p(e){const n={a:"a",code:"code",h2:"h2",h4:"h4",li:"li",pre:"pre",ul:"ul",...(0,o.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h2,{id:"image",children:"Image"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-typescript",children:"type Image = {\n id?: string;\n image_id: string;\n}\n"})}),"\n",(0,i.jsx)(n.h4,{id:"properties",children:"Properties"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"id"})," - Id of a component."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"image_id"})," - Id of an image. It identifies an image registered using a ",(0,i.jsx)(n.a,{href:"/docs/api/routes#register-image",children:(0,i.jsx)(n.code,{children:"register image"})})," request."]}),"\n"]})]})}function m(e={}){const{wrapper:n}={...(0,o.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},8453:(e,n,t)=>{t.d(n,{R:()=>s,x:()=>a});var i=t(6540);const o={},r=i.createContext(o);function s(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/804.f707c5b6.js b/assets/js/804.f707c5b6.js
deleted file mode 100644
index 13a3d199c..000000000
--- a/assets/js/804.f707c5b6.js
+++ /dev/null
@@ -1 +0,0 @@
-(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[804],{6010:(t,e,r)=>{"use strict";function n(t){var e,r,o="";if("string"==typeof t||"number"==typeof t)o+=t;else if("object"==typeof t)if(Array.isArray(t))for(e=0;e
o});const o=function(){for(var t,e,r=0,o="";r{"use strict";r.d(e,{Els:()=>o});var n=r(8357);function o(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M480 160H32c-17.673 0-32-14.327-32-32V64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm112 248H32c-17.673 0-32-14.327-32-32v-64c0-17.673 14.327-32 32-32h448c17.673 0 32 14.327 32 32v64c0 17.673-14.327 32-32 32zm-48-88c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24zm-64 0c-13.255 0-24 10.745-24 24s10.745 24 24 24 24-10.745 24-24-10.745-24-24-24z"}}]})(t)}},231:(t,e,r)=>{"use strict";r.d(e,{Mp$:()=>i,Qfr:()=>s,X2n:()=>o,gjK:()=>u,hJX:()=>a,tvD:()=>c});var n=r(8357);function o(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 640 512"},child:[{tag:"path",attr:{d:"M349.9 236.3h-66.1v-59.4h66.1v59.4zm0-204.3h-66.1v60.7h66.1V32zm78.2 144.8H362v59.4h66.1v-59.4zm-156.3-72.1h-66.1v60.1h66.1v-60.1zm78.1 0h-66.1v60.1h66.1v-60.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1l-13.3-8.9zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1v-59.4zm-78.1-72.1h-66.1v60.1h66.1v-60.1z"}}]})(t)}function a(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 496 512"},child:[{tag:"path",attr:{d:"M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"}}]})(t)}function i(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 448 512"},child:[{tag:"path",attr:{d:"M96 0C43 0 0 43 0 96V416c0 53 43 96 96 96H384h32c17.7 0 32-14.3 32-32s-14.3-32-32-32V384c17.7 0 32-14.3 32-32V32c0-17.7-14.3-32-32-32H384 96zm0 384H352v64H96c-17.7 0-32-14.3-32-32s14.3-32 32-32zm32-240c0-8.8 7.2-16 16-16H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16zm16 48H336c8.8 0 16 7.2 16 16s-7.2 16-16 16H144c-8.8 0-16-7.2-16-16s7.2-16 16-16z"}}]})(t)}function c(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 640 512"},child:[{tag:"path",attr:{d:"M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6zm80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3L562.7 256l-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3z"}}]})(t)}function s(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 640 512"},child:[{tag:"path",attr:{d:"M308.5 135.3c7.1-6.3 9.9-16.2 6.2-25c-2.3-5.3-4.8-10.5-7.6-15.5L304 89.4c-3-5-6.3-9.9-9.8-14.6c-5.7-7.6-15.7-10.1-24.7-7.1l-28.2 9.3c-10.7-8.8-23-16-36.2-20.9L199 27.1c-1.9-9.3-9.1-16.7-18.5-17.8C173.9 8.4 167.2 8 160.4 8h-.7c-6.8 0-13.5 .4-20.1 1.2c-9.4 1.1-16.6 8.6-18.5 17.8L115 56.1c-13.3 5-25.5 12.1-36.2 20.9L50.5 67.8c-9-3-19-.5-24.7 7.1c-3.5 4.7-6.8 9.6-9.9 14.6l-3 5.3c-2.8 5-5.3 10.2-7.6 15.6c-3.7 8.7-.9 18.6 6.2 25l22.2 19.8C32.6 161.9 32 168.9 32 176s.6 14.1 1.7 20.9L11.5 216.7c-7.1 6.3-9.9 16.2-6.2 25c2.3 5.3 4.8 10.5 7.6 15.6l3 5.2c3 5.1 6.3 9.9 9.9 14.6c5.7 7.6 15.7 10.1 24.7 7.1l28.2-9.3c10.7 8.8 23 16 36.2 20.9l6.1 29.1c1.9 9.3 9.1 16.7 18.5 17.8c6.7 .8 13.5 1.2 20.4 1.2s13.7-.4 20.4-1.2c9.4-1.1 16.6-8.6 18.5-17.8l6.1-29.1c13.3-5 25.5-12.1 36.2-20.9l28.2 9.3c9 3 19 .5 24.7-7.1c3.5-4.7 6.8-9.5 9.8-14.6l3.1-5.4c2.8-5 5.3-10.2 7.6-15.5c3.7-8.7 .9-18.6-6.2-25l-22.2-19.8c1.1-6.8 1.7-13.8 1.7-20.9s-.6-14.1-1.7-20.9l22.2-19.8zM112 176a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zM504.7 500.5c6.3 7.1 16.2 9.9 25 6.2c5.3-2.3 10.5-4.8 15.5-7.6l5.4-3.1c5-3 9.9-6.3 14.6-9.8c7.6-5.7 10.1-15.7 7.1-24.7l-9.3-28.2c8.8-10.7 16-23 20.9-36.2l29.1-6.1c9.3-1.9 16.7-9.1 17.8-18.5c.8-6.7 1.2-13.5 1.2-20.4s-.4-13.7-1.2-20.4c-1.1-9.4-8.6-16.6-17.8-18.5L583.9 307c-5-13.3-12.1-25.5-20.9-36.2l9.3-28.2c3-9 .5-19-7.1-24.7c-4.7-3.5-9.6-6.8-14.6-9.9l-5.3-3c-5-2.8-10.2-5.3-15.6-7.6c-8.7-3.7-18.6-.9-25 6.2l-19.8 22.2c-6.8-1.1-13.8-1.7-20.9-1.7s-14.1 .6-20.9 1.7l-19.8-22.2c-6.3-7.1-16.2-9.9-25-6.2c-5.3 2.3-10.5 4.8-15.6 7.6l-5.2 3c-5.1 3-9.9 6.3-14.6 9.9c-7.6 5.7-10.1 15.7-7.1 24.7l9.3 28.2c-8.8 10.7-16 23-20.9 36.2L315.1 313c-9.3 1.9-16.7 9.1-17.8 18.5c-.8 6.7-1.2 13.5-1.2 20.4s.4 13.7 1.2 20.4c1.1 9.4 8.6 16.6 17.8 18.5l29.1 6.1c5 13.3 12.1 25.5 20.9 36.2l-9.3 28.2c-3 9-.5 19 7.1 24.7c4.7 3.5 9.5 6.8 14.6 9.8l5.4 3.1c5 2.8 10.2 5.3 15.5 7.6c8.7 3.7 18.6 .9 25-6.2l19.8-22.2c6.8 1.1 13.8 1.7 20.9 1.7s14.1-.6 20.9-1.7l19.8 22.2zM464 304a48 48 0 1 1 0 96 48 48 0 1 1 0-96z"}}]})(t)}function u(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 640 512"},child:[{tag:"path",attr:{d:"M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z"}}]})(t)}},2585:(t,e,r)=>{"use strict";r.d(e,{MGj:()=>a,Vdl:()=>o,nNc:()=>i});var n=r(8357);function o(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M201 16c-15 0-20 3.38-20 20v15h-45c-29.547 0-35 5.453-35 35v375c0 29.547 5.453 35 35 35h240c29.547 0 35-5.453 35-35V86c0-29.547-5.453-35-35-35h-45V36c0-16.62-5-20-20-20H201zm-48.094 69.813c4.666.02 10.594.187 18.094.187h170c40 0 35-5 35 35v305c0 40 5 35-35 35H171c-40 0-35 5-35-35V121c0-32.5-3.31-35.283 16.906-35.188zM161 101c-5.54 0-10 4.46-10 10v55c0 5.54 4.46 10 10 10h190c5.54 0 10-4.46 10-10v-55c0-5.54-4.46-10-10-10H161zm0 90c-5.54 0-10 4.46-10 10v55c0 5.54 4.46 10 10 10h190c5.54 0 10-4.46 10-10v-55c0-5.54-4.46-10-10-10H161zm0 90c-5.54 0-10 4.46-10 10v55c0 5.54 4.46 10 10 10h190c5.54 0 10-4.46 10-10v-55c0-5.54-4.46-10-10-10H161zm0 90c-5.54 0-10 4.46-10 10v55c0 5.54 4.46 10 10 10h190c5.54 0 10-4.46 10-10v-55c0-5.54-4.46-10-10-10H161z"}}]})(t)}function a(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M470.7 20L368.2 49.81l41.5-28.09c-26.2 5.92-59.3 17.5-100.9 36.19l-67.9 70.79L265 79.25c-23.3 12.96-48 29.95-71.8 49.85l-15.8 64.3-3.4-47.6c-23.5 21.6-45.6 45.6-63.9 70.9-19.23 26.5-34.26 54.5-41.79 82.4l-28.12-18.8c2.52 23.7 10.31 44.3 23.09 63.2l-33.62-10.3c7.64 23.5 20.13 38.7 41.25 51-11.83 33.3-17.38 68.1-23.34 102.8l18.4 3.1C87.31 277.4 237.9 141.8 374 81.72l6.9 17.38c-121.7 54.5-216.3 146.5-265.8 279.1 18.1.1 35.8-2.1 52.2-6.3l4.9-60.9 13.1 55.5c10.9-4 20.9-8.8 29.8-14.4l-20.7-43.5 32.8 34.8c8-6.4 14.6-13.6 19.6-21.5 30.4-47.5 62.2-94.7 124.8-134.2l-45.7-16.2 70.1 2.1c11.4-5.8 23.4-12.9 32.5-19.6l-49.7-4 74.7-17.6c5.8-5.8 11.2-11.9 16.1-18 17.3-21.94 29-44.78 26.2-65.55-1.3-10.39-7.5-20.16-17.6-25.63-2.5-1.3-5.2-2.45-7.5-3.22z"}}]})(t)}function i(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M256 54.28c-124.603 0-226 101.398-226 226 0 47.864 14.975 92.293 40.465 128.876l29.79-19.86c-17.188-24.545-28.708-53.362-32.696-84.577H96v-18H66.115c-.07-2.14-.115-4.284-.115-6.44 0-45.378 15.816-86.97 42.236-119.598l17.4 17.4 12.727-12.727-18.133-18.132C152.735 114.057 197.335 92.8 247 90.498v29.22h18V90.5c49.665 2.302 94.265 23.56 126.77 56.725l-18.133 18.132 12.726 12.727 17.4-17.4c26.42 32.63 42.237 74.22 42.237 119.6 0 2.154-.044 4.3-.115 6.437H416v18h28.44c-3.987 31.214-15.507 60.03-32.694 84.575l29.79 19.86C467.025 372.574 482 328.146 482 280.282c0-124.602-101.397-226-226-226zm15.83 66.23a144 160 0 0 1 74.608 100.062l49.966-17.568a160 160 0 0 0-4.3-7.012l-5.135 5.153-30.368-30.29-5.76-5.746 7.85-7.874a160 160 0 0 0-86.862-36.726zm156.15 89.844l-175.332 60.6C240.505 272.618 231 283.155 231 295.72c0 13.7 11.3 25 25 25 6.77 0 12.95-2.764 17.473-7.208L427.98 210.354zm-16.513 32.322l-60.713 40.72a144 160 0 0 1-56.6 108.323h76.057a160 160 0 0 0 39.763-68.572H398.48v-52.515h17.022a160 160 0 0 0-4.035-27.957zM128 421.72v36h256v-36H128z"}}]})(t)}},155:(t,e,r)=>{"use strict";r.d(e,{iTB:()=>o});var n=r(8357);function o(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 512 512"},child:[{tag:"path",attr:{d:"M448 464a15.92 15.92 0 01-11.31-4.69l-384-384a16 16 0 0122.62-22.62l384 384A16 16 0 01448 464zM38.72 196.78C13.39 219.88 0 251.42 0 288c0 36 14.38 68.88 40.49 92.59C65.64 403.43 99.56 416 136 416h192.8a8 8 0 005.66-13.66L100.88 168.76a8 8 0 00-8-2C72 173.15 53.4 183.38 38.72 196.78zm437.87 194.45C499.76 372.78 512 345.39 512 312c0-57.57-42-90.58-87.56-100.75a16 16 0 01-12.12-12.39c-7.68-36.68-24.45-68.15-49.18-92A153.57 153.57 0 00256 64c-31.12 0-60.12 9-84.62 26.1a8 8 0 00-1.14 12.26L461.68 393.8a8 8 0 0010.2.93q2.43-1.68 4.71-3.5z"}}]})(t)}},8357:(t,e,r)=>{"use strict";r.d(e,{w_:()=>u,Pd:()=>a});var n=r(7294),o={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},a=n.createContext&&n.createContext(o),i=function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r{"use strict";r.d(e,{ibD:()=>o,yFm:()=>a});var n=r(8357);function o(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0z"}},{tag:"path",attr:{d:"M12 3v9.28a4.39 4.39 0 00-1.5-.28C8.01 12 6 14.01 6 16.5S8.01 21 10.5 21c2.31 0 4.2-1.75 4.45-4H15V6h4V3h-7z"}}]})(t)}function a(t){return(0,n.w_)({tag:"svg",attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{fill:"none",d:"M0 0h24v24H0V0z"}},{tag:"path",attr:{d:"M21 6h-7.59l3.29-3.29L16 2l-4 4-4-4-.71.71L10.59 6H3a2 2 0 00-2 2v12c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8a2 2 0 00-2-2zm0 14H3V8h18v12zM9 10v8l7-4z"}}]})(t)}},5459:function(t,e,r){var n;"undefined"!=typeof self&&self,n=t=>(()=>{var e={7403:(t,e,r)=>{"use strict";r.d(e,{default:()=>z});var n=r(4087),o=r.n(n);const a=function(t){return new RegExp(/<[a-z][\s\S]*>/i).test(t)},i=function(t,e){return Math.floor(Math.random()*(e-t+1))+t};var c="TYPE_CHARACTER",s="REMOVE_CHARACTER",u="REMOVE_ALL",l="REMOVE_LAST_VISIBLE_NODE",p="PAUSE_FOR",f="CALL_FUNCTION",v="ADD_HTML_TAG_ELEMENT",h="CHANGE_DELETE_SPEED",d="CHANGE_DELAY",y="CHANGE_CURSOR",m="PASTE_STRING",b="HTML_TAG";function g(t){return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},g(t)}function _(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function w(t){for(var e=1;et.length)&&(e=t.length);for(var r=0,n=new Array(e);r1&&void 0!==arguments[1]?arguments[1]:null;if(a(t))return g.typeOutHTMLString(t,e);if(t){var r=(g.options||{}).stringSplitter,n="function"==typeof r?r(t):t.split("");g.typeCharacters(n,e)}return g})),O(this,"pasteString",(function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return a(t)?g.typeOutHTMLString(t,e,!0):(t&&g.addEventToQueue(m,{character:t,node:e}),g)})),O(this,"typeOutHTMLString",(function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0,n=function(t){var e=document.createElement("div");return e.innerHTML=t,e.childNodes}(t);if(n.length>0)for(var o=0;o0&&void 0!==arguments[0]?arguments[0]:"natural";return g.addEventToQueue(u,{speed:t}),g})),O(this,"changeDeleteSpeed",(function(t){if(!t)throw new Error("Must provide new delete speed");return g.addEventToQueue(h,{speed:t}),g})),O(this,"changeDelay",(function(t){if(!t)throw new Error("Must provide new delay");return g.addEventToQueue(d,{delay:t}),g})),O(this,"changeCursor",(function(t){if(!t)throw new Error("Must provide new cursor");return g.addEventToQueue(y,{cursor:t}),g})),O(this,"deleteChars",(function(t){if(!t)throw new Error("Must provide amount of characters to delete");for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:null;if(!t||!Array.isArray(t))throw new Error("Characters must be an array");return t.forEach((function(t){g.addEventToQueue(c,{character:t,node:e})})),g})),O(this,"removeCharacters",(function(t){if(!t||!Array.isArray(t))throw new Error("Characters must be an array");return t.forEach((function(){g.addEventToQueue(s)})),g})),O(this,"addEventToQueue",(function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return g.addEventToStateProperty(t,e,r,"eventQueue")})),O(this,"addReverseCalledEvent",(function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return g.options.loop?g.addEventToStateProperty(t,e,r,"reverseCalledEvents"):g})),O(this,"addEventToStateProperty",(function(t,e){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0,o={eventName:t,eventArgs:e||{}};return g.state[n]=r?[o].concat(x(g.state[n])):[].concat(x(g.state[n]),[o]),g})),O(this,"runEventLoop",(function(){g.state.lastFrameTime||(g.state.lastFrameTime=Date.now());var t=Date.now(),e=t-g.state.lastFrameTime;if(!g.state.eventQueue.length){if(!g.options.loop)return;g.state.eventQueue=x(g.state.calledEvents),g.state.calledEvents=[],g.options=w({},g.state.initialOptions)}if(g.state.eventLoop=o()(g.runEventLoop),!g.state.eventLoopPaused){if(g.state.pauseUntil){if(t{var n=r(852)(r(5639),"DataView");t.exports=n},1989:(t,e,r)=>{var n=r(1789),o=r(401),a=r(7667),i=r(1327),c=r(1866);function s(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{var n=r(7040),o=r(4125),a=r(2117),i=r(7518),c=r(4705);function s(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{var n=r(852)(r(5639),"Map");t.exports=n},3369:(t,e,r)=>{var n=r(4785),o=r(1285),a=r(6e3),i=r(9916),c=r(5265);function s(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{var n=r(852)(r(5639),"Promise");t.exports=n},8525:(t,e,r)=>{var n=r(852)(r(5639),"Set");t.exports=n},8668:(t,e,r)=>{var n=r(3369),o=r(619),a=r(2385);function i(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new n;++e{var n=r(8407),o=r(7465),a=r(3779),i=r(7599),c=r(4758),s=r(4309);function u(t){var e=this.__data__=new n(t);this.size=e.size}u.prototype.clear=o,u.prototype.delete=a,u.prototype.get=i,u.prototype.has=c,u.prototype.set=s,t.exports=u},2705:(t,e,r)=>{var n=r(5639).Symbol;t.exports=n},1149:(t,e,r)=>{var n=r(5639).Uint8Array;t.exports=n},577:(t,e,r)=>{var n=r(852)(r(5639),"WeakMap");t.exports=n},4963:t=>{t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,a=[];++r{var n=r(2545),o=r(5694),a=r(1469),i=r(4144),c=r(5776),s=r(6719),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var r=a(t),l=!r&&o(t),p=!r&&!l&&i(t),f=!r&&!l&&!p&&s(t),v=r||l||p||f,h=v?n(t.length,String):[],d=h.length;for(var y in t)!e&&!u.call(t,y)||v&&("length"==y||p&&("offset"==y||"parent"==y)||f&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||c(y,d))||h.push(y);return h}},2488:t=>{t.exports=function(t,e){for(var r=-1,n=e.length,o=t.length;++r{t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length;++r{var n=r(7813);t.exports=function(t,e){for(var r=t.length;r--;)if(n(t[r][0],e))return r;return-1}},8866:(t,e,r)=>{var n=r(2488),o=r(1469);t.exports=function(t,e,r){var a=e(t);return o(t)?a:n(a,r(t))}},4239:(t,e,r)=>{var n=r(2705),o=r(9607),a=r(2333),i=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":i&&i in Object(t)?o(t):a(t)}},9454:(t,e,r)=>{var n=r(4239),o=r(7005);t.exports=function(t){return o(t)&&"[object Arguments]"==n(t)}},939:(t,e,r)=>{var n=r(2492),o=r(7005);t.exports=function t(e,r,a,i,c){return e===r||(null==e||null==r||!o(e)&&!o(r)?e!=e&&r!=r:n(e,r,a,i,t,c))}},2492:(t,e,r)=>{var n=r(6384),o=r(7114),a=r(8351),i=r(6096),c=r(4160),s=r(1469),u=r(4144),l=r(6719),p="[object Arguments]",f="[object Array]",v="[object Object]",h=Object.prototype.hasOwnProperty;t.exports=function(t,e,r,d,y,m){var b=s(t),g=s(e),_=b?f:c(t),w=g?f:c(e),x=(_=_==p?v:_)==v,j=(w=w==p?v:w)==v,O=_==w;if(O&&u(t)){if(!u(e))return!1;b=!0,x=!1}if(O&&!x)return m||(m=new n),b||l(t)?o(t,e,r,d,y,m):a(t,e,_,r,d,y,m);if(!(1&r)){var E=x&&h.call(t,"__wrapped__"),z=j&&h.call(e,"__wrapped__");if(E||z){var S=E?t.value():t,A=z?e.value():e;return m||(m=new n),y(S,A,r,d,m)}}return!!O&&(m||(m=new n),i(t,e,r,d,y,m))}},8458:(t,e,r)=>{var n=r(3560),o=r(5346),a=r(3218),i=r(346),c=/^\[object .+?Constructor\]$/,s=Function.prototype,u=Object.prototype,l=s.toString,p=u.hasOwnProperty,f=RegExp("^"+l.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!a(t)||o(t))&&(n(t)?f:c).test(i(t))}},8749:(t,e,r)=>{var n=r(4239),o=r(1780),a=r(7005),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,t.exports=function(t){return a(t)&&o(t.length)&&!!i[n(t)]}},280:(t,e,r)=>{var n=r(5726),o=r(6916),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!n(t))return o(t);var e=[];for(var r in Object(t))a.call(t,r)&&"constructor"!=r&&e.push(r);return e}},2545:t=>{t.exports=function(t,e){for(var r=-1,n=Array(t);++r{t.exports=function(t){return function(e){return t(e)}}},4757:t=>{t.exports=function(t,e){return t.has(e)}},4429:(t,e,r)=>{var n=r(5639)["__core-js_shared__"];t.exports=n},7114:(t,e,r)=>{var n=r(8668),o=r(2908),a=r(4757);t.exports=function(t,e,r,i,c,s){var u=1&r,l=t.length,p=e.length;if(l!=p&&!(u&&p>l))return!1;var f=s.get(t),v=s.get(e);if(f&&v)return f==e&&v==t;var h=-1,d=!0,y=2&r?new n:void 0;for(s.set(t,e),s.set(e,t);++h{var n=r(2705),o=r(1149),a=r(7813),i=r(7114),c=r(8776),s=r(1814),u=n?n.prototype:void 0,l=u?u.valueOf:void 0;t.exports=function(t,e,r,n,u,p,f){switch(r){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!p(new o(t),new o(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var v=c;case"[object Set]":var h=1&n;if(v||(v=s),t.size!=e.size&&!h)return!1;var d=f.get(t);if(d)return d==e;n|=2,f.set(t,e);var y=i(v(t),v(e),n,u,p,f);return f.delete(t),y;case"[object Symbol]":if(l)return l.call(t)==l.call(e)}return!1}},6096:(t,e,r)=>{var n=r(8234),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,r,a,i,c){var s=1&r,u=n(t),l=u.length;if(l!=n(e).length&&!s)return!1;for(var p=l;p--;){var f=u[p];if(!(s?f in e:o.call(e,f)))return!1}var v=c.get(t),h=c.get(e);if(v&&h)return v==e&&h==t;var d=!0;c.set(t,e),c.set(e,t);for(var y=s;++p{var n="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g;t.exports=n},8234:(t,e,r)=>{var n=r(8866),o=r(9551),a=r(3674);t.exports=function(t){return n(t,a,o)}},5050:(t,e,r)=>{var n=r(7019);t.exports=function(t,e){var r=t.__data__;return n(e)?r["string"==typeof e?"string":"hash"]:r.map}},852:(t,e,r)=>{var n=r(8458),o=r(7801);t.exports=function(t,e){var r=o(t,e);return n(r)?r:void 0}},9607:(t,e,r)=>{var n=r(2705),o=Object.prototype,a=o.hasOwnProperty,i=o.toString,c=n?n.toStringTag:void 0;t.exports=function(t){var e=a.call(t,c),r=t[c];try{t[c]=void 0;var n=!0}catch(t){}var o=i.call(t);return n&&(e?t[c]=r:delete t[c]),o}},9551:(t,e,r)=>{var n=r(4963),o=r(479),a=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,c=i?function(t){return null==t?[]:(t=Object(t),n(i(t),(function(e){return a.call(t,e)})))}:o;t.exports=c},4160:(t,e,r)=>{var n=r(8552),o=r(7071),a=r(3818),i=r(8525),c=r(577),s=r(4239),u=r(346),l="[object Map]",p="[object Promise]",f="[object Set]",v="[object WeakMap]",h="[object DataView]",d=u(n),y=u(o),m=u(a),b=u(i),g=u(c),_=s;(n&&_(new n(new ArrayBuffer(1)))!=h||o&&_(new o)!=l||a&&_(a.resolve())!=p||i&&_(new i)!=f||c&&_(new c)!=v)&&(_=function(t){var e=s(t),r="[object Object]"==e?t.constructor:void 0,n=r?u(r):"";if(n)switch(n){case d:return h;case y:return l;case m:return p;case b:return f;case g:return v}return e}),t.exports=_},7801:t=>{t.exports=function(t,e){return null==t?void 0:t[e]}},1789:(t,e,r)=>{var n=r(4536);t.exports=function(){this.__data__=n?n(null):{},this.size=0}},401:t=>{t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},7667:(t,e,r)=>{var n=r(4536),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(n){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return o.call(e,t)?e[t]:void 0}},1327:(t,e,r)=>{var n=r(4536),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return n?void 0!==e[t]:o.call(e,t)}},1866:(t,e,r)=>{var n=r(4536);t.exports=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=n&&void 0===e?"__lodash_hash_undefined__":e,this}},5776:t=>{var e=/^(?:0|[1-9]\d*)$/;t.exports=function(t,r){var n=typeof t;return!!(r=null==r?9007199254740991:r)&&("number"==n||"symbol"!=n&&e.test(t))&&t>-1&&t%1==0&&t{t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},5346:(t,e,r)=>{var n,o=r(4429),a=(n=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"";t.exports=function(t){return!!a&&a in t}},5726:t=>{var e=Object.prototype;t.exports=function(t){var r=t&&t.constructor;return t===("function"==typeof r&&r.prototype||e)}},7040:t=>{t.exports=function(){this.__data__=[],this.size=0}},4125:(t,e,r)=>{var n=r(8470),o=Array.prototype.splice;t.exports=function(t){var e=this.__data__,r=n(e,t);return!(r<0||(r==e.length-1?e.pop():o.call(e,r,1),--this.size,0))}},2117:(t,e,r)=>{var n=r(8470);t.exports=function(t){var e=this.__data__,r=n(e,t);return r<0?void 0:e[r][1]}},7518:(t,e,r)=>{var n=r(8470);t.exports=function(t){return n(this.__data__,t)>-1}},4705:(t,e,r)=>{var n=r(8470);t.exports=function(t,e){var r=this.__data__,o=n(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}},4785:(t,e,r)=>{var n=r(1989),o=r(8407),a=r(7071);t.exports=function(){this.size=0,this.__data__={hash:new n,map:new(a||o),string:new n}}},1285:(t,e,r)=>{var n=r(5050);t.exports=function(t){var e=n(this,t).delete(t);return this.size-=e?1:0,e}},6e3:(t,e,r)=>{var n=r(5050);t.exports=function(t){return n(this,t).get(t)}},9916:(t,e,r)=>{var n=r(5050);t.exports=function(t){return n(this,t).has(t)}},5265:(t,e,r)=>{var n=r(5050);t.exports=function(t,e){var r=n(this,t),o=r.size;return r.set(t,e),this.size+=r.size==o?0:1,this}},8776:t=>{t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach((function(t,n){r[++e]=[n,t]})),r}},4536:(t,e,r)=>{var n=r(852)(Object,"create");t.exports=n},6916:(t,e,r)=>{var n=r(5569)(Object.keys,Object);t.exports=n},1167:(t,e,r)=>{t=r.nmd(t);var n=r(1957),o=e&&!e.nodeType&&e,a=o&&t&&!t.nodeType&&t,i=a&&a.exports===o&&n.process,c=function(){try{return a&&a.require&&a.require("util").types||i&&i.binding&&i.binding("util")}catch(t){}}();t.exports=c},2333:t=>{var e=Object.prototype.toString;t.exports=function(t){return e.call(t)}},5569:t=>{t.exports=function(t,e){return function(r){return t(e(r))}}},5639:(t,e,r)=>{var n=r(1957),o="object"==typeof self&&self&&self.Object===Object&&self,a=n||o||Function("return this")();t.exports=a},619:t=>{t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},2385:t=>{t.exports=function(t){return this.__data__.has(t)}},1814:t=>{t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach((function(t){r[++e]=t})),r}},7465:(t,e,r)=>{var n=r(8407);t.exports=function(){this.__data__=new n,this.size=0}},3779:t=>{t.exports=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}},7599:t=>{t.exports=function(t){return this.__data__.get(t)}},4758:t=>{t.exports=function(t){return this.__data__.has(t)}},4309:(t,e,r)=>{var n=r(8407),o=r(7071),a=r(3369);t.exports=function(t,e){var r=this.__data__;if(r instanceof n){var i=r.__data__;if(!o||i.length<199)return i.push([t,e]),this.size=++r.size,this;r=this.__data__=new a(i)}return r.set(t,e),this.size=r.size,this}},346:t=>{var e=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return e.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},7813:t=>{t.exports=function(t,e){return t===e||t!=t&&e!=e}},5694:(t,e,r)=>{var n=r(9454),o=r(7005),a=Object.prototype,i=a.hasOwnProperty,c=a.propertyIsEnumerable,s=n(function(){return arguments}())?n:function(t){return o(t)&&i.call(t,"callee")&&!c.call(t,"callee")};t.exports=s},1469:t=>{var e=Array.isArray;t.exports=e},8612:(t,e,r)=>{var n=r(3560),o=r(1780);t.exports=function(t){return null!=t&&o(t.length)&&!n(t)}},4144:(t,e,r)=>{t=r.nmd(t);var n=r(5639),o=r(5062),a=e&&!e.nodeType&&e,i=a&&t&&!t.nodeType&&t,c=i&&i.exports===a?n.Buffer:void 0,s=(c?c.isBuffer:void 0)||o;t.exports=s},8446:(t,e,r)=>{var n=r(939);t.exports=function(t,e){return n(t,e)}},3560:(t,e,r)=>{var n=r(4239),o=r(3218);t.exports=function(t){if(!o(t))return!1;var e=n(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1780:t=>{t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},3218:t=>{t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},7005:t=>{t.exports=function(t){return null!=t&&"object"==typeof t}},6719:(t,e,r)=>{var n=r(8749),o=r(1717),a=r(1167),i=a&&a.isTypedArray,c=i?o(i):n;t.exports=c},3674:(t,e,r)=>{var n=r(4636),o=r(280),a=r(8612);t.exports=function(t){return a(t)?n(t):o(t)}},479:t=>{t.exports=function(){return[]}},5062:t=>{t.exports=function(){return!1}},75:function(t){(function(){var e,r,n,o,a,i;"undefined"!=typeof performance&&null!==performance&&performance.now?t.exports=function(){return performance.now()}:"undefined"!=typeof process&&null!==process&&process.hrtime?(t.exports=function(){return(e()-a)/1e6},r=process.hrtime,o=(e=function(){var t;return 1e9*(t=r())[0]+t[1]})(),i=1e9*process.uptime(),a=o-i):Date.now?(t.exports=function(){return Date.now()-n},n=Date.now()):(t.exports=function(){return(new Date).getTime()-n},n=(new Date).getTime())}).call(this)},4087:(t,e,r)=>{for(var n=r(75),o="undefined"==typeof window?r.g:window,a=["moz","webkit"],i="AnimationFrame",c=o["request"+i],s=o["cancel"+i]||o["cancelRequest"+i],u=0;!c&&u{"use strict";e.exports=t}},r={};function n(t){var o=r[t];if(void 0!==o)return o.exports;var a=r[t]={id:t,loaded:!1,exports:{}};return e[t].call(a.exports,a,a.exports,n),a.loaded=!0,a.exports}n.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return n.d(e,{a:e}),e},n.d=(t,e)=>{for(var r in e)n.o(e,r)&&!n.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),n.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),n.nmd=t=>(t.paths=[],t.children||(t.children=[]),t);var o={};return(()=>{"use strict";n.d(o,{default:()=>v});var t=n(8156),e=n.n(t),r=n(7403),a=n(8446),i=n.n(a);function c(t){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},c(t)}function s(t,e){return s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},s(t,e)}function u(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function p(t){var e=function(t,e){if("object"!==c(t)||null===t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,"string");if("object"!==c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"===c(e)?e:String(e)}var f=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&s(t,e)}(h,t);var n,o,a,f,v=(a=h,f=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}(),function(){var t,e=l(a);if(f){var r=l(this).constructor;t=Reflect.construct(e,arguments,r)}else t=e.apply(this,arguments);return function(t,e){if(e&&("object"===c(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return u(t)}(this,t)});function h(){var t,e,r,n;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,h);for(var o=arguments.length,a=new Array(o),i=0;i{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var t=o(5893),s=o(1151);const i={},r="Concepts",c={id:"concept/overview",title:"Concepts",description:"Inputs/outputs streams",source:"@site/pages/concept/overview.md",sourceDirName:"concept",slug:"/concept/overview",permalink:"/docs/concept/overview",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{},sidebar:"sidebar",previous:{title:"Transitions (View/Rescaler)",permalink:"/docs/guides/view-transition"},next:{title:"Component",permalink:"/docs/concept/component"}},a={},d=[{value:"Inputs/outputs streams",id:"inputsoutputs-streams",level:2},{value:"Video composition",id:"video-composition",level:2},{value:"Audio mixer",id:"audio-mixer",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"concepts",children:"Concepts"}),"\n",(0,t.jsx)(n.h2,{id:"inputsoutputs-streams",children:"Inputs/outputs streams"}),"\n",(0,t.jsxs)(n.p,{children:["LiveCompositor receives inputs and sends output streams via ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Real-time_Transport_Protocol",children:"RTP"}),".\nAdditionally, you can also use MP4 files directly as an input. To deliver/receive any other formats you can use tools like\nFFmpeg, GStreamer, or Membrane Framework to convert between RTP and the desired format."]}),"\n",(0,t.jsx)(n.h2,{id:"video-composition",children:"Video composition"}),"\n",(0,t.jsx)(n.p,{children:"For each output stream, you need to define a scene. A scene is a tree-like structure of components that defines what should be\nrendered. This component tree API should be easy to pick up for anyone familiar with Web development."}),"\n",(0,t.jsx)(n.p,{children:"You can construct a scene from, among other things, the following components:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/api/components/InputStream",children:(0,t.jsx)(n.code,{children:"InputStream"})})," - RTP stream or MP4 file."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/api/components/View",children:(0,t.jsx)(n.code,{children:"View"})})," - The most basic/core component, an analog of ",(0,t.jsx)(n.code,{children:""})," in HTML or ",(0,t.jsx)(n.code,{children:"
"})," in React Native."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/api/components/Rescaler",children:(0,t.jsx)(n.code,{children:"Rescaler"})})," - Resizes its child component."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/api/components/Image",children:(0,t.jsx)(n.code,{children:"Image"})})," - Supports PNG, JPEG, SVG, and GIF (including animated ones)."]}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/api/components/Text",children:(0,t.jsx)(n.code,{children:"Text"})})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/api/components/WebView",children:(0,t.jsx)(n.code,{children:"WebView"})})," - Renders a website using a browser."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Learn more about components and the scene ",(0,t.jsx)(n.a,{href:"/docs/concept/component",children:"here"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"audio-mixer",children:"Audio mixer"}),"\n",(0,t.jsx)(n.p,{children:"LiveCompositor supports audio streams and provides a simple mixer to combine them. Even if you only have one audio stream and do not need\nto modify it in any way, then it is still good to pass that stream to the compositor to avoid synchronization issues between audio and video."})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>c,a:()=>r});var t=o(7294);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[4841],{1209:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>c,toc:()=>d});var t=o(4848),s=o(8453);const i={},r="Concepts",c={id:"concept/overview",title:"Concepts",description:"Inputs/outputs streams",source:"@site/pages/concept/overview.md",sourceDirName:"concept",slug:"/concept/overview",permalink:"/docs/concept/overview",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{},sidebar:"sidebar",previous:{title:"Transitions (View/Rescaler)",permalink:"/docs/guides/view-transition"},next:{title:"Component",permalink:"/docs/concept/component"}},a={},d=[{value:"Inputs/outputs streams",id:"inputsoutputs-streams",level:2},{value:"Video composition",id:"video-composition",level:2},{value:"Audio mixer",id:"audio-mixer",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"concepts",children:"Concepts"}),"\n",(0,t.jsx)(n.h2,{id:"inputsoutputs-streams",children:"Inputs/outputs streams"}),"\n",(0,t.jsxs)(n.p,{children:["LiveCompositor receives inputs and sends output streams via ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Real-time_Transport_Protocol",children:"RTP"}),".\nAdditionally, you can also use MP4 files directly as an input. To deliver/receive any other formats you can use tools like\nFFmpeg, GStreamer, or Membrane Framework to convert between RTP and the desired format."]}),"\n",(0,t.jsx)(n.h2,{id:"video-composition",children:"Video composition"}),"\n",(0,t.jsx)(n.p,{children:"For each output stream, you need to define a scene. A scene is a tree-like structure of components that defines what should be\nrendered. This component tree API should be easy to pick up for anyone familiar with Web development."}),"\n",(0,t.jsx)(n.p,{children:"You can construct a scene from, among other things, the following components:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/api/components/InputStream",children:(0,t.jsx)(n.code,{children:"InputStream"})})," - RTP stream or MP4 file."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/api/components/View",children:(0,t.jsx)(n.code,{children:"View"})})," - The most basic/core component, an analog of ",(0,t.jsx)(n.code,{children:""})," in HTML or ",(0,t.jsx)(n.code,{children:"
"})," in React Native."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/api/components/Rescaler",children:(0,t.jsx)(n.code,{children:"Rescaler"})})," - Resizes its child component."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/api/components/Image",children:(0,t.jsx)(n.code,{children:"Image"})})," - Supports PNG, JPEG, SVG, and GIF (including animated ones)."]}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/docs/api/components/Text",children:(0,t.jsx)(n.code,{children:"Text"})})}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/api/components/WebView",children:(0,t.jsx)(n.code,{children:"WebView"})})," - Renders a website using a browser."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Learn more about components and the scene ",(0,t.jsx)(n.a,{href:"/docs/concept/component",children:"here"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"audio-mixer",children:"Audio mixer"}),"\n",(0,t.jsx)(n.p,{children:"LiveCompositor supports audio streams and provides a simple mixer to combine them. Even if you only have one audio stream and do not need\nto modify it in any way, then it is still good to pass that stream to the compositor to avoid synchronization issues between audio and video."})]})}function p(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},8453:(e,n,o)=>{o.d(n,{R:()=>r,x:()=>c});var t=o(6540);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/8465aa74.3ef6f86f.js b/assets/js/8465aa74.1b440bae.js
similarity index 82%
rename from assets/js/8465aa74.3ef6f86f.js
rename to assets/js/8465aa74.1b440bae.js
index 30cee0ba4..eb87587e7 100644
--- a/assets/js/8465aa74.3ef6f86f.js
+++ b/assets/js/8465aa74.1b440bae.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[3565],{6661:e=>{e.exports=JSON.parse('{"title":"Guides","slug":"/category/guides","permalink":"/docs/category/guides","navigation":{"previous":{"title":"Getting started","permalink":"/docs/intro"},"next":{"title":"Quick start","permalink":"/docs/guides/quick-start"}}}')}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[6519],{8978:e=>{e.exports=JSON.parse('{"title":"Guides","slug":"/category/guides","permalink":"/docs/category/guides","navigation":{"previous":{"title":"Getting started","permalink":"/docs/intro"},"next":{"title":"Quick start","permalink":"/docs/guides/quick-start"}}}')}}]);
\ No newline at end of file
diff --git a/assets/js/8894.d8676939.js b/assets/js/8913.9a972a77.js
similarity index 51%
rename from assets/js/8894.d8676939.js
rename to assets/js/8913.9a972a77.js
index fbf5afa69..60ade10f7 100644
--- a/assets/js/8894.d8676939.js
+++ b/assets/js/8913.9a972a77.js
@@ -1 +1 @@
-"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[8894],{8894:(e,s,o)=>{o.r(s)}}]);
\ No newline at end of file
+"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[8913],{8913:(e,s,o)=>{o.r(s)}}]);
\ No newline at end of file
diff --git a/assets/js/896f0ba9.25941a29.js b/assets/js/896f0ba9.25941a29.js
deleted file mode 100644
index fc0590b55..000000000
--- a/assets/js/896f0ba9.25941a29.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunkcompositor_live=self.webpackChunkcompositor_live||[]).push([[2676],{3393:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>d,metadata:()=>s,toc:()=>a});var t=r(5893),i=r(1151);const d={},o=void 0,s={id:"api/generated/renderer-WebRenderer",title:"renderer-WebRenderer",description:"WebRenderer",source:"@site/pages/api/generated/renderer-WebRenderer.md",sourceDirName:"api/generated",slug:"/api/generated/renderer-WebRenderer",permalink:"/docs/api/generated/renderer-WebRenderer",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{}},c={},a=[{value:"WebRenderer",id:"webrenderer",level:2},{value:"Properties",id:"properties",level:4}];function l(e){const n={admonition:"admonition",code:"code",h2:"h2",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h2,{id:"webrenderer",children:"WebRenderer"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-typescript",children:'type WebRenderer = {\n url: string;\n resolution: {\n width: u32;\n height: u32;\n };\n embedding_method?: \n | "chromium_embedding"\n | "native_embedding_over_content"\n | "native_embedding_under_content";\n}\n'})}),"\n",(0,t.jsx)(n.h4,{id:"properties",children:"Properties"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"url"})," - Url of a website that you want to render."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"resolution"})," - Resolution."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"embedding_method"})," - Mechanism used to render input frames on the website.","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:'"chromium_embedding"'})," - Pass raw input frames as JS buffers so they can be rendered, for example, using a ",(0,t.jsx)(n.code,{children:"