[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FJGGP84KFZWBCRED3QNW0E":3,"skill-same:01M6FJGGP84KFZWBCRED3QNW0E":53},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":28,"frontMatter":29,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":35,"ownerHtmlUrl":36,"ownerBlogUrl":6,"ownerDescription":37,"updatedAt":38,"install":39,"resources":52},"01M6FJGGP84KFZWBCRED3QNW0E","visionos-immersive-media-developer",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Ftomkrikorian\u002FvisionOSAgents\u002Fvisionos-immersive-media-developer\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[23,24,25],"developer","Media","visionos immersive media developer","2026-11-10 10:12:30",false,"# visionOS Immersive Media Developer\n\n## Description and Goals\n\nThis skill provides a practical playbook for building **immersive and spatial media** experiences on **Apple Vision Pro**. Start with AVKit when the system player experience fits your app. Use RealityKit’s `VideoPlayerComponent` when you need custom placement, custom environments, or deeper scene integration for video playback that can move between **window\u002Fportal** playback and **immersive** playback.\n\nIt also outlines how Apple’s **ImmersiveMediaSupport** framework fits into authoring and packaging **Apple Immersive Video** content.\n\n### Goals\n\n- Help you choose the right playback surface (2D window, portal, progressive immersive, full immersive).\n- Implement RealityKit video playback using `VideoPlayerComponent` correctly.\n- Handle immersive viewing mode transitions safely (including scene transitions when needed).\n- Respond to video playback events and comfort mitigation events on visionOS 26+.\n- Provide a foundation for Apple Immersive Video authoring workflows where relevant.\n\n## What This Skill Should Do\n\nWhen asked to add immersive\u002Fspatial video to a visionOS app, this skill should:\n\n1. **Clarify the media experience**\n   - Is this a “video on a surface” experience, a portal, or full immersive playback?\n   - Is the content mono, stereo, spatial video, or immersive media?\n   - Do you need passthrough tinting, captions\u002Fsubtitles, or multi-user playback sync?\n2. **Pick a playback architecture**\n   - Prefer AVKit when the system playback interface matches the product requirements.\n   - Use RealityKit `VideoPlayerComponent` when the experience needs custom placement, custom environments, or scene-aware playback behavior.\n   - Escalate to CompositorServices only for custom engines or bespoke full-space rendering.\n3. **Implement playback + UI**\n   - Create a video entity, attach `VideoPlayerComponent`, and manage UI affordances.\n   - Handle immersive-viewing mode transitions (portal ↔ immersive space).\n4. **Handle events and comfort**\n   - Subscribe to `VideoPlayerEvents` for viewing mode changes, transitions, and comfort mitigation.\n5. **Validate comfort and accessibility**\n   - Provide clear exit paths, reduce motion where appropriate, and support captions.\n\nLoad the appropriate reference file from the tables below for detailed usage, code examples, and best practices.\n\n## Information About the Skill\n\n### Core Concepts\n\n#### Choose AVKit first, then RealityKit when needed\n\nAVKit provides the preferred system playback experience on visionOS. Use RealityKit’s `VideoPlayerComponent` when you need the video to participate directly in a custom 3D scene, custom environment, or bespoke interaction model.\n\n#### Immersive viewing modes\n\nFor immersive media types, visionOS supports multiple immersive viewing modes:\n\n- **Portal**: immersive media rendered as a portal window matching the containing entity transform.\n- **Progressive**: partial-to-full coverage controlled via the Digital Crown (not used for Spatial Video).\n- **Full**: immersive media fills the field of view.\n\nYou should treat switching between these modes as a **scene orchestration** problem as well as a component configuration problem.\n\n#### Comfort mitigation (visionOS 26+)\n\nvisionOS can detect video comfort violations and trigger mitigation. Your app should subscribe to the event and respond:\n\n- pause playback\n- reduce immersion\n- continue (play) depending on what the system reports and what UX you want\n\n#### Authoring \u002F packaging Apple Immersive Video\n\nThe **ImmersiveMediaSupport** framework provides tools and a workflow for authoring and packaging Apple Immersive Video content (typically as part of a content pipeline, not day-to-day app UI).\n\n### Reference Tables\n\n| Reference | When to Use |\n|---|---|\n| [`REFERENCE.md`](references\u002FREFERENCE.md) | Decision tree: window vs portal vs progressive vs full immersive playback. |\n| [`videoplayercomponent-basics.md`](references\u002Fvideoplayercomponent-basics.md) | When you need to set up `VideoPlayerComponent` + `AVPlayer` correctly. |\n| [`immersive-viewing-modes.md`](references\u002Fimmersive-viewing-modes.md) | When implementing portal\u002Fprogressive\u002Ffull modes and related scene transitions. |\n| [`events-and-transitions.md`](references\u002Fevents-and-transitions.md) | When responding to `VideoPlayerEvents` and managing UI during transitions. |\n| [`comfort-mitigation.md`](references\u002Fcomfort-mitigation.md) | When handling comfort violations and mitigation strategies on visionOS 26+. |\n| [`apple-immersive-video-authoring.md`](references\u002Fapple-immersive-video-authoring.md) | When you need Apple Immersive Video authoring\u002Fpackaging references. |\n\n### Implementation Patterns\n\n#### Basic VideoPlayerComponent setup\n\n```swift\nimport AVFoundation\nimport RealityKit\n\nlet videoEntity = Entity()\nlet player = AVPlayer(url: url)\n\nvar video = VideoPlayerComponent(avPlayer: player)\nvideo.isPassthroughTintingEnabled = true\n\nvideoEntity.components.set(video)\nplayer.play()\n```\n\n#### Subscribe to immersive viewing mode transitions\n\n```swift\nimport RealityKit\n\nvar subscription: EventSubscription?\n\nsubscription = content.subscribe(to: VideoPlayerEvents.ImmersiveViewingModeWillTransition.self) { event in\n    \u002F\u002F Disable non-essential UI while transitioning.\n}\n```\n\n#### Subscribe to comfort mitigation (visionOS 26+)\n\n```swift\nsubscription = content.subscribe(to: VideoPlayerEvents.VideoComfortMitigationDidOccur.self) { event in\n    switch event.comfortMitigation {\n    case .pause:\n        \u002F\u002F Update UI to indicate playback paused.\n        break\n    case .reduceImmersion:\n        \u002F\u002F Offer a UI path back to portal \u002F lower immersion.\n        break\n    case .play:\n        break\n    }\n}\n```\n\n### Pitfalls and Checks\n\n- Don’t treat immersive mode switching as “just a property change”; you may need to transition between window scenes and immersive spaces deliberately.\n- Make sure you have an obvious “exit” affordance from immersive playback.\n- Always test Spatial Video vs immersive media behavior (they differ; progressive isn’t used for Spatial Video).\n- Subscribe to transitions\u002Fevents early; many UX issues appear only during mode changes.\n- For visionOS 26+, handle comfort mitigation events and align your UI with the system’s mitigation choice.\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Ftomkrikorian\u002FvisionOSAgents\u002Fvisionos-immersive-media-developer",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill visionos-immersive-media-developer",{"tool":45,"command":46},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill visionos-immersive-media-developer",{"tool":48,"command":49},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill visionos-immersive-media-developer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Ftomkrikorian\u002FvisionOSAgents\u002Fvisionos-immersive-media-developer\u002FSKILL.md",true,[],[54,68,78,87,93,100],{"skillNo":55,"name":56,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":64,"publishedAt":26},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[59],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[65,66,67],"model","model hierarchy","model hierarchy skill",{"skillNo":69,"name":70,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":74,"publishedAt":26},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[73],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},[75,76,77],"MCP","zoom","zoom mcp",{"skillNo":79,"name":80,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":26},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[84,85,86,76],"sdk","zoom apps sdk","apps",{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":26},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[89],{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":99,"publishedAt":26},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[98],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},[95],{"skillNo":101,"name":102,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":26},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[102]]