[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MDNGDSZCJ6VAT2KX11FXBE":3,"skill-same:01M6MDNGDSZCJ6VAT2KX11FXBE":65},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":24,"linkOnly":25,"markdownContent":26,"markdownBody":27,"frontMatter":28,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":35,"ownerHtmlUrl":36,"ownerBlogUrl":35,"ownerDescription":37,"updatedAt":38,"install":39,"resources":52},"01M6MDNGDSZCJ6VAT2KX11FXBE","remotion-interactivity",null,"Structure Remotion markup for interactivity","compozy\u002Fcompozy","compozy","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F205107042?v=4","01M6JWVTXX4DX38AWZ7SPFEKEV","CompozyOS","01M6JWVV2P34GM1PDATVB2EV05",2861,"MIT","https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy\u002Fblob\u002Fmain\u002Fpackages\u002Flaunch-video\u002F.agents\u002Fskills\u002Fremotion-interactivity\u002FSKILL.md",[],[19,20,21,22,23],"remotion interactivity","Remotion","remotion markup","structure","for","2026-11-10 10:12:30",false,"---\nname: remotion-interactivity\ndescription: Structure Remotion markup for interactivity\nversion: 4.0.516\n---\n\nBy writing Remotion markup in a specific way, the Remotion Studio is able to recognize the structure of the code and makes it interactive:\n\n- Allowing items to be selected by clicking on them\n- Allowing drag+drop, resizing and rotation\n- Editing the CSS styles\n- Making keyframes and easing values editable\n\nIf the markup is too complex for the Studio to make it interactive, then the values become grayed out.\n\n## Make an HTML element interactive using `Interactive`\n\nEvery HTML and SVG element (except `\u003CImg>`, it already is interactive) such as `\u003Cdiv>` can be turned interactive using `Interactive`:\n\n```tsx title=\"Interactive elements\"\n\u003CInteractive.Div\n  name=\"Greeting card\"\n  style={{fontSize: 80, padding: 24}}\n>\n  Hello\n\u003C\u002FInteractive.Div>\n```\n\nThis allows styles and keyframes to be set in the Studio. Be sensible, if a component has many elements, the timeline might get messy.\n\n## Prefer inline text\n\nIf text is fixed and only used once, write it directly inside the interactive element instead of extracting it into a constant.\n\n```tsx title=\"Inline text\"\n\u002F\u002F ? Fixed copy stays editable\n\u003CInteractive.Div name=\"Title\">\n  Remotion Best Practices\n\u003C\u002FInteractive.Div>\n```\n\nUse a prop or variable only when the text is dynamic or reused.\n\n## Give interactive elements a descriptive name\n\nAdd a `name` prop to elements to make them easily identifyable.\nAvoid computed names, hardcode them.\n\n```tsx title=\"Interactive names\"\n\u003C>\n  \u003CInteractive.Div name=\"Hero title\" style={{fontSize: 80}}>\n    Launch day\n  \u003C\u002FInteractive.Div>\n  \u003CImg name=\"Avatar\" src=\"https:\u002F\u002Fremotion.media\u002Fimage.jpeg\" \u002F>\n  \u003CVideo name=\"Background\" src=\"https:\u002F\u002Fremotion.media\u002Fvideo.mp4\" \u002F>\n  \u003CSequence name=\"Title\">\n    Launch day\n  \u003C\u002FSequence>\n\u003C\u002F>\n```\n\n## Keep all CSS styles inline\n\nThe best way is to just pass a plain object to `style` - no referring to constants, no object spreading, no math.\n\n```tsx title=\"Interactive example\"\n\u003CInteractive.Div\n  style={{\n    fontSize: 80,\n    color: 'red',\n  }}\n>\n  Hello World!\n\u003C\u002FInteractive.Div>\n```\n\n```tsx title=\"❌ Bad for interactivity\"\nconst baseStyle = useMemo(() => {\n  return {\n    fontSize: 12 \u002F\u002F ❌ Non-inline styles are not supported\n  }\n}, []);\n\n\u003CInteractive.Div\n  style={{\n    ...baseStyle, \u002F\u002F ❌ Spreading is not supported\n    color: RED, \u002F\u002F ❌ Referring to constants is not supported\n    scale: frame * 10 \u002F\u002F ❌ Math is not supported\n  }}\n>\n  Hello World!\n\u003C\u002FInteractive.Div>\n```\n\n## Animate using `interpolate()`\n\nWrite animations as inline `interpolate()` calls on the property that changes.\nThe output range, easing, extrapolation and `output` property should use hardcoded values.\n\nThe input range may additionally use `durationInFrames`, `fps`, `width` and `height` destructured directly from `useVideoConfig()`. Bare identifiers such as `durationInFrames`, multiplication with a number such as `2 * fps` or `fps * 2`, and subtraction of a number such as `durationInFrames - 1` are supported.\n\n```tsx title=\"Inline values\"\nconst {fps, durationInFrames} = useVideoConfig();\n\n\u002F\u002F ? Inline values can be standardized and keyframed\n\u003CInteractive.Div\n  name=\"Product card\"\n  style={{\n    color: 'white',\n    fontSize: 80,\n    scale: interpolate(frame, [0, fps], [0, 1], {\n      easing: Easing.spring({damping: 200}),\n      output: 'perceptual-scale',\n      extrapolateLeft: 'clamp',\n      extrapolateRight: 'clamp'\n    }),\n    rotate: interpolate(frame, [0, 1 * fps], ['0deg', '20deg'], {\n      easing: Easing.spring({damping: 200}),\n      extrapolateLeft: 'clamp',\n      extrapolateRight: 'clamp'\n    }),\n    translate: interpolate(\n      frame,\n      [durationInFrames - 30, durationInFrames],\n      ['0px 0px', '0px 120px'],\n      {\n        easing: Easing.spring({damping: 200}),\n        output: 'perceptual-scale',\n        extrapolateLeft: 'clamp',\n        extrapolateRight: 'clamp'\n      }\n    ),\n  }}\n\u002F>\n```\n\n```tsx title=\"❌ Bad interactivity\"\nconst translateY = interpolate(frame, [0, 30], [0, 120]); \u002F\u002F ❌ Math should be directly in the markup\n\n\u003CInteractive.Div\n  name=\"Product card\"\n  style={{\n    translate: translateY, \u002F\u002F ❌ Only inline interpolate() calls are supported,\n    rotate: interpolate(frame, [start, start + 10], [0, Math.PI]), \u002F\u002F ❌ Cannot use math with arbitrary variables, cannot use constants\n    scale: interpolate(anyVariable, [0, 30], [0, 1]) \u002F\u002F ❌ Can only interpret the `frame` variable.\n  }}\n\u002F>\n```\n\n## Use `scale`, `translate`, `rotate` CSS properties\n\nAvoid the `transform` CSS property.\nIf possible, use `scale`, `rotate` and `translate` instead because only they are interactively editable.\n\n## Keep composition metadata inline\n\nWhen scaffolding a composition, keep `width`, `height`, `fps`, `durationInFrames` and `defaultProps` inline and make no type assertions.\n\nThe Props editor can save visual edits back to your code when `defaultProps` is an inline object literal on `\u003CComposition>` or `\u003CStill>`.\n\n```tsx\n\u002F\u002F ? Static values are in \u003CComposition>, dynamic values are in calculateMetadata()\nconst calculateMetadata = useMemo(async () => {\n  const dimensions = await getDimensions(); \u002F\u002F just an example\n  return {width: dimensions.width, height: dimensions.height};\n});\n\n\u003CComposition\n  id=\"my-video\"\n  component={MyComponent}\n  durationInFrames={150}\n  fps={30}\n  calculateMetadata={calculateMetadata}\n  defaultProps={{title: 'Hello', color: '#0b84ff'}}\n\u002F>\n```\n\n```tsx title=\"Negative examples\"\nconst defaultProps = {title: 'Hello', color: '#0b84ff'}; \u002F\u002F ❌ Don't extract defaultProps, must be inline\nconst calculateMetadata = useMemo(() => {\n  \u002F\u002F ❌ Unnecessary because no calculation is being done,\n  return {durationInFrames: 150, fps: 30, width: 1920, height: 1080};\n});\n\n\u003CComposition\n  id=\"my-video\"\n  component={MyComponent}\n  calculateMetadata={calculateMetadata}\n  defaultProps={{\n    title: 'Hello',\n  } as Props} \u002F\u002F ❌ Don't have type assertions, instead type MyComponent correctly\n\u002F>\n```\n\nUse only `calculateMetadata()` for the part of the metadata that is dynamic.\n\n## Effects should be inline too\n\nThe effects array should not be computed.\nThe same rules for setting keyframes as `interpolate()` apply too here: All values should also be hardcoded: Input range, output range, easing, extrapolation, `output` property.\n\n```tsx title=\"Effects\"\n\u002F\u002F ? Parameters are inline and the array shape is stable\n\u003CCanvasImage\n  src={src}\n  width={1280}\n  height={720}\n  effects={[\n    radialProgressiveBlur({\n      center: [0.5, 0.5],\n      width: 1.2,\n      height: 0.8,\n      start: 0.2,\n      disabled: true,\n      rotation: interpolate(frame, [0, 120], [0, 180]),\n    }),\n  ]}\n\u002F>\n\nconst center = [0.5, 0.5] as const;\nconst rotation = frame * 1.5;\n\n\u003CCanvasImage\n  src={src}\n  width={1280}\n  height={720}\n  \u002F\u002F ❌ Conditional effect is not animateable\n  effects={enabled ? [\n    radialProgressiveBlur({\n      \u002F\u002F ❌ Not inline\n      center,\n      rotation,\n    }),\n  ] : []}\n\u002F>\n```\n\nRender separate elements if one version should have effects and another should not.\n\n## Making your own component interactive\n\nTo make a custom userland component interactive, use:\n[Make a component interactive](https:\u002F\u002Fwww.remotion.dev\u002Fdocs\u002Fstudio\u002Fmake-component-interactive.md)\n\n## Video editing\n\nIf a Remotion component mainly consists of video and audio clips, see [Video editing](..\u002Fremotion-markup\u002Fvideo-editing.md) for best practices on how to structure Remotion markup so the clips are interactively editable in the timeline.\n","By writing Remotion markup in a specific way, the Remotion Studio is able to recognize the structure of the code and makes it interactive:\n\n- Allowing items to be selected by clicking on them\n- Allowing drag+drop, resizing and rotation\n- Editing the CSS styles\n- Making keyframes and easing values editable\n\nIf the markup is too complex for the Studio to make it interactive, then the values become grayed out.\n\n## Make an HTML element interactive using `Interactive`\n\nEvery HTML and SVG element (except `\u003CImg>`, it already is interactive) such as `\u003Cdiv>` can be turned interactive using `Interactive`:\n\n```tsx title=\"Interactive elements\"\n\u003CInteractive.Div\n  name=\"Greeting card\"\n  style={{fontSize: 80, padding: 24}}\n>\n  Hello\n\u003C\u002FInteractive.Div>\n```\n\nThis allows styles and keyframes to be set in the Studio. Be sensible, if a component has many elements, the timeline might get messy.\n\n## Prefer inline text\n\nIf text is fixed and only used once, write it directly inside the interactive element instead of extracting it into a constant.\n\n```tsx title=\"Inline text\"\n\u002F\u002F ? Fixed copy stays editable\n\u003CInteractive.Div name=\"Title\">\n  Remotion Best Practices\n\u003C\u002FInteractive.Div>\n```\n\nUse a prop or variable only when the text is dynamic or reused.\n\n## Give interactive elements a descriptive name\n\nAdd a `name` prop to elements to make them easily identifyable.\nAvoid computed names, hardcode them.\n\n```tsx title=\"Interactive names\"\n\u003C>\n  \u003CInteractive.Div name=\"Hero title\" style={{fontSize: 80}}>\n    Launch day\n  \u003C\u002FInteractive.Div>\n  \u003CImg name=\"Avatar\" src=\"https:\u002F\u002Fremotion.media\u002Fimage.jpeg\" \u002F>\n  \u003CVideo name=\"Background\" src=\"https:\u002F\u002Fremotion.media\u002Fvideo.mp4\" \u002F>\n  \u003CSequence name=\"Title\">\n    Launch day\n  \u003C\u002FSequence>\n\u003C\u002F>\n```\n\n## Keep all CSS styles inline\n\nThe best way is to just pass a plain object to `style` - no referring to constants, no object spreading, no math.\n\n```tsx title=\"Interactive example\"\n\u003CInteractive.Div\n  style={{\n    fontSize: 80,\n    color: 'red',\n  }}\n>\n  Hello World!\n\u003C\u002FInteractive.Div>\n```\n\n```tsx title=\"❌ Bad for interactivity\"\nconst baseStyle = useMemo(() => {\n  return {\n    fontSize: 12 \u002F\u002F ❌ Non-inline styles are not supported\n  }\n}, []);\n\n\u003CInteractive.Div\n  style={{\n    ...baseStyle, \u002F\u002F ❌ Spreading is not supported\n    color: RED, \u002F\u002F ❌ Referring to constants is not supported\n    scale: frame * 10 \u002F\u002F ❌ Math is not supported\n  }}\n>\n  Hello World!\n\u003C\u002FInteractive.Div>\n```\n\n## Animate using `interpolate()`\n\nWrite animations as inline `interpolate()` calls on the property that changes.\nThe output range, easing, extrapolation and `output` property should use hardcoded values.\n\nThe input range may additionally use `durationInFrames`, `fps`, `width` and `height` destructured directly from `useVideoConfig()`. Bare identifiers such as `durationInFrames`, multiplication with a number such as `2 * fps` or `fps * 2`, and subtraction of a number such as `durationInFrames - 1` are supported.\n\n```tsx title=\"Inline values\"\nconst {fps, durationInFrames} = useVideoConfig();\n\n\u002F\u002F ? Inline values can be standardized and keyframed\n\u003CInteractive.Div\n  name=\"Product card\"\n  style={{\n    color: 'white',\n    fontSize: 80,\n    scale: interpolate(frame, [0, fps], [0, 1], {\n      easing: Easing.spring({damping: 200}),\n      output: 'perceptual-scale',\n      extrapolateLeft: 'clamp',\n      extrapolateRight: 'clamp'\n    }),\n    rotate: interpolate(frame, [0, 1 * fps], ['0deg', '20deg'], {\n      easing: Easing.spring({damping: 200}),\n      extrapolateLeft: 'clamp',\n      extrapolateRight: 'clamp'\n    }),\n    translate: interpolate(\n      frame,\n      [durationInFrames - 30, durationInFrames],\n      ['0px 0px', '0px 120px'],\n      {\n        easing: Easing.spring({damping: 200}),\n        output: 'perceptual-scale',\n        extrapolateLeft: 'clamp',\n        extrapolateRight: 'clamp'\n      }\n    ),\n  }}\n\u002F>\n```\n\n```tsx title=\"❌ Bad interactivity\"\nconst translateY = interpolate(frame, [0, 30], [0, 120]); \u002F\u002F ❌ Math should be directly in the markup\n\n\u003CInteractive.Div\n  name=\"Product card\"\n  style={{\n    translate: translateY, \u002F\u002F ❌ Only inline interpolate() calls are supported,\n    rotate: interpolate(frame, [start, start + 10], [0, Math.PI]), \u002F\u002F ❌ Cannot use math with arbitrary variables, cannot use constants\n    scale: interpolate(anyVariable, [0, 30], [0, 1]) \u002F\u002F ❌ Can only interpret the `frame` variable.\n  }}\n\u002F>\n```\n\n## Use `scale`, `translate`, `rotate` CSS properties\n\nAvoid the `transform` CSS property.\nIf possible, use `scale`, `rotate` and `translate` instead because only they are interactively editable.\n\n## Keep composition metadata inline\n\nWhen scaffolding a composition, keep `width`, `height`, `fps`, `durationInFrames` and `defaultProps` inline and make no type assertions.\n\nThe Props editor can save visual edits back to your code when `defaultProps` is an inline object literal on `\u003CComposition>` or `\u003CStill>`.\n\n```tsx\n\u002F\u002F ? Static values are in \u003CComposition>, dynamic values are in calculateMetadata()\nconst calculateMetadata = useMemo(async () => {\n  const dimensions = await getDimensions(); \u002F\u002F just an example\n  return {width: dimensions.width, height: dimensions.height};\n});\n\n\u003CComposition\n  id=\"my-video\"\n  component={MyComponent}\n  durationInFrames={150}\n  fps={30}\n  calculateMetadata={calculateMetadata}\n  defaultProps={{title: 'Hello', color: '#0b84ff'}}\n\u002F>\n```\n\n```tsx title=\"Negative examples\"\nconst defaultProps = {title: 'Hello', color: '#0b84ff'}; \u002F\u002F ❌ Don't extract defaultProps, must be inline\nconst calculateMetadata = useMemo(() => {\n  \u002F\u002F ❌ Unnecessary because no calculation is being done,\n  return {durationInFrames: 150, fps: 30, width: 1920, height: 1080};\n});\n\n\u003CComposition\n  id=\"my-video\"\n  component={MyComponent}\n  calculateMetadata={calculateMetadata}\n  defaultProps={{\n    title: 'Hello',\n  } as Props} \u002F\u002F ❌ Don't have type assertions, instead type MyComponent correctly\n\u002F>\n```\n\nUse only `calculateMetadata()` for the part of the metadata that is dynamic.\n\n## Effects should be inline too\n\nThe effects array should not be computed.\nThe same rules for setting keyframes as `interpolate()` apply too here: All values should also be hardcoded: Input range, output range, easing, extrapolation, `output` property.\n\n```tsx title=\"Effects\"\n\u002F\u002F ? Parameters are inline and the array shape is stable\n\u003CCanvasImage\n  src={src}\n  width={1280}\n  height={720}\n  effects={[\n    radialProgressiveBlur({\n      center: [0.5, 0.5],\n      width: 1.2,\n      height: 0.8,\n      start: 0.2,\n      disabled: true,\n      rotation: interpolate(frame, [0, 120], [0, 180]),\n    }),\n  ]}\n\u002F>\n\nconst center = [0.5, 0.5] as const;\nconst rotation = frame * 1.5;\n\n\u003CCanvasImage\n  src={src}\n  width={1280}\n  height={720}\n  \u002F\u002F ❌ Conditional effect is not animateable\n  effects={enabled ? [\n    radialProgressiveBlur({\n      \u002F\u002F ❌ Not inline\n      center,\n      rotation,\n    }),\n  ] : []}\n\u002F>\n```\n\nRender separate elements if one version should have effects and another should not.\n\n## Making your own component interactive\n\nTo make a custom userland component interactive, use:\n[Make a component interactive](https:\u002F\u002Fwww.remotion.dev\u002Fdocs\u002Fstudio\u002Fmake-component-interactive.md)\n\n## Video editing\n\nIf a Remotion component mainly consists of video and audio clips, see [Video editing](..\u002Fremotion-markup\u002Fvideo-editing.md) for best practices on how to structure Remotion markup so the clips are interactively editable in the timeline.\n",{"name":5,"version":29,"description":7},"4.0.516","main","65613632bb94072e27fc5015d17387e28a870111","packages\u002Flaunch-video\u002F.agents\u002Fskills\u002Fremotion-interactivity",188,"https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy","https:\u002F\u002Fcompozy.com","https:\u002F\u002Fgithub.com\u002Fcompozy","An OS for AI agents","2026-11-11 10:13:11",{"source":8,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add compozy\u002Fcompozy --skill remotion-interactivity",{"tool":45,"command":46},"bunx","bunx skills add compozy\u002Fcompozy --skill remotion-interactivity",{"tool":48,"command":49},"pnpm","pnpm dlx skills add compozy\u002Fcompozy --skill remotion-interactivity","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy\u002Fblob\u002Fmain\u002Fpackages\u002Flaunch-video\u002F.agents\u002Fskills\u002Fremotion-interactivity\u002FSKILL.md",true,[53,59],{"path":54,"resourceType":55,"resourceTypeDesc":56,"sizeBytes":57,"sourceHtmlUrl":58},"agents\u002Fopenai.yaml","REFERENCE","参考文档",320,"https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy\u002Fblob\u002Fmain\u002Fpackages\u002Flaunch-video\u002F.agents\u002Fskills\u002Fremotion-interactivity\u002Fagents\u002Fopenai.yaml",{"path":60,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":63,"sourceHtmlUrl":64},"assets\u002Fremotion-icon.png","ASSET","资产文件",1286,"https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy\u002Fblob\u002Fmain\u002Fpackages\u002Flaunch-video\u002F.agents\u002Fskills\u002Fremotion-interactivity\u002Fassets\u002Fremotion-icon.png",[66,101,126,149,159,171],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":70,"licenseFileUrl":71,"sourceHtmlUrl":72,"categories":73,"keywords":79,"publishedAt":24},"01M6MD7W312X49RNEJRKKVKTTD","security-review","Security code review for vulnerabilities. Use when asked to \"security review\", \"find vulnerabilities\", \"check for security issues\", \"audit security\", \"OWASP review\", or review code for injection, XSS, authentication, authorization, cryptography issues. Provides systematic review with confidence-based reporting.","CC-BY-SA-4.0","https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsecurity-review\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsecurity-review\u002FSKILL.md",[74],{"categoryNo":75,"categoryName":76,"taxonomyType":77,"taxonomyTypeDesc":78},"01JBSEEDCAT000000000000007","代码审查","SCENARIO","使用场景",[80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,23,97,98,99,100],"security","security review","review","injection","authentication","code review","issues","Bash","code","xss","audit","systematic","read","reporting","cryptography","owasp","systematic review","use","task","when","audit security",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":112,"publishedAt":24},"01M6MD5K93G1GP8VA56V2FEPZV","lesson-learned","Extract evidence-backed engineering lessons from recent changes or incidents. Use for requested reflection, lesson updates, or retiring an obsolete workflow rule.","https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Flesson-learned\u002FSKILL.md",[107],{"categoryNo":108,"categoryName":109,"taxonomyType":110,"taxonomyTypeDesc":111},"01JBSEEDCAT000000000000039","教师与教育","PROFESSION","适用职业",[113,114,115,23,116,117,118,119,120,121,122,123,97,124,125],"learned","lesson learned","lesson","changes","evidence","incidents","workflow","engineering","updates","extract","rule","lessons","reflection",{"skillNo":127,"name":9,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":24},"01M6MDPNH3J60VRCGTPHVTHZR8","Operate CompozyOS. Use when working with CompozyOS sessions, agents, native tools, skills, tasks, Loops, Goals, Terminal, desktops and windows, automation, extensions, or configuration. Don't use for unrelated projects.","https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy\u002Fblob\u002Fmain\u002Fskills\u002Fcompozy\u002FSKILL.md",[],[9,132,133,134,135,23,136,137,97,138,139,140,141,142,143,144,145,146,147,148,99],"sessions","windows","projects","operate","runtime","true","automation","tasks","extensions","with","loops","unrelated","goals","native","terminal","configuration","Tools",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":24},"01M6MDPHKNPQHJ1TF21E1HSFNF","remotion-upgrade","Upgrade Remotion, and related packages","https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy\u002Fblob\u002Fmain\u002Fpackages\u002Flaunch-video\u002F.agents\u002Fskills\u002Fremotion-upgrade\u002FSKILL.md",[],[156,157,20,158],"remotion upgrade","upgrade","packages",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":24},"01M6MDPFT91ZWC7Z09MRNZPAJG","remotion-studio","Preview a Remotion video","https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy\u002Fblob\u002Fmain\u002Fpackages\u002Flaunch-video\u002F.agents\u002Fskills\u002Fremotion-studio\u002FSKILL.md",[],[166,167,20,168,169,170],"studio","remotion studio","Video","preview","remotion video",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":177,"publishedAt":24},"01M6MDPD5XDZPYB5NAZGKMPXWC","remotion-saas","Build an app with Remotion","https:\u002F\u002Fgithub.com\u002Fcompozy\u002Fcompozy\u002Fblob\u002Fmain\u002Fpackages\u002Flaunch-video\u002F.agents\u002Fskills\u002Fremotion-saas\u002FSKILL.md",[],[178,179,20,141,180,181],"saas","remotion saas","app","build"]