···11-[["Map",1,2,9,10],"meta::meta",["Map",3,4,5,6,7,8],"astro-version","5.10.1","content-config-digest","436d74edbfb2fef7","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"never\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false},\"legacy\":{\"collections\":false}}","manifests",["Map",11,12,28,29,65,66,148,149,180,181,214,215,241,242,268,269,276,277,284,285,292,293,305,306,318,319,331,332,355,356,379,380,387,388,403,404],"configurator/output/_manifest",{"id":11,"data":13,"filePath":26,"digest":27},{"name":14,"title":15,"entrypoint":16,"actions":17},"diffuse/configurator/output","Diffuse Configurator | Output","index.html",{"tracks":18},{"title":19,"description":20,"params_schema":21},"Tracks","Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.",{"type":22,"description":23,"items":24},"array","List of tracks",{"type":25},"object","src/pages/configurator/output/_manifest.json","4659e937f3f7ce97","configurator/input/_manifest",{"id":28,"data":30,"filePath":63,"digest":64},{"name":31,"title":32,"entrypoint":16,"actions":33},"diffuse/configurator/input","Diffuse Configurator | Input",{"consult":34,"contextualize":39,"list":45,"resolve":51},{"title":35,"params_schema":36},"Consult",{"type":37,"description":38},"string","The uri to check the availability of.",{"title":40,"description":41,"params_schema":42},"Contextualize","Provide context to all inputs.",{"type":22,"description":43,"items":44},"Array of tracks",{"type":25},{"title":46,"description":47,"params_schema":48},"List","List tracks from all inputs.",{"type":22,"description":49,"items":50},"A list of (cached) tracks",{"type":25},{"title":52,"description":53,"params_schema":54},"Resolve","Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`.",{"type":25,"properties":55,"required":60},{"method":56,"uri":58},{"type":37,"description":57},"The HTTP method that is going to be used on the resolved URI.",{"type":37,"description":59},"The URI to resolve.",[61,62],"method","uri","src/pages/configurator/input/_manifest.json","deab08f592f33c5d","engine/audio/_manifest",{"id":65,"data":67,"filePath":146,"digest":147},{"name":68,"title":69,"entrypoint":16,"actions":70},"diffuse/engine/audio","Diffuse Audio",{"pause":71,"play":79,"render":89,"reload":117,"seek":127,"volume":136},{"title":72,"description":73,"params_schema":74},"Pause","Pause audio",{"type":25,"properties":75,"required":77},{"audioId":76},{"type":37},[78],"audioId",{"title":80,"description":81,"params_schema":82},"Play","Play audio",{"type":25,"properties":83,"required":88},{"audioId":84,"volume":85},{"type":37},{"type":86,"default":87},"number",0.5,[78],{"title":90,"description":91,"params_schema":92},"Render","Determine the active set of audio elements.",{"type":25,"properties":93,"required":115},{"audio":94,"play":107},{"type":22,"description":95,"items":96},"The audio items we want to render. These represent the audio elements that are in the DOM.",{"type":25,"properties":97,"required":104},{"id":98,"isPreload":99,"mimeType":101,"progress":102,"url":103},{"type":37},{"type":100},"boolean",{"type":37},{"type":86},{"type":37},[105,106],"id","url",{"type":25,"description":108,"properties":109,"required":114},"Pass in this object to immediately start playing one of the rendered audio items.",{"audioId":110,"volume":112},{"type":37,"description":111},"The id of the rendered audio item we want to play.",{"type":86,"default":87,"description":113},"A number equal to, or between, 0 and 1, that determines how loud the audio should play.",[78],[116],"audio",{"title":118,"description":119,"params_schema":120},"Reload","Make sure the audio with the given id is loading properly. This should be used when for example, the internet connection comes back and the loading of the audio depended on said internet connection.",{"type":25,"properties":121,"required":125},{"audioId":122,"play":123,"progress":124},{"type":37},{"type":100},{"type":86},[78,126],"percentage",{"title":128,"description":129,"params_schema":130},"Seek","Seek audio to a given position",{"type":25,"properties":131,"required":135},{"audioId":132,"percentage":133},{"type":37},{"type":86,"description":134},"A number between 0 and 1 that determines the new current position in the audio",[78,126],{"title":137,"description":138,"params_schema":139},"Volume","Set the volume of all audio and the default value, or a specific audio node.",{"type":25,"properties":140,"required":144},{"audioId":141,"volume":142},{"type":37},{"type":86,"description":143},"A number between 0 and 1 that determines the new volume of all audio elements",[145],"volume","src/pages/engine/audio/_manifest.json","fad9de8481968df7","engine/queue/_manifest",{"id":148,"data":150,"filePath":178,"digest":179},{"name":151,"title":152,"entrypoint":16,"actions":153},"diffuse/engine/queue","Diffuse Queue",{"add":154,"pool":163,"shift":172,"unshift":175},{"title":155,"description":156,"params_schema":157},"Add","Add tracks to the queue.",{"type":22,"description":43,"items":158},{"type":25,"properties":159,"required":162},{"id":160,"uri":161},{"type":37},{"type":37},[105,62],{"title":164,"description":165,"params_schema":166},"Pool","Set the queue pool.",{"type":22,"description":43,"items":167},{"type":25,"properties":168,"required":171},{"id":169,"uri":170},{"type":37},{"type":37},[105,62],{"title":173,"description":174},"Shift","Shift the queue, picking the first item from the up next array and putting the currently playing item into the history list.",{"title":176,"description":177},"Unshift","Unshift the queue, going backwards in time, picking the last item from the history array and putting the currently playing item into the up next list.","src/pages/engine/queue/_manifest.json","bdd435b3e8277673","input/native-fs/_manifest",{"id":180,"data":182,"filePath":212,"digest":213},{"name":183,"title":184,"entrypoint":16,"input_properties":185,"actions":187},"diffuse/input/native-fs","Diffuse Input | Native File System",{"scheme":186},"file+local",{"consult":188,"list":192,"resolve":197,"mount":204,"unmount":207},{"title":35,"description":189,"params_schema":190},"Check if a handle is available to be used by passing in a file uri that uses that handle as the host.",{"type":37,"description":191},"The uri with the handle to check the availability of.",{"title":46,"description":193,"params_schema":194},"List tracks.",{"type":22,"description":195,"items":196},"A list of (cached) tracks with an uri matching the scheme",{"type":25},{"title":52,"description":198,"params_schema":199},"Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.",{"type":25,"properties":200,"required":203},{"method":201,"uri":202},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},"Mount","Prepare for usage.",{"title":208,"description":209,"params_schema":210},"Unmount","Callback after usage.",{"type":37,"description":211},"The handle id to unmount","src/pages/input/native-fs/_manifest.json","bbfb366cb25470ac","input/s3/_manifest",{"id":214,"data":216,"filePath":239,"digest":240},{"name":217,"title":218,"entrypoint":16,"input_properties":219,"actions":221},"diffuse/input/s3","Diffuse Input | S3",{"scheme":220},"s3",{"consult":222,"contextualize":224,"list":227,"resolve":230,"mount":236,"unmount":237},{"title":35,"params_schema":223},{"type":37,"description":38},{"title":40,"params_schema":225},{"type":22,"description":43,"items":226},{"type":25},{"title":46,"description":193,"params_schema":228},{"type":22,"description":195,"items":229},{"type":25},{"title":52,"description":198,"params_schema":231},{"type":25,"properties":232,"required":235},{"method":233,"uri":234},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":238},{"type":37,"description":211},"src/pages/input/s3/_manifest.json","458b0c64643bf8a8","input/opensubsonic/_manifest",{"id":241,"data":243,"filePath":266,"digest":267},{"name":244,"title":245,"entrypoint":16,"input_properties":246,"actions":248},"diffuse/input/opensubsonic","Diffuse Input | OpenSubsonic API",{"scheme":247},"opensubsonic",{"consult":249,"contextualize":251,"list":254,"resolve":257,"mount":263,"unmount":264},{"title":35,"params_schema":250},{"type":37,"description":38},{"title":40,"params_schema":252},{"type":22,"description":43,"items":253},{"type":25},{"title":46,"description":193,"params_schema":255},{"type":22,"description":195,"items":256},{"type":25},{"title":52,"description":198,"params_schema":258},{"type":25,"properties":259,"required":262},{"method":260,"uri":261},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":265},{"type":37,"description":211},"src/pages/input/opensubsonic/_manifest.json","463ff2f82f27fed9","orchestrator/process-tracks/_manifest",{"id":268,"data":270,"filePath":274,"digest":275},{"name":271,"title":272,"entrypoint":16,"actions":273},"diffuse/orchestrator/process-tracks","Diffuse Orchestrator | Process Tracks",{},"src/pages/orchestrator/process-tracks/_manifest.json","4d30ef9c892a16b8","orchestrator/queue-audio/_manifest",{"id":276,"data":278,"filePath":282,"digest":283},{"name":279,"title":280,"entrypoint":16,"actions":281},"diffuse/orchestrator/queue-audio","Diffuse Orchestrator | Queue Audio",{},"src/pages/orchestrator/queue-audio/_manifest.json","5c66731fcc2fae2d","orchestrator/queue-tracks/_manifest",{"id":284,"data":286,"filePath":290,"digest":291},{"name":287,"title":288,"entrypoint":16,"actions":289},"diffuse/orchestrator/queue-tracks","Diffuse Orchestrator | Queue Tracks",{},"src/pages/orchestrator/queue-tracks/_manifest.json","56a0c769ecdc8cbb","output/indexed-db/_manifest",{"id":292,"data":294,"filePath":303,"digest":304},{"name":295,"title":296,"entrypoint":16,"actions":297},"diffuse/output/indexed-db","Diffuse Output | IndexedDB",{"tracks":298,"mount":301,"unmount":302},{"title":19,"description":20,"params_schema":299},{"type":22,"description":23,"items":300},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/indexed-db/_manifest.json","c75e5169818995c0","output/native-fs/_manifest",{"id":305,"data":307,"filePath":316,"digest":317},{"name":308,"title":309,"entrypoint":16,"actions":310},"diffuse/output/native-fs","Diffuse Output | Native File System",{"tracks":311,"mount":314,"unmount":315},{"title":19,"description":20,"params_schema":312},{"type":22,"description":23,"items":313},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/native-fs/_manifest.json","9f36293a08c3d233","output/storacha-automerge/_manifest",{"id":318,"data":320,"filePath":329,"digest":330},{"name":321,"title":322,"entrypoint":16,"actions":323},"diffuse/output/storacha-automerge","Diffuse Output | Storacha Storage + Automerge CRDT",{"tracks":324,"mount":327,"unmount":328},{"title":19,"description":20,"params_schema":325},{"type":22,"description":23,"items":326},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/storacha-automerge/_manifest.json","607193e5156e1220","processor/metadata/_manifest",{"id":331,"data":333,"filePath":353,"digest":354},{"name":334,"title":335,"entrypoint":16,"actions":336},"diffuse/processor/metadata","Diffuse Processor | Metadata fetcher",{"supply":337},{"title":338,"description":339,"params_schema":340},"Supply","Get the metadata for a given URL or stream.",{"type":25,"properties":341},{"includeArtwork":342,"mimeType":344,"stream":345,"urls":346},{"type":100,"description":343},"Include artwork in the output.",{"type":37},{"type":25},{"type":25,"properties":347,"required":350},{"get":348,"head":349},{"type":37},{"type":37},[351,352],"get","head","src/pages/processor/metadata/_manifest.json","0f144e608574be9b","processor/artwork/_manifest",{"id":355,"data":357,"filePath":377,"digest":378},{"name":358,"title":359,"description":360,"entrypoint":16,"actions":361},"diffuse/processor/artwork","Diffuse Processor | Artwork fetcher","Tries to get artwork for a given URL or stream.",{"supply":362},{"title":338,"description":363,"params_schema":364},"Get the artwork for a given URL.",{"type":22,"items":365},{"type":25,"properties":366,"required":375},{"cacheId":367,"mimeType":368,"stream":369,"urls":370},{"type":37},{"type":37},{"type":25},{"type":25,"properties":371,"required":374},{"get":372,"head":373},{"type":37},{"type":37},[351,352],[376],"cacheId","src/pages/processor/artwork/_manifest.json","9401bdfa33e2f0db","processor/search/_manifest",{"id":379,"data":381,"filePath":385,"digest":386},{"name":382,"title":383,"entrypoint":16,"actions":384},"diffuse/processor/search","Diffuse Processor | Search",{},"src/pages/processor/search/_manifest.json","ec562d1125821f8a","theme/pilot/audio/_manifest",{"id":387,"data":389,"filePath":401,"digest":402},{"name":390,"title":391,"entrypoint":16,"actions":392},"diffuse/constituent/pilot/audio","",{"modifyIsPlaying":393,"modifyProgress":397},{"title":394,"description":395,"params_schema":396},"Set is-playing state","Indicate if audio is playing or not.",{"type":100},{"title":398,"description":399,"params_schema":400},"Set progress","Indicate how far the audio has progressed.",{"type":86},"src/pages/theme/pilot/audio/_manifest.json","7c3a0b25e8d14fd2","constituent/blur/artwork-controller/_manifest",{"id":403,"data":405,"filePath":413,"digest":414},{"name":406,"title":407,"entrypoint":16,"actions":408},"diffuse/constituent/blur/artwork-controller","Diffuse Blur Theme | Artwork Controller",{"modifyIsPlaying":409,"modifyProgress":411},{"title":394,"description":395,"params_schema":410},{"type":100},{"title":398,"description":399,"params_schema":412},{"type":86},"src/pages/constituent/blur/artwork-controller/_manifest.json","1b705295c5fa221a"]11+[["Map",1,2,9,10],"meta::meta",["Map",3,4,5,6,7,8],"astro-version","5.10.1","content-config-digest","436d74edbfb2fef7","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"never\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false},\"legacy\":{\"collections\":false}}","manifests",["Map",11,12,28,29,65,66,148,149,180,181,214,215,241,242,268,269,276,277,284,285,292,293,305,306,318,319,331,332,355,356,379,380,387,388,403,404,411,412,419,420],"configurator/output/_manifest",{"id":11,"data":13,"filePath":26,"digest":27},{"name":14,"title":15,"entrypoint":16,"actions":17},"diffuse/configurator/output","Diffuse Configurator | Output","index.html",{"tracks":18},{"title":19,"description":20,"params_schema":21},"Tracks","Store or retrieve tracks. Passing in an array of tracks, stores them; passing no parameter, retrieves them.",{"type":22,"description":23,"items":24},"array","List of tracks",{"type":25},"object","src/pages/configurator/output/_manifest.json","4659e937f3f7ce97","configurator/input/_manifest",{"id":28,"data":30,"filePath":63,"digest":64},{"name":31,"title":32,"entrypoint":16,"actions":33},"diffuse/configurator/input","Diffuse Configurator | Input",{"consult":34,"contextualize":39,"list":45,"resolve":51},{"title":35,"params_schema":36},"Consult",{"type":37,"description":38},"string","The uri to check the availability of.",{"title":40,"description":41,"params_schema":42},"Contextualize","Provide context to all inputs.",{"type":22,"description":43,"items":44},"Array of tracks",{"type":25},{"title":46,"description":47,"params_schema":48},"List","List tracks from all inputs.",{"type":22,"description":49,"items":50},"A list of (cached) tracks",{"type":25},{"title":52,"description":53,"params_schema":54},"Resolve","Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`.",{"type":25,"properties":55,"required":60},{"method":56,"uri":58},{"type":37,"description":57},"The HTTP method that is going to be used on the resolved URI.",{"type":37,"description":59},"The URI to resolve.",[61,62],"method","uri","src/pages/configurator/input/_manifest.json","deab08f592f33c5d","engine/audio/_manifest",{"id":65,"data":67,"filePath":146,"digest":147},{"name":68,"title":69,"entrypoint":16,"actions":70},"diffuse/engine/audio","Diffuse Audio",{"pause":71,"play":79,"render":89,"reload":117,"seek":127,"volume":136},{"title":72,"description":73,"params_schema":74},"Pause","Pause audio",{"type":25,"properties":75,"required":77},{"audioId":76},{"type":37},[78],"audioId",{"title":80,"description":81,"params_schema":82},"Play","Play audio",{"type":25,"properties":83,"required":88},{"audioId":84,"volume":85},{"type":37},{"type":86,"default":87},"number",0.5,[78],{"title":90,"description":91,"params_schema":92},"Render","Determine the active set of audio elements.",{"type":25,"properties":93,"required":115},{"audio":94,"play":107},{"type":22,"description":95,"items":96},"The audio items we want to render. These represent the audio elements that are in the DOM.",{"type":25,"properties":97,"required":104},{"id":98,"isPreload":99,"mimeType":101,"progress":102,"url":103},{"type":37},{"type":100},"boolean",{"type":37},{"type":86},{"type":37},[105,106],"id","url",{"type":25,"description":108,"properties":109,"required":114},"Pass in this object to immediately start playing one of the rendered audio items.",{"audioId":110,"volume":112},{"type":37,"description":111},"The id of the rendered audio item we want to play.",{"type":86,"default":87,"description":113},"A number equal to, or between, 0 and 1, that determines how loud the audio should play.",[78],[116],"audio",{"title":118,"description":119,"params_schema":120},"Reload","Make sure the audio with the given id is loading properly. This should be used when for example, the internet connection comes back and the loading of the audio depended on said internet connection.",{"type":25,"properties":121,"required":125},{"audioId":122,"play":123,"progress":124},{"type":37},{"type":100},{"type":86},[78,126],"percentage",{"title":128,"description":129,"params_schema":130},"Seek","Seek audio to a given position",{"type":25,"properties":131,"required":135},{"audioId":132,"percentage":133},{"type":37},{"type":86,"description":134},"A number between 0 and 1 that determines the new current position in the audio",[78,126],{"title":137,"description":138,"params_schema":139},"Volume","Set the volume of all audio and the default value, or a specific audio node.",{"type":25,"properties":140,"required":144},{"audioId":141,"volume":142},{"type":37},{"type":86,"description":143},"A number between 0 and 1 that determines the new volume of all audio elements",[145],"volume","src/pages/engine/audio/_manifest.json","fad9de8481968df7","engine/queue/_manifest",{"id":148,"data":150,"filePath":178,"digest":179},{"name":151,"title":152,"entrypoint":16,"actions":153},"diffuse/engine/queue","Diffuse Queue",{"add":154,"pool":163,"shift":172,"unshift":175},{"title":155,"description":156,"params_schema":157},"Add","Add tracks to the queue.",{"type":22,"description":43,"items":158},{"type":25,"properties":159,"required":162},{"id":160,"uri":161},{"type":37},{"type":37},[105,62],{"title":164,"description":165,"params_schema":166},"Pool","Set the queue pool.",{"type":22,"description":43,"items":167},{"type":25,"properties":168,"required":171},{"id":169,"uri":170},{"type":37},{"type":37},[105,62],{"title":173,"description":174},"Shift","Shift the queue, picking the first item from the up next array and putting the currently playing item into the history list.",{"title":176,"description":177},"Unshift","Unshift the queue, going backwards in time, picking the last item from the history array and putting the currently playing item into the up next list.","src/pages/engine/queue/_manifest.json","bdd435b3e8277673","input/native-fs/_manifest",{"id":180,"data":182,"filePath":212,"digest":213},{"name":183,"title":184,"entrypoint":16,"input_properties":185,"actions":187},"diffuse/input/native-fs","Diffuse Input | Native File System",{"scheme":186},"file+local",{"consult":188,"list":192,"resolve":197,"mount":204,"unmount":207},{"title":35,"description":189,"params_schema":190},"Check if a handle is available to be used by passing in a file uri that uses that handle as the host.",{"type":37,"description":191},"The uri with the handle to check the availability of.",{"title":46,"description":193,"params_schema":194},"List tracks.",{"type":22,"description":195,"items":196},"A list of (cached) tracks with an uri matching the scheme",{"type":25},{"title":52,"description":198,"params_schema":199},"Potentially translates a track uri with a matching scheme into a URL pointing at the audio bytes or an audio stream. If it can be resolved that is, otherwise you'll get `undefined`. Use the `consult` action to get a more detailed answer.",{"type":25,"properties":200,"required":203},{"method":201,"uri":202},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},"Mount","Prepare for usage.",{"title":208,"description":209,"params_schema":210},"Unmount","Callback after usage.",{"type":37,"description":211},"The handle id to unmount","src/pages/input/native-fs/_manifest.json","bbfb366cb25470ac","input/s3/_manifest",{"id":214,"data":216,"filePath":239,"digest":240},{"name":217,"title":218,"entrypoint":16,"input_properties":219,"actions":221},"diffuse/input/s3","Diffuse Input | S3",{"scheme":220},"s3",{"consult":222,"contextualize":224,"list":227,"resolve":230,"mount":236,"unmount":237},{"title":35,"params_schema":223},{"type":37,"description":38},{"title":40,"params_schema":225},{"type":22,"description":43,"items":226},{"type":25},{"title":46,"description":193,"params_schema":228},{"type":22,"description":195,"items":229},{"type":25},{"title":52,"description":198,"params_schema":231},{"type":25,"properties":232,"required":235},{"method":233,"uri":234},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":238},{"type":37,"description":211},"src/pages/input/s3/_manifest.json","458b0c64643bf8a8","input/opensubsonic/_manifest",{"id":241,"data":243,"filePath":266,"digest":267},{"name":244,"title":245,"entrypoint":16,"input_properties":246,"actions":248},"diffuse/input/opensubsonic","Diffuse Input | OpenSubsonic API",{"scheme":247},"opensubsonic",{"consult":249,"contextualize":251,"list":254,"resolve":257,"mount":263,"unmount":264},{"title":35,"params_schema":250},{"type":37,"description":38},{"title":40,"params_schema":252},{"type":22,"description":43,"items":253},{"type":25},{"title":46,"description":193,"params_schema":255},{"type":22,"description":195,"items":256},{"type":25},{"title":52,"description":198,"params_schema":258},{"type":25,"properties":259,"required":262},{"method":260,"uri":261},{"type":37,"description":57},{"type":37,"description":59},[61,62],{"title":205,"description":206},{"title":208,"description":209,"params_schema":265},{"type":37,"description":211},"src/pages/input/opensubsonic/_manifest.json","463ff2f82f27fed9","orchestrator/process-tracks/_manifest",{"id":268,"data":270,"filePath":274,"digest":275},{"name":271,"title":272,"entrypoint":16,"actions":273},"diffuse/orchestrator/process-tracks","Diffuse Orchestrator | Process Tracks",{},"src/pages/orchestrator/process-tracks/_manifest.json","4d30ef9c892a16b8","orchestrator/queue-audio/_manifest",{"id":276,"data":278,"filePath":282,"digest":283},{"name":279,"title":280,"entrypoint":16,"actions":281},"diffuse/orchestrator/queue-audio","Diffuse Orchestrator | Queue Audio",{},"src/pages/orchestrator/queue-audio/_manifest.json","5c66731fcc2fae2d","orchestrator/queue-tracks/_manifest",{"id":284,"data":286,"filePath":290,"digest":291},{"name":287,"title":288,"entrypoint":16,"actions":289},"diffuse/orchestrator/queue-tracks","Diffuse Orchestrator | Queue Tracks",{},"src/pages/orchestrator/queue-tracks/_manifest.json","56a0c769ecdc8cbb","output/indexed-db/_manifest",{"id":292,"data":294,"filePath":303,"digest":304},{"name":295,"title":296,"entrypoint":16,"actions":297},"diffuse/output/indexed-db","Diffuse Output | IndexedDB",{"tracks":298,"mount":301,"unmount":302},{"title":19,"description":20,"params_schema":299},{"type":22,"description":23,"items":300},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/indexed-db/_manifest.json","c75e5169818995c0","output/native-fs/_manifest",{"id":305,"data":307,"filePath":316,"digest":317},{"name":308,"title":309,"entrypoint":16,"actions":310},"diffuse/output/native-fs","Diffuse Output | Native File System",{"tracks":311,"mount":314,"unmount":315},{"title":19,"description":20,"params_schema":312},{"type":22,"description":23,"items":313},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/native-fs/_manifest.json","9f36293a08c3d233","output/storacha-automerge/_manifest",{"id":318,"data":320,"filePath":329,"digest":330},{"name":321,"title":322,"entrypoint":16,"actions":323},"diffuse/output/storacha-automerge","Diffuse Output | Storacha Storage + Automerge CRDT",{"tracks":324,"mount":327,"unmount":328},{"title":19,"description":20,"params_schema":325},{"type":22,"description":23,"items":326},{"type":25},{"title":205,"description":206},{"title":208,"description":209},"src/pages/output/storacha-automerge/_manifest.json","607193e5156e1220","processor/metadata/_manifest",{"id":331,"data":333,"filePath":353,"digest":354},{"name":334,"title":335,"entrypoint":16,"actions":336},"diffuse/processor/metadata","Diffuse Processor | Metadata fetcher",{"supply":337},{"title":338,"description":339,"params_schema":340},"Supply","Get the metadata for a given URL or stream.",{"type":25,"properties":341},{"includeArtwork":342,"mimeType":344,"stream":345,"urls":346},{"type":100,"description":343},"Include artwork in the output.",{"type":37},{"type":25},{"type":25,"properties":347,"required":350},{"get":348,"head":349},{"type":37},{"type":37},[351,352],"get","head","src/pages/processor/metadata/_manifest.json","0f144e608574be9b","processor/artwork/_manifest",{"id":355,"data":357,"filePath":377,"digest":378},{"name":358,"title":359,"description":360,"entrypoint":16,"actions":361},"diffuse/processor/artwork","Diffuse Processor | Artwork fetcher","Tries to get artwork for a given URL or stream.",{"supply":362},{"title":338,"description":363,"params_schema":364},"Get the artwork for a given URL.",{"type":22,"items":365},{"type":25,"properties":366,"required":375},{"cacheId":367,"mimeType":368,"stream":369,"urls":370},{"type":37},{"type":37},{"type":25},{"type":25,"properties":371,"required":374},{"get":372,"head":373},{"type":37},{"type":37},[351,352],[376],"cacheId","src/pages/processor/artwork/_manifest.json","9401bdfa33e2f0db","processor/search/_manifest",{"id":379,"data":381,"filePath":385,"digest":386},{"name":382,"title":383,"entrypoint":16,"actions":384},"diffuse/processor/search","Diffuse Processor | Search",{},"src/pages/processor/search/_manifest.json","ec562d1125821f8a","theme/pilot/audio/_manifest",{"id":387,"data":389,"filePath":401,"digest":402},{"name":390,"title":391,"entrypoint":16,"actions":392},"diffuse/constituent/pilot/audio","",{"modifyIsPlaying":393,"modifyProgress":397},{"title":394,"description":395,"params_schema":396},"Set is-playing state","Indicate if audio is playing or not.",{"type":100},{"title":398,"description":399,"params_schema":400},"Set progress","Indicate how far the audio has progressed.",{"type":86},"src/pages/theme/pilot/audio/_manifest.json","7c3a0b25e8d14fd2","constituent/blur/artwork-controller/_manifest",{"id":403,"data":405,"filePath":409,"digest":410},{"name":406,"title":407,"entrypoint":16,"actions":408},"diffuse/constituent/blur/artwork-controller","Diffuse Blur Theme | Artwork Controller",{},"src/pages/constituent/blur/artwork-controller/_manifest.json","8fc3503208f14724","constituent/blur/browser/_manifest",{"id":411,"data":413,"filePath":417,"digest":418},{"name":414,"title":415,"entrypoint":16,"actions":416},"diffuse/constituent/blur/browser","Diffuse Blur Theme | Browser",{},"src/pages/constituent/blur/browser/_manifest.json","60cf6e2d4c21ecd2","orchestrator/search-tracks/_manifest",{"id":419,"data":421,"filePath":423,"digest":291},{"name":287,"title":288,"entrypoint":16,"actions":422},{},"src/pages/orchestrator/search-tracks/_manifest.json"]
···11+---
22+import Layout from "@layouts/applet.astro";
33+import Applet from "./_applet.astro";
44+import { title } from "./_manifest.json";
55+---
66+77+<Layout title={title}>
88+ <Applet />
99+</Layout>
+21-6
src/pages/processor/search/_applet.astro
···11<script>
22 import type { Tasks } from "@scripts/processor/search/worker";
33 import type { Track } from "@applets/core/types";
44+ import type { State } from "@scripts/processor/search/types";
45 import { register } from "@scripts/applet/common";
55- import { endpoint, transfer } from "@scripts/common";
66+ import { endpoint, sync, transfer } from "@scripts/common";
67 import manifest from "./_manifest.json";
7889 ////////////////////////////////////////////
910 // SETUP
1011 ////////////////////////////////////////////
1111- const worker = endpoint<Tasks>(
1212- new SharedWorker(new URL("../../../scripts/processor/search/worker", import.meta.url), {
1212+ const port = new SharedWorker(
1313+ new URL("../../../scripts/processor/search/worker", import.meta.url),
1414+ {
1315 type: "module",
1416 name: manifest.name,
1515- }).port,
1616- );
1717+ },
1818+ ).port;
1919+2020+ const worker = endpoint<Tasks>(port);
17211822 // Register applet
1919- const context = register({ worker });
2323+ const context = register<State>({ worker, mode: "shared-worker" });
2424+2525+ // Initial state
2626+ context.data = {
2727+ cacheId: "",
2828+ inserted: new Set<string>(),
2929+ };
3030+3131+ context.data = await worker.data();
3232+3333+ // Keep applet data with worker data in sync
3434+ sync(context, port);
20352136 ////////////////////////////////////////////
2237 // ACTIONS
+1
src/pages/processor/search/types.d.ts
···11+export * from "@scripts/processor/search/types.d.ts";
+14-13
src/scripts/applet/common.ts
···44import { applets } from "@web-applets/sdk";
55import QS from "query-string";
6677-import { type ElementConfigurator, h } from "@scripts/spellcaster/hyperscript.js";
77+import { type ElementConfigurator, h as hyperscript } from "@scripts/spellcaster/hyperscript.js";
88import { isSignal, type Signal, signal } from "@scripts/spellcaster";
991010import type { ResolvedUri } from "@applets/core/types";
···462462 return () => port;
463463}
464464465465-export function hs(
466466- tag: string,
467467- astroScope: string,
468468- props?: Record<string, unknown> | Signal<Record<string, unknown>>,
469469- configure?: ElementConfigurator,
470470-) {
471471- const propsWithScope =
472472- props && isSignal(props)
473473- ? () => addScope(astroScope, props())
474474- : addScope(astroScope, props || {});
465465+export const hs =
466466+ (astroScope: string) =>
467467+ (
468468+ tag: string,
469469+ props?: Record<string, any> | (() => Record<string, any>),
470470+ configure?: ElementConfigurator,
471471+ ) => {
472472+ const propsWithScope =
473473+ props && isSignal(props)
474474+ ? () => addScope(astroScope, props())
475475+ : addScope(astroScope, props || {});
475476476476- return h(tag, propsWithScope, configure);
477477-}
477477+ return hyperscript(tag, propsWithScope, configure);
478478+ };
478479479480export function wait<A>(applet: Applet<A>, dataFn: (a: A | undefined) => boolean): Promise<void> {
480481 return new Promise((resolve) => {
+1-1
src/scripts/engine/queue/worker.ts
···2233import type { Track } from "@applets/core/types.js";
44import type { Item, State } from "./types";
55-import { arrayShuffle, postMessages, provide, transfer } from "@scripts/common.ts";
55+import { arrayShuffle, postMessages, provide } from "@scripts/common.ts";
6677////////////////////////////////////////////
88// SETUP
···11import { computed } from "alien-signals";
2233+export type Props = Record<string, any> | (() => Record<string, any>);
44+35/**
46 * A signal is a zero-argument function that returns a value.
57 * Reactive signals created with `signal()` will cause reactive contexts