diff --git a/404.html b/404.html index 19f0e243..e62bd9c4 100644 --- a/404.html +++ b/404.html @@ -7,13 +7,13 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/assets/images/ai-photoshoot-input-3e9da4e3f5e050cbe4f36788a62521de.png b/assets/images/ai-photoshoot-input-3e9da4e3f5e050cbe4f36788a62521de.png deleted file mode 100644 index d17250de..00000000 Binary files a/assets/images/ai-photoshoot-input-3e9da4e3f5e050cbe4f36788a62521de.png and /dev/null differ diff --git a/assets/images/ai-photoshoot-input-66e224267554a6902bfaa5e6103ae27f.jpg b/assets/images/ai-photoshoot-input-66e224267554a6902bfaa5e6103ae27f.jpg new file mode 100644 index 00000000..55c13c34 Binary files /dev/null and b/assets/images/ai-photoshoot-input-66e224267554a6902bfaa5e6103ae27f.jpg differ diff --git a/assets/images/ai-photoshoot-output-79da8a3cef6fc255171431261d38c892.jpg b/assets/images/ai-photoshoot-output-79da8a3cef6fc255171431261d38c892.jpg new file mode 100644 index 00000000..b4d5e99d Binary files /dev/null and b/assets/images/ai-photoshoot-output-79da8a3cef6fc255171431261d38c892.jpg differ diff --git a/assets/images/ai-photoshoot-output-eae27ea09d0f21a7514e4b20b020fc24.png b/assets/images/ai-photoshoot-output-eae27ea09d0f21a7514e4b20b020fc24.png deleted file mode 100644 index dd5e407e..00000000 Binary files a/assets/images/ai-photoshoot-output-eae27ea09d0f21a7514e4b20b020fc24.png and /dev/null differ diff --git a/assets/images/controlnet-output-3b470785595068fc9c7c681b1415da1e.png b/assets/images/controlnet-output-3b470785595068fc9c7c681b1415da1e.png deleted file mode 100644 index 33818105..00000000 Binary files a/assets/images/controlnet-output-3b470785595068fc9c7c681b1415da1e.png and /dev/null differ diff --git a/assets/images/controlnet-output-8792495c9018de2ceb447bcce0a99495.jpg b/assets/images/controlnet-output-8792495c9018de2ceb447bcce0a99495.jpg new file mode 100644 index 00000000..a146bcd9 Binary files /dev/null and b/assets/images/controlnet-output-8792495c9018de2ceb447bcce0a99495.jpg differ diff --git a/assets/images/faceid-output-8799f088b000a2adc1d94447c8a3e096.jpg b/assets/images/faceid-output-8799f088b000a2adc1d94447c8a3e096.jpg deleted file mode 100644 index 1a2ffe2e..00000000 Binary files a/assets/images/faceid-output-8799f088b000a2adc1d94447c8a3e096.jpg and /dev/null differ diff --git a/assets/images/faceid-output1-aa799eba49b320b187e29cec267a3258.jpg b/assets/images/faceid-output1-aa799eba49b320b187e29cec267a3258.jpg new file mode 100644 index 00000000..c35db9c9 Binary files /dev/null and b/assets/images/faceid-output1-aa799eba49b320b187e29cec267a3258.jpg differ diff --git a/assets/images/faceid-output2-e44e20e05a5a6cffaba2d97ee9ac1947.jpg b/assets/images/faceid-output2-e44e20e05a5a6cffaba2d97ee9ac1947.jpg new file mode 100644 index 00000000..f59e3273 Binary files /dev/null and b/assets/images/faceid-output2-e44e20e05a5a6cffaba2d97ee9ac1947.jpg differ diff --git a/assets/images/faceid-output3-b4745421562fc7a28a7be8eb46f4853e.jpg b/assets/images/faceid-output3-b4745421562fc7a28a7be8eb46f4853e.jpg new file mode 100644 index 00000000..ea3e61f7 Binary files /dev/null and b/assets/images/faceid-output3-b4745421562fc7a28a7be8eb46f4853e.jpg differ diff --git a/assets/images/faceid-output4-8e3f3c0ebd0449c2adf1d12015229097.jpg b/assets/images/faceid-output4-8e3f3c0ebd0449c2adf1d12015229097.jpg new file mode 100644 index 00000000..309f2d18 Binary files /dev/null and b/assets/images/faceid-output4-8e3f3c0ebd0449c2adf1d12015229097.jpg differ diff --git a/assets/images/faceid-portrait-output-46eed1b926c1c5e3b055ad7ffb68676a.jpg b/assets/images/faceid-portrait-output-46eed1b926c1c5e3b055ad7ffb68676a.jpg deleted file mode 100644 index 9cf715b8..00000000 Binary files a/assets/images/faceid-portrait-output-46eed1b926c1c5e3b055ad7ffb68676a.jpg and /dev/null differ diff --git a/assets/images/faceid-portrait-output1-8c5ea4967162c608b58d6b56dcb60cce.jpg b/assets/images/faceid-portrait-output1-8c5ea4967162c608b58d6b56dcb60cce.jpg new file mode 100644 index 00000000..851ba050 Binary files /dev/null and b/assets/images/faceid-portrait-output1-8c5ea4967162c608b58d6b56dcb60cce.jpg differ diff --git a/assets/images/faceid-portrait-output2-890a11d787c8827591af150362b1af05.jpg b/assets/images/faceid-portrait-output2-890a11d787c8827591af150362b1af05.jpg new file mode 100644 index 00000000..ee93ef89 Binary files /dev/null and b/assets/images/faceid-portrait-output2-890a11d787c8827591af150362b1af05.jpg differ diff --git a/assets/images/faceid-portrait-output3-92853d1bee638e8a6785ae5961ef96b8.jpg b/assets/images/faceid-portrait-output3-92853d1bee638e8a6785ae5961ef96b8.jpg new file mode 100644 index 00000000..0ee7cf3c Binary files /dev/null and b/assets/images/faceid-portrait-output3-92853d1bee638e8a6785ae5961ef96b8.jpg differ diff --git a/assets/images/faceid-portrait-output4-4d41c4f7de56b0befb40e69b89bc0190.jpg b/assets/images/faceid-portrait-output4-4d41c4f7de56b0befb40e69b89bc0190.jpg new file mode 100644 index 00000000..ecca1db6 Binary files /dev/null and b/assets/images/faceid-portrait-output4-4d41c4f7de56b0befb40e69b89bc0190.jpg differ diff --git a/assets/images/inpaint-output-dd16b5c0ad5e2fe412cdcbbcac28641c.jpg b/assets/images/inpaint-output-dd16b5c0ad5e2fe412cdcbbcac28641c.jpg new file mode 100644 index 00000000..a5af7401 Binary files /dev/null and b/assets/images/inpaint-output-dd16b5c0ad5e2fe412cdcbbcac28641c.jpg differ diff --git a/assets/images/inpaint-output-fab07e2698f26f47fea7e307acc75106.png b/assets/images/inpaint-output-fab07e2698f26f47fea7e307acc75106.png deleted file mode 100644 index 8ccb4af0..00000000 Binary files a/assets/images/inpaint-output-fab07e2698f26f47fea7e307acc75106.png and /dev/null differ diff --git a/assets/images/multicontrolnet-input-image-d6e9d27f5983e2891f6cfd968d2606ab.jpeg b/assets/images/multicontrolnet-input-image-d6e9d27f5983e2891f6cfd968d2606ab.jpeg deleted file mode 100644 index 556947d9..00000000 Binary files a/assets/images/multicontrolnet-input-image-d6e9d27f5983e2891f6cfd968d2606ab.jpeg and /dev/null differ diff --git a/assets/images/multicontrolnet-pose-only-749e87d50cb4b2dcb92b5a30658a2382.jpeg b/assets/images/multicontrolnet-pose-only-749e87d50cb4b2dcb92b5a30658a2382.jpeg deleted file mode 100644 index 4e5959ac..00000000 Binary files a/assets/images/multicontrolnet-pose-only-749e87d50cb4b2dcb92b5a30658a2382.jpeg and /dev/null differ diff --git a/assets/images/multicontrolnet-reference-pose-0e21c6720606e3ed31b031cb7594b3ab.jpeg b/assets/images/multicontrolnet-reference-pose-0e21c6720606e3ed31b031cb7594b3ab.jpeg deleted file mode 100644 index d6f20c32..00000000 Binary files a/assets/images/multicontrolnet-reference-pose-0e21c6720606e3ed31b031cb7594b3ab.jpeg and /dev/null differ diff --git a/assets/images/multipass-1-3fad6ed550153c10fa613cda7ce94924.jpeg b/assets/images/multipass-1-3fad6ed550153c10fa613cda7ce94924.jpeg deleted file mode 100644 index 933871cf..00000000 Binary files a/assets/images/multipass-1-3fad6ed550153c10fa613cda7ce94924.jpeg and /dev/null differ diff --git a/assets/images/multipass-2-e292d27c95dd1cbda105cc0b51f780af.jpeg b/assets/images/multipass-2-e292d27c95dd1cbda105cc0b51f780af.jpeg deleted file mode 100644 index c0b660cc..00000000 Binary files a/assets/images/multipass-2-e292d27c95dd1cbda105cc0b51f780af.jpeg and /dev/null differ diff --git a/assets/images/multipass-3-83a8fa2dd107d0d25f4c8574df30e1eb.jpeg b/assets/images/multipass-3-83a8fa2dd107d0d25f4c8574df30e1eb.jpeg deleted file mode 100644 index 38fcf3e3..00000000 Binary files a/assets/images/multipass-3-83a8fa2dd107d0d25f4c8574df30e1eb.jpeg and /dev/null differ diff --git a/assets/images/multipass-4-bdd36b76b18a0a09e94b2745cfd4b182.jpeg b/assets/images/multipass-4-bdd36b76b18a0a09e94b2745cfd4b182.jpeg deleted file mode 100644 index a8c57b5e..00000000 Binary files a/assets/images/multipass-4-bdd36b76b18a0a09e94b2745cfd4b182.jpeg and /dev/null differ diff --git a/assets/images/multipass-xl-1-199f63a9bca7524238c55680f6fbc708.jpeg b/assets/images/multipass-xl-1-199f63a9bca7524238c55680f6fbc708.jpeg deleted file mode 100644 index 2cd8fb6e..00000000 Binary files a/assets/images/multipass-xl-1-199f63a9bca7524238c55680f6fbc708.jpeg and /dev/null differ diff --git a/assets/images/multipass-xl-2-22fd2a63e7df9c89239ae4056945a21c.jpeg b/assets/images/multipass-xl-2-22fd2a63e7df9c89239ae4056945a21c.jpeg deleted file mode 100644 index 18fb013c..00000000 Binary files a/assets/images/multipass-xl-2-22fd2a63e7df9c89239ae4056945a21c.jpeg and /dev/null differ diff --git a/assets/images/multipass-xl-3-afae0bb7b3da2b9a5d6ccd02e75e6095.jpeg b/assets/images/multipass-xl-3-afae0bb7b3da2b9a5d6ccd02e75e6095.jpeg deleted file mode 100644 index eff7ad33..00000000 Binary files a/assets/images/multipass-xl-3-afae0bb7b3da2b9a5d6ccd02e75e6095.jpeg and /dev/null differ diff --git a/assets/images/multipass-xl-4-7c04a47cf6322e0c81353d960c4a6a03.jpeg b/assets/images/multipass-xl-4-7c04a47cf6322e0c81353d960c4a6a03.jpeg deleted file mode 100644 index 3200c9e6..00000000 Binary files a/assets/images/multipass-xl-4-7c04a47cf6322e0c81353d960c4a6a03.jpeg and /dev/null differ diff --git a/assets/images/multiperson-3eb19ee130434a8dfacaacfc5560ad60.png b/assets/images/multiperson-3eb19ee130434a8dfacaacfc5560ad60.png deleted file mode 100644 index 35588a2e..00000000 Binary files a/assets/images/multiperson-3eb19ee130434a8dfacaacfc5560ad60.png and /dev/null differ diff --git a/assets/images/multiperson-dalle-565280b3b0256849af10daa70ad1bb64.jpg b/assets/images/multiperson-dalle-565280b3b0256849af10daa70ad1bb64.jpg deleted file mode 100644 index ad6d48bc..00000000 Binary files a/assets/images/multiperson-dalle-565280b3b0256849af10daa70ad1bb64.jpg and /dev/null differ diff --git a/assets/images/multiperson-img2img-c40deae782ddcfba5ce191126bb0a25e.jpg b/assets/images/multiperson-img2img-c40deae782ddcfba5ce191126bb0a25e.jpg deleted file mode 100644 index 7aadebc7..00000000 Binary files a/assets/images/multiperson-img2img-c40deae782ddcfba5ce191126bb0a25e.jpg and /dev/null differ diff --git a/assets/images/multiperson-no-base-prompt-aec03b14af49a52e88ae822b1afe5905.jpg b/assets/images/multiperson-no-base-prompt-aec03b14af49a52e88ae822b1afe5905.jpg deleted file mode 100644 index 444fa613..00000000 Binary files a/assets/images/multiperson-no-base-prompt-aec03b14af49a52e88ae822b1afe5905.jpg and /dev/null differ diff --git a/assets/images/multiperson-no-input-image-5ce21a715ef2cb16e1cc45389186c803.jpg b/assets/images/multiperson-no-input-image-5ce21a715ef2cb16e1cc45389186c803.jpg deleted file mode 100644 index 2065ca91..00000000 Binary files a/assets/images/multiperson-no-input-image-5ce21a715ef2cb16e1cc45389186c803.jpg and /dev/null differ diff --git a/assets/images/multiperson-pose-back-to-back-45b9a68c860ba481eeaf646f27e82bc8.webp b/assets/images/multiperson-pose-back-to-back-45b9a68c860ba481eeaf646f27e82bc8.webp deleted file mode 100644 index a1aaf5df..00000000 Binary files a/assets/images/multiperson-pose-back-to-back-45b9a68c860ba481eeaf646f27e82bc8.webp and /dev/null differ diff --git a/assets/images/multiperson-training-4568726f76653fd3e79915b003dbb259.png b/assets/images/multiperson-training-4568726f76653fd3e79915b003dbb259.png deleted file mode 100644 index 50311168..00000000 Binary files a/assets/images/multiperson-training-4568726f76653fd3e79915b003dbb259.png and /dev/null differ diff --git a/assets/images/multiperson-txt2img-pose-cedced053047e7075ea2a522fc53ab13.jpg b/assets/images/multiperson-txt2img-pose-cedced053047e7075ea2a522fc53ab13.jpg deleted file mode 100644 index 73ca1430..00000000 Binary files a/assets/images/multiperson-txt2img-pose-cedced053047e7075ea2a522fc53ab13.jpg and /dev/null differ diff --git a/assets/images/sdxl-output-e65457001cbfcde71dc935732d9b396c.jpg b/assets/images/sdxl-output-e65457001cbfcde71dc935732d9b396c.jpg new file mode 100644 index 00000000..ab43ff36 Binary files /dev/null and b/assets/images/sdxl-output-e65457001cbfcde71dc935732d9b396c.jpg differ diff --git a/assets/images/sdxl-output-eb2fc7f16279a8316300344ad7b0d084.jpeg b/assets/images/sdxl-output-eb2fc7f16279a8316300344ad7b0d084.jpeg deleted file mode 100644 index 751bb9e9..00000000 Binary files a/assets/images/sdxl-output-eb2fc7f16279a8316300344ad7b0d084.jpeg and /dev/null differ diff --git a/assets/images/virtual-try-on-jcrew-swimming-suit-53c3b1768a8393476e21cf6489a9d5fc.webp b/assets/images/virtual-try-on-jcrew-swimming-suit-53c3b1768a8393476e21cf6489a9d5fc.webp deleted file mode 100644 index 28476785..00000000 Binary files a/assets/images/virtual-try-on-jcrew-swimming-suit-53c3b1768a8393476e21cf6489a9d5fc.webp and /dev/null differ diff --git a/assets/images/virtual-try-on-northface-parka-dee9f2eaa8bb98f86187806bd6f555e6.webp b/assets/images/virtual-try-on-northface-parka-dee9f2eaa8bb98f86187806bd6f555e6.webp deleted file mode 100644 index fb13a845..00000000 Binary files a/assets/images/virtual-try-on-northface-parka-dee9f2eaa8bb98f86187806bd6f555e6.webp and /dev/null differ diff --git a/assets/images/virtual-try-on-northface-parka-generated-71287974ec84442ed404064b65eebba9.jpg b/assets/images/virtual-try-on-northface-parka-generated-71287974ec84442ed404064b65eebba9.jpg deleted file mode 100644 index a4a0cfa1..00000000 Binary files a/assets/images/virtual-try-on-northface-parka-generated-71287974ec84442ed404064b65eebba9.jpg and /dev/null differ diff --git a/assets/images/virtual-try-on-swimming-suit-generated-a449c37fab4876ffec4c4dc8203f2af3.jpg b/assets/images/virtual-try-on-swimming-suit-generated-a449c37fab4876ffec4c4dc8203f2af3.jpg deleted file mode 100644 index 08ad1ab4..00000000 Binary files a/assets/images/virtual-try-on-swimming-suit-generated-a449c37fab4876ffec4c4dc8203f2af3.jpg and /dev/null differ diff --git a/assets/js/084d163f.2935ef27.js b/assets/js/084d163f.f9fac178.js similarity index 54% rename from assets/js/084d163f.2935ef27.js rename to assets/js/084d163f.f9fac178.js index ce51c9d6..8625e86b 100644 --- a/assets/js/084d163f.2935ef27.js +++ b/assets/js/084d163f.f9fac178.js @@ -1 +1 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[7721],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var o=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=o.createContext({}),p=function(e){var t=o.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var a=e.components,r=e.mdxType,n=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(a),d=r,m=u["".concat(l,".").concat(d)]||u[d]||h[d]||n;return a?o.createElement(m,i(i({ref:t},c),{},{components:a})):o.createElement(m,i({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=a.length,i=new Array(n);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>n,metadata:()=>s,toc:()=>p});var o=a(7462),r=(a(7294),a(3905));const n={title:"AI Photoshoot - fine-tuning for professional headshots",tags:["fine-tuning","headshots","avatars","social profiles","virtual influencers","AI photoshoot","AI headshots","AI avatars"]},i="AI Photoshoot",s={unversionedId:"use-cases/ai-photoshoot",id:"use-cases/ai-photoshoot",title:"AI Photoshoot - fine-tuning for professional headshots",description:"Overview",source:"@site/docs/use-cases/0-ai-photoshoot.md",sourceDirName:"use-cases",slug:"/use-cases/ai-photoshoot",permalink:"/docs/use-cases/ai-photoshoot",draft:!1,tags:[{label:"fine-tuning",permalink:"/docs/tags/fine-tuning"},{label:"headshots",permalink:"/docs/tags/headshots"},{label:"avatars",permalink:"/docs/tags/avatars"},{label:"social profiles",permalink:"/docs/tags/social-profiles"},{label:"virtual influencers",permalink:"/docs/tags/virtual-influencers"},{label:"AI photoshoot",permalink:"/docs/tags/ai-photoshoot"},{label:"AI headshots",permalink:"/docs/tags/ai-headshots"},{label:"AI avatars",permalink:"/docs/tags/ai-avatars"}],version:"current",sidebarPosition:0,frontMatter:{title:"AI Photoshoot - fine-tuning for professional headshots",tags:["fine-tuning","headshots","avatars","social profiles","virtual influencers","AI photoshoot","AI headshots","AI avatars"]},sidebar:"tutorialSidebar",previous:{title:"Use cases",permalink:"/docs/category/use-cases"},next:{title:"Fine-tuning guide",permalink:"/docs/use-cases/finetuning-guide"}},l={},p=[{value:"Overview",id:"overview",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Create a model",id:"1-create-a-model",level:3},{value:"2. Generate images",id:"2-generate-images",level:3},{value:"Tips for training images",id:"tips-for-training-images",level:2},{value:"Tips for inference",id:"tips-for-inference",level:2}],c={toc:p},u="wrapper";function h(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ai-photoshoot"},"AI Photoshoot"),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,'The term "AI Photoshoot", "AI Headshots" or "AI Avatars" refers to the process of creating a generative AI model from around 16 images of a person. This model can then be used to create professional photography imagery of the person, without requiring high-end camera equipment, lighting, or wardrobe.'),(0,r.kt)("p",null,"AI headshots are particularly useful for social profile photos, such as those used on LinkedIn or Facebook, as well as on dating sites."),(0,r.kt)("p",null,"Another recent trend is the creation of virtual social influencers - consistent characters that do not exist in reality, but can be generated consistently in different scenes and everyday life."),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Training images"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Fine-tuning training images",src:a(3957).Z,width:"2000",height:"2203"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Output images"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Generated images",src:a(8642).Z,width:"2000",height:"2203"})))),(0,r.kt)("h2",{id:"steps"},"Steps"),(0,r.kt)("h3",{id:"1-create-a-model"},"1. Create a model"),(0,r.kt)("p",null,'At this stage, we will create a 2GB numeric (AI) model file that contains the "features" of a person. This is not the part where we generate new images, but only train a dedicated AI model.'),(0,r.kt)("p",null,"To begin, go to the ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/tunes/new"},"New tune")," page."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Title")," - Enter the person's name, e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"Elon Musk"),". Or choose whatever title that fits your needs. Choosing a title is not a part of the actual training of the model."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Class Name")," - Enter ",(0,r.kt)("inlineCode",{parentName:"p"},"man")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"woman"),", or possibly ",(0,r.kt)("inlineCode",{parentName:"p"},"boy, girl, cat"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"dog"),". This is highly important as it is a part of the actual technical training of your model. We automatically generate images of the \"class\" while training, and by comparing them to your images (the training set), the model 'learns' your subject's unique features."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Base tune")," - Select a baseline model on which you would like to train. For realistic generations, we recommend using ",(0,r.kt)("em",{parentName:"p"},(0,r.kt)("a",{parentName:"em",href:"https://www.astria.ai/gallery/tunes/690204/prompts"},"Realistic Vision v5.1")),", while for more artistic trainings, use ",(0,r.kt)("em",{parentName:"p"},(0,r.kt)("a",{parentName:"em",href:"https://www.astria.ai/gallery/tunes/538238/prompts"},"Deliberate")),"."),(0,r.kt)("p",null,"Other settings are optional and can be changed to your preference."),(0,r.kt)("h3",{id:"2-generate-images"},"2. Generate images"),(0,r.kt)("p",null,"Even before the model is ready, you can prepare a queue of prompts (texts) that will be fed into the model and used to generate models."),(0,r.kt)("h2",{id:"tips-for-training-images"},"Tips for training images"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Upload both portrait and full body shots of the person"),(0,r.kt)("li",{parentName:"ol"},"Use 26 pictures of your subject. Preferably cropped to 1:1 aspect ratio."),(0,r.kt)("li",{parentName:"ol"},"Use 6 photos of full body or entire object + 10 medium shot photos from the chest up + 10 close-ups."),(0,r.kt)("li",{parentName:"ol"},"Variation is key - Change body pose for every picture, use pictures from different days backgrounds and lighting. Every picture of your subject should introduce new info about your subject."),(0,r.kt)("li",{parentName:"ol"},"Avoid pictures taken at the same hour/day. For example few pictures with the same shirt will make the model learn the shirt as well as part of the subject."),(0,r.kt)("li",{parentName:"ol"},"Always pick a new background."),(0,r.kt)("li",{parentName:"ol"},"Do not upload pictures mixed with other people"),(0,r.kt)("li",{parentName:"ol"},"Do not upload upload funny faces")),(0,r.kt)("h2",{id:"tips-for-inference"},"Tips for inference"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Use ",(0,r.kt)("inlineCode",{parentName:"li"},"ohwx woman/man")," at the ",(0,r.kt)("em",{parentName:"li"},"beginning")," of the sentence."),(0,r.kt)("li",{parentName:"ol"},"Textual inversion can reduce similarity. Try to avoid it. Specifically TIs such as ",(0,r.kt)("inlineCode",{parentName:"li"},"ng_deepnegative_v1_75t")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"CyberRealistic"),"."),(0,r.kt)("li",{parentName:"ol"},"Use of ",(0,r.kt)("a",{parentName:"li",href:"/docs/features/lora"},"LoRA")," can reduce similarity. Keep LoRA strength low around 0.2-0.3.")))}h.isMDXComponent=!0},3957:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/ai-photoshoot-input-3e9da4e3f5e050cbe4f36788a62521de.png"},8642:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/ai-photoshoot-output-eae27ea09d0f21a7514e4b20b020fc24.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[7721],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var o=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=o.createContext({}),p=function(e){var t=o.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},c=function(e){var t=p(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var a=e.components,r=e.mdxType,n=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(a),d=r,m=u["".concat(l,".").concat(d)]||u[d]||h[d]||n;return a?o.createElement(m,i(i({ref:t},c),{},{components:a})):o.createElement(m,i({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=a.length,i=new Array(n);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>n,metadata:()=>s,toc:()=>p});var o=a(7462),r=(a(7294),a(3905));const n={title:"AI Photoshoot - fine-tuning for professional headshots",tags:["fine-tuning","headshots","avatars","social profiles","virtual influencers","AI photoshoot","AI headshots","AI avatars"]},i="AI Photoshoot",s={unversionedId:"use-cases/ai-photoshoot",id:"use-cases/ai-photoshoot",title:"AI Photoshoot - fine-tuning for professional headshots",description:"Overview",source:"@site/docs/use-cases/0-ai-photoshoot.md",sourceDirName:"use-cases",slug:"/use-cases/ai-photoshoot",permalink:"/docs/use-cases/ai-photoshoot",draft:!1,tags:[{label:"fine-tuning",permalink:"/docs/tags/fine-tuning"},{label:"headshots",permalink:"/docs/tags/headshots"},{label:"avatars",permalink:"/docs/tags/avatars"},{label:"social profiles",permalink:"/docs/tags/social-profiles"},{label:"virtual influencers",permalink:"/docs/tags/virtual-influencers"},{label:"AI photoshoot",permalink:"/docs/tags/ai-photoshoot"},{label:"AI headshots",permalink:"/docs/tags/ai-headshots"},{label:"AI avatars",permalink:"/docs/tags/ai-avatars"}],version:"current",sidebarPosition:0,frontMatter:{title:"AI Photoshoot - fine-tuning for professional headshots",tags:["fine-tuning","headshots","avatars","social profiles","virtual influencers","AI photoshoot","AI headshots","AI avatars"]},sidebar:"tutorialSidebar",previous:{title:"Use cases",permalink:"/docs/category/use-cases"},next:{title:"Fine-tuning guide",permalink:"/docs/use-cases/finetuning-guide"}},l={},p=[{value:"Overview",id:"overview",level:2},{value:"Steps",id:"steps",level:2},{value:"1. Create a model",id:"1-create-a-model",level:3},{value:"2. Generate images",id:"2-generate-images",level:3},{value:"Tips for training images",id:"tips-for-training-images",level:2},{value:"Tips for inference",id:"tips-for-inference",level:2}],c={toc:p},u="wrapper";function h(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ai-photoshoot"},"AI Photoshoot"),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,'The term "AI Photoshoot", "AI Headshots" or "AI Avatars" refers to the process of creating a generative AI model from around 16 images of a person. This model can then be used to create professional photography imagery of the person, without requiring high-end camera equipment, lighting, or wardrobe.'),(0,r.kt)("p",null,"AI headshots are particularly useful for social profile photos, such as those used on LinkedIn or Facebook, as well as on dating sites."),(0,r.kt)("p",null,"Another recent trend is the creation of virtual social influencers - consistent characters that do not exist in reality, but can be generated consistently in different scenes and everyday life."),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Training images"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Fine-tuning training images",src:a(6973).Z,width:"525",height:"671"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Output images"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Generated images",src:a(670).Z,width:"1805",height:"2324"})))),(0,r.kt)("h2",{id:"steps"},"Steps"),(0,r.kt)("h3",{id:"1-create-a-model"},"1. Create a model"),(0,r.kt)("p",null,'At this stage, we will create a 2GB numeric (AI) model file that contains the "features" of a person. This is not the part where we generate new images, but only train a dedicated AI model.'),(0,r.kt)("p",null,"To begin, go to the ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/tunes/new"},"New tune")," page."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Title")," - Enter the person's name, e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"Elon Musk"),". Or choose whatever title that fits your needs. Choosing a title is not a part of the actual training of the model."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Class Name")," - Enter ",(0,r.kt)("inlineCode",{parentName:"p"},"man")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"woman"),", or possibly ",(0,r.kt)("inlineCode",{parentName:"p"},"boy, girl, cat"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"dog"),". This is highly important as it is a part of the actual technical training of your model. We automatically generate images of the \"class\" while training, and by comparing them to your images (the training set), the model 'learns' your subject's unique features."),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Base tune")," - Select a baseline model on which you would like to train. For realistic generations, we recommend using ",(0,r.kt)("em",{parentName:"p"},(0,r.kt)("a",{parentName:"em",href:"https://www.astria.ai/gallery/tunes/690204/prompts"},"Realistic Vision v5.1")),", while for more artistic trainings, use ",(0,r.kt)("em",{parentName:"p"},(0,r.kt)("a",{parentName:"em",href:"https://www.astria.ai/gallery/tunes/538238/prompts"},"Deliberate")),"."),(0,r.kt)("p",null,"Other settings are optional and can be changed to your preference."),(0,r.kt)("h3",{id:"2-generate-images"},"2. Generate images"),(0,r.kt)("p",null,"Even before the model is ready, you can prepare a queue of prompts (texts) that will be fed into the model and used to generate models."),(0,r.kt)("h2",{id:"tips-for-training-images"},"Tips for training images"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Upload both portrait and full body shots of the person"),(0,r.kt)("li",{parentName:"ol"},"Use 26 pictures of your subject. Preferably cropped to 1:1 aspect ratio."),(0,r.kt)("li",{parentName:"ol"},"Use 6 photos of full body or entire object + 10 medium shot photos from the chest up + 10 close-ups."),(0,r.kt)("li",{parentName:"ol"},"Variation is key - Change body pose for every picture, use pictures from different days backgrounds and lighting. Every picture of your subject should introduce new info about your subject."),(0,r.kt)("li",{parentName:"ol"},"Avoid pictures taken at the same hour/day. For example few pictures with the same shirt will make the model learn the shirt as well as part of the subject."),(0,r.kt)("li",{parentName:"ol"},"Always pick a new background."),(0,r.kt)("li",{parentName:"ol"},"Do not upload pictures mixed with other people"),(0,r.kt)("li",{parentName:"ol"},"Do not upload upload funny faces")),(0,r.kt)("h2",{id:"tips-for-inference"},"Tips for inference"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Use ",(0,r.kt)("inlineCode",{parentName:"li"},"ohwx woman/man")," at the ",(0,r.kt)("em",{parentName:"li"},"beginning")," of the sentence."),(0,r.kt)("li",{parentName:"ol"},"Textual inversion can reduce similarity. Try to avoid it. Specifically TIs such as ",(0,r.kt)("inlineCode",{parentName:"li"},"ng_deepnegative_v1_75t")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"CyberRealistic"),"."),(0,r.kt)("li",{parentName:"ol"},"Use of ",(0,r.kt)("a",{parentName:"li",href:"/docs/features/lora"},"LoRA")," for styles can reduce similarity. Keep LoRA strength low around 0.2-0.3.")))}h.isMDXComponent=!0},6973:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/ai-photoshoot-input-66e224267554a6902bfaa5e6103ae27f.jpg"},670:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/ai-photoshoot-output-79da8a3cef6fc255171431261d38c892.jpg"}}]); \ No newline at end of file diff --git a/assets/js/17ccf213.05e91ae3.js b/assets/js/17ccf213.05e91ae3.js deleted file mode 100644 index e6e7503c..00000000 --- a/assets/js/17ccf213.05e91ae3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[772],{8707:s=>{s.exports=JSON.parse('{"label":"clothing","permalink":"/docs/tags/clothing","allTagsPath":"/docs/tags","count":1,"items":[{"id":"use-cases/virtual-try-on","title":"Virtual Try-on","description":"BETA. Backend V1 feature. Price changes still pending.","permalink":"/docs/use-cases/virtual-try-on"}]}')}}]); \ No newline at end of file diff --git a/assets/js/18678e9e.8f710039.js b/assets/js/18678e9e.43f7305f.js similarity index 72% rename from assets/js/18678e9e.8f710039.js rename to assets/js/18678e9e.43f7305f.js index dd9c83d3..9df3e437 100644 --- a/assets/js/18678e9e.8f710039.js +++ b/assets/js/18678e9e.43f7305f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[6667],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(n),u=o,g=c["".concat(l,".").concat(u)]||c[u]||m[u]||a;return n?r.createElement(g,i(i({ref:t},d),{},{components:n})):r.createElement(g,i({ref:t},d))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const a={},i="AI Interior Design",s={unversionedId:"use-cases/room-redesign",id:"use-cases/room-redesign",title:"AI Interior Design",description:"Backend V1",source:"@site/docs/use-cases/room-redesign.md",sourceDirName:"use-cases",slug:"/use-cases/room-redesign",permalink:"/docs/use-cases/room-redesign",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Masked portraits",permalink:"/docs/use-cases/masked-portraits"},next:{title:"Upscale",permalink:"/docs/use-cases/upscale"}},l={},p=[{value:"Overview",id:"overview",level:2},{value:"How to use",id:"how-to-use",level:2},{value:"Example prompt",id:"example-prompt",level:3}],d={toc:p},c="wrapper";function m(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ai-interior-design"},"AI Interior Design"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Backend V1")),(0,o.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Original room"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Original room",src:n(1283).Z,width:"512",height:"512"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Generated using mlsd"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"generated.png",src:n(8246).Z,width:"1024",height:"1024"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Generated room using segroom + mlsd"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Generated room using segroom + mlsd",src:n(9716).Z,width:"1536",height:"1536"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Generated room with window masking"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"generated.png",src:n(8589).Z,width:"1536",height:"1536"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Original sketch"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Original room",src:n(2593).Z,width:"1453",height:"808"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Generated room with window masking"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"generated.png",src:n(6347).Z,width:"2048",height:"1152"})))),(0,o.kt)("p",null,"See example prompts in the ",(0,o.kt)("a",{parentName:"p",href:"https://www.astria.ai/photobooth?controlnet=mlsd"},"photobooth")," page or in the ",(0,o.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?controlnet=mlsd"},"gallery"),"."),(0,o.kt)("h2",{id:"overview"},"Overview"),(0,o.kt)("p",null,"AI Interrior design is the term for the process of generating images of a room with different furniture, wall colors, and decorations all while keeping the original room layout. This can be useful for interior designers, real estate agents, or when planning a renovation."),(0,o.kt)("h2",{id:"how-to-use"},"How to use"),(0,o.kt)("p",null,"In order to preserve the room layout use either controlnet ",(0,o.kt)("inlineCode",{parentName:"p"},"mlsd")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"segroom"),". Input images can be sketches, 3d models, or photos of the room. Depending on the input, you might need to adjust the strength and combination of controlnets as well as the prompts."),(0,o.kt)("p",null,"Controlnet ",(0,o.kt)("inlineCode",{parentName:"p"},"segroom")," is a specific controlnet that was trained to preserve the meaning of the room layout, such as walls and windows."),(0,o.kt)("p",null,"Controlnet ",(0,o.kt)("inlineCode",{parentName:"p"},"mlsd")," is a more general model, used with a pre-processor that produces straight lines and is suitable for architecture."),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"mlsd")," is support for both SDXL and SD1.5 models while ",(0,o.kt)("inlineCode",{parentName:"p"},"segroom")," is only available for SD1.5 models."),(0,o.kt)("p",null,"You may use the ",(0,o.kt)("a",{parentName:"p",href:"/docs/features/multi-controlnet"},"multi-controlnet")," option to combine both controlnets like ",(0,o.kt)("inlineCode",{parentName:"p"},"--controlnets mlsd segroom --controlnet_weights 1 0.5"),"."),(0,o.kt)("p",null,"Additionally you may decide to automatically mask out windows and doors by using the ",(0,o.kt)("inlineCode",{parentName:"p"},"--mask_prompt windows door --mask_invert")," prompt. See more information on ",(0,o.kt)("a",{parentName:"p",href:"/docs/features/prompt-masking"},"prompt masking syntax"),"."),(0,o.kt)("h3",{id:"example-prompt"},"Example prompt"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-text"},"Clean scandinavian design living room, natural light, architecture magazine cover --mask_prompt windows door --mask_invert --controlnets mlsd segroom --controlnet_weights 0.5 1\nnum_images=1\nnegative_prompt=painted, sketch, deformed, easynegative\nseed=\nsteps=30\ncfg_scale=\ncontrolnet=lineart\ninput_image_url=https://sdbooth2-production.s3.amazonaws.com/du6cwkp9nojx3ze66vv5nqi39jxo\nmask_image_url=\ndenoising_strength=1\ncontrolnet_conditioning_scale=\ncontrolnet_txt2img=false\nsuper_resolution=true\ninpaint_faces=false\nface_correct=false\nfilm_grain=false\nface_swap=false\nhires_fix=true\nbackend_version=1\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=\nh=\n")))}m.isMDXComponent=!0},6347:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-input-sketch-mlsd-326ee922dbfeeb3edabdf1039ddf5f06.jpeg"},2593:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-input-sketch-6212a108e423e8896124e3f7ef9f51a4.png"},1283:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-input-af46f8947fdb4f40c831a3d387479d6f.jpeg"},8246:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-mlsd-c6d13d53f345055ace616d19399d62c8.jpg"},8589:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-segroom-masking-b3b3c041cef3add1eedb0e7f609237a1.jpeg"},9716:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-segroom-8dc0b609de0ade09f903ca8a964a5eb0.jpeg"}}]); \ No newline at end of file +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[6667],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(n),u=o,g=c["".concat(l,".").concat(u)]||c[u]||m[u]||a;return n?r.createElement(g,i(i({ref:t},d),{},{components:n})):r.createElement(g,i({ref:t},d))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const a={},i="AI Interior Design",s={unversionedId:"use-cases/room-redesign",id:"use-cases/room-redesign",title:"AI Interior Design",description:"Backend V1",source:"@site/docs/use-cases/room-redesign.md",sourceDirName:"use-cases",slug:"/use-cases/room-redesign",permalink:"/docs/use-cases/room-redesign",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Masked portraits",permalink:"/docs/use-cases/masked-portraits"},next:{title:"Upscale",permalink:"/docs/use-cases/upscale"}},l={},p=[{value:"Overview",id:"overview",level:2},{value:"How to use",id:"how-to-use",level:2},{value:"Example prompt",id:"example-prompt",level:3}],d={toc:p},c="wrapper";function m(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ai-interior-design"},"AI Interior Design"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Backend V1")),(0,o.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Original room"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Original room",src:n(1283).Z,width:"512",height:"512"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Generated using mlsd"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"generated.png",src:n(8246).Z,width:"1024",height:"1024"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Generated room using segroom + mlsd"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Generated room using segroom + mlsd",src:n(9716).Z,width:"1536",height:"1536"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Generated room with window masking"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"generated.png",src:n(8589).Z,width:"1536",height:"1536"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Original sketch"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Original room",src:n(2593).Z,width:"1453",height:"808"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Generated room with window masking"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"generated.png",src:n(6347).Z,width:"2048",height:"1152"})))),(0,o.kt)("p",null,"See example prompts in the ",(0,o.kt)("a",{parentName:"p",href:"https://www.astria.ai/photobooth?controlnet=mlsd"},"photobooth")," page or in the ",(0,o.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?controlnet=mlsd"},"gallery"),"."),(0,o.kt)("h2",{id:"overview"},"Overview"),(0,o.kt)("p",null,"AI Interrior design is the term for the process of generating images of a room with different furniture, wall colors, and decorations all while keeping the original room layout. This can be useful for interior designers, real estate agents, or when planning a renovation."),(0,o.kt)("h2",{id:"how-to-use"},"How to use"),(0,o.kt)("p",null,"In order to preserve the room layout use either controlnet ",(0,o.kt)("inlineCode",{parentName:"p"},"mlsd")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"segroom"),". Input images can be sketches, 3d models, or photos of the room. Depending on the input, you might need to adjust the strength and combination of controlnets as well as the prompts."),(0,o.kt)("p",null,"Controlnet ",(0,o.kt)("inlineCode",{parentName:"p"},"segroom")," is a specific controlnet that was trained to preserve the meaning of the room layout, such as walls and windows."),(0,o.kt)("p",null,"Controlnet ",(0,o.kt)("inlineCode",{parentName:"p"},"mlsd")," is a more general model, used with a pre-processor that produces straight lines and is suitable for architecture."),(0,o.kt)("p",null,(0,o.kt)("inlineCode",{parentName:"p"},"mlsd")," is support for both SDXL and SD1.5 models while ",(0,o.kt)("inlineCode",{parentName:"p"},"segroom")," is only available for SD1.5 models."),(0,o.kt)("p",null,"Additionally you may decide to automatically mask out windows and doors by using the ",(0,o.kt)("inlineCode",{parentName:"p"},"--mask_prompt windows door --mask_invert")," prompt. See more information on ",(0,o.kt)("a",{parentName:"p",href:"/docs/features/prompt-masking"},"prompt masking syntax"),"."),(0,o.kt)("h3",{id:"example-prompt"},"Example prompt"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-text"},"Clean scandinavian design living room, natural light, architecture magazine cover --mask_prompt windows door --mask_invert --controlnets mlsd segroom --controlnet_weights 0.5 1\nnum_images=1\nnegative_prompt=painted, sketch, deformed, easynegative\nseed=\nsteps=30\ncfg_scale=\ncontrolnet=lineart\ninput_image_url=https://sdbooth2-production.s3.amazonaws.com/du6cwkp9nojx3ze66vv5nqi39jxo\nmask_image_url=\ndenoising_strength=1\ncontrolnet_conditioning_scale=\ncontrolnet_txt2img=false\nsuper_resolution=true\ninpaint_faces=false\nface_correct=false\nfilm_grain=false\nface_swap=false\nhires_fix=true\nbackend_version=1\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=\nh=\n")))}m.isMDXComponent=!0},6347:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-input-sketch-mlsd-326ee922dbfeeb3edabdf1039ddf5f06.jpeg"},2593:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-input-sketch-6212a108e423e8896124e3f7ef9f51a4.png"},1283:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-input-af46f8947fdb4f40c831a3d387479d6f.jpeg"},8246:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-mlsd-c6d13d53f345055ace616d19399d62c8.jpg"},8589:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-segroom-masking-b3b3c041cef3add1eedb0e7f609237a1.jpeg"},9716:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ai-interrior-redesign-segroom-8dc0b609de0ade09f903ca8a964a5eb0.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/4700e527.291ea8d6.js b/assets/js/4700e527.291ea8d6.js deleted file mode 100644 index bec75c4b..00000000 --- a/assets/js/4700e527.291ea8d6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[317],{8141:s=>{s.exports=JSON.parse('{"label":"VTON","permalink":"/docs/tags/vton","allTagsPath":"/docs/tags","count":1,"items":[{"id":"use-cases/virtual-try-on","title":"Virtual Try-on","description":"BETA. Backend V1 feature. Price changes still pending.","permalink":"/docs/use-cases/virtual-try-on"}]}')}}]); \ No newline at end of file diff --git a/assets/js/4f2e3443.010514ba.js b/assets/js/4f2e3443.010514ba.js deleted file mode 100644 index 553b6947..00000000 --- a/assets/js/4f2e3443.010514ba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[6896],{8622:s=>{s.exports=JSON.parse('{"label":"virtual try-on","permalink":"/docs/tags/virtual-try-on","allTagsPath":"/docs/tags","count":1,"items":[{"id":"use-cases/virtual-try-on","title":"Virtual Try-on","description":"BETA. Backend V1 feature. Price changes still pending.","permalink":"/docs/use-cases/virtual-try-on"}]}')}}]); \ No newline at end of file diff --git a/assets/js/55960ee5.6703f87c.js b/assets/js/55960ee5.c252e31a.js similarity index 83% rename from assets/js/55960ee5.6703f87c.js rename to assets/js/55960ee5.c252e31a.js index fd0c4d3c..b7182ef5 100644 --- a/assets/js/55960ee5.6703f87c.js +++ b/assets/js/55960ee5.c252e31a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[4121],{8070:a=>{a.exports=JSON.parse('[{"label":"LoRA","permalink":"/docs/tags/lo-ra","count":1},{"label":"fine-tuning","permalink":"/docs/tags/fine-tuning","count":2},{"label":"style","permalink":"/docs/tags/style","count":2},{"label":"noise offset","permalink":"/docs/tags/noise-offset","count":1},{"label":"lineart","permalink":"/docs/tags/lineart","count":1},{"label":"oil painting","permalink":"/docs/tags/oil-painting","count":1},{"label":"prompt styles","permalink":"/docs/tags/prompt-styles","count":1},{"label":"templates","permalink":"/docs/tags/templates","count":1},{"label":"animated","permalink":"/docs/tags/animated","count":1},{"label":"comic book","permalink":"/docs/tags/comic-book","count":1},{"label":"line art","permalink":"/docs/tags/line-art","count":1},{"label":"enhance","permalink":"/docs/tags/enhance","count":1},{"label":"fantasy art","permalink":"/docs/tags/fantasy-art","count":1},{"label":"lowpoly","permalink":"/docs/tags/lowpoly","count":1},{"label":"neonpunk","permalink":"/docs/tags/neonpunk","count":1},{"label":"photographic","permalink":"/docs/tags/photographic","count":1},{"label":"upscaling","permalink":"/docs/tags/upscaling","count":1},{"label":"super-resolution","permalink":"/docs/tags/super-resolution","count":1},{"label":"image enhancement","permalink":"/docs/tags/image-enhancement","count":1},{"label":"creative upscaler","permalink":"/docs/tags/creative-upscaler","count":1},{"label":"clarity","permalink":"/docs/tags/clarity","count":1},{"label":"magnific","permalink":"/docs/tags/magnific","count":1},{"label":"headshots","permalink":"/docs/tags/headshots","count":1},{"label":"avatars","permalink":"/docs/tags/avatars","count":1},{"label":"social profiles","permalink":"/docs/tags/social-profiles","count":1},{"label":"virtual influencers","permalink":"/docs/tags/virtual-influencers","count":1},{"label":"AI photoshoot","permalink":"/docs/tags/ai-photoshoot","count":1},{"label":"AI headshots","permalink":"/docs/tags/ai-headshots","count":1},{"label":"AI avatars","permalink":"/docs/tags/ai-avatars","count":1},{"label":"ecommerce","permalink":"/docs/tags/ecommerce","count":1},{"label":"background replacement","permalink":"/docs/tags/background-replacement","count":1},{"label":"products","permalink":"/docs/tags/products","count":1},{"label":"Shopify","permalink":"/docs/tags/shopify","count":1},{"label":"photo optimization","permalink":"/docs/tags/photo-optimization","count":1},{"label":"product photo","permalink":"/docs/tags/product-photo","count":1},{"label":"virtual try-on","permalink":"/docs/tags/virtual-try-on","count":1},{"label":"fashion","permalink":"/docs/tags/fashion","count":1},{"label":"e-commerce","permalink":"/docs/tags/e-commerce","count":1},{"label":"clothing","permalink":"/docs/tags/clothing","count":1},{"label":"garment","permalink":"/docs/tags/garment","count":1},{"label":"backend-v1","permalink":"/docs/tags/backend-v-1","count":1},{"label":"VTON","permalink":"/docs/tags/vton","count":1}]')}}]); \ No newline at end of file +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[4121],{8070:a=>{a.exports=JSON.parse('[{"label":"LoRA","permalink":"/docs/tags/lo-ra","count":1},{"label":"fine-tuning","permalink":"/docs/tags/fine-tuning","count":2},{"label":"style","permalink":"/docs/tags/style","count":2},{"label":"noise offset","permalink":"/docs/tags/noise-offset","count":1},{"label":"lineart","permalink":"/docs/tags/lineart","count":1},{"label":"oil painting","permalink":"/docs/tags/oil-painting","count":1},{"label":"prompt styles","permalink":"/docs/tags/prompt-styles","count":1},{"label":"templates","permalink":"/docs/tags/templates","count":1},{"label":"animated","permalink":"/docs/tags/animated","count":1},{"label":"comic book","permalink":"/docs/tags/comic-book","count":1},{"label":"line art","permalink":"/docs/tags/line-art","count":1},{"label":"enhance","permalink":"/docs/tags/enhance","count":1},{"label":"fantasy art","permalink":"/docs/tags/fantasy-art","count":1},{"label":"lowpoly","permalink":"/docs/tags/lowpoly","count":1},{"label":"neonpunk","permalink":"/docs/tags/neonpunk","count":1},{"label":"photographic","permalink":"/docs/tags/photographic","count":1},{"label":"upscaling","permalink":"/docs/tags/upscaling","count":1},{"label":"super-resolution","permalink":"/docs/tags/super-resolution","count":1},{"label":"image enhancement","permalink":"/docs/tags/image-enhancement","count":1},{"label":"creative upscaler","permalink":"/docs/tags/creative-upscaler","count":1},{"label":"clarity","permalink":"/docs/tags/clarity","count":1},{"label":"magnific","permalink":"/docs/tags/magnific","count":1},{"label":"headshots","permalink":"/docs/tags/headshots","count":1},{"label":"avatars","permalink":"/docs/tags/avatars","count":1},{"label":"social profiles","permalink":"/docs/tags/social-profiles","count":1},{"label":"virtual influencers","permalink":"/docs/tags/virtual-influencers","count":1},{"label":"AI photoshoot","permalink":"/docs/tags/ai-photoshoot","count":1},{"label":"AI headshots","permalink":"/docs/tags/ai-headshots","count":1},{"label":"AI avatars","permalink":"/docs/tags/ai-avatars","count":1},{"label":"ecommerce","permalink":"/docs/tags/ecommerce","count":1},{"label":"background replacement","permalink":"/docs/tags/background-replacement","count":1},{"label":"products","permalink":"/docs/tags/products","count":1},{"label":"Shopify","permalink":"/docs/tags/shopify","count":1},{"label":"photo optimization","permalink":"/docs/tags/photo-optimization","count":1},{"label":"product photo","permalink":"/docs/tags/product-photo","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/57d2d9a8.266f9b21.js b/assets/js/57d2d9a8.266f9b21.js deleted file mode 100644 index 35e15297..00000000 --- a/assets/js/57d2d9a8.266f9b21.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[3911],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),l=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=l(e.components);return a.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=l(n),u=r,k=c["".concat(p,".").concat(u)]||c[u]||d[u]||o;return n?a.createElement(k,i(i({ref:t},m),{},{components:n})):a.createElement(k,i({ref:t},m))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var l=2;l{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(7462),r=(n(7294),n(3905));const o={},i="Prompt Masking",s={unversionedId:"features/prompt-masking",id:"features/prompt-masking",title:"Prompt Masking",description:"Prompt masking uses a short text to create a mask from the input image. The mask can then be used to inpaint parts of the image. Use the below parameters as part of the prompts to use auto-masking",source:"@site/docs/features/prompt-masking.md",sourceDirName:"features",slug:"/features/prompt-masking",permalink:"/docs/features/prompt-masking",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Multi-Person",permalink:"/docs/features/multiperson"},next:{title:"Styles",permalink:"/docs/features/styles"}},p={},l=[{value:"Syntax",id:"syntax",level:3},{value:"--mask_prompt",id:"--mask_prompt",level:4},{value:"--mask_negative",id:"--mask_negative",level:4},{value:"--mask_invert",id:"--mask_invert",level:4},{value:"--mask_dilate",id:"--mask_dilate",level:4},{value:"--hires_denoising_strength",id:"--hires_denoising_strength",level:4}],m={toc:l},c="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"prompt-masking"},"Prompt Masking"),(0,r.kt)("p",null,"Prompt masking uses a short text to create a mask from the input image. The mask can then be used to inpaint parts of the image. Use the below parameters as part of the prompts to use auto-masking"),(0,r.kt)("p",null,"Prompt masking can be used for ",(0,r.kt)("a",{parentName:"p",href:"/docs/use-cases/product-shots"},"product shots")," or ",(0,r.kt)("a",{parentName:"p",href:"/docs/use-cases/masked-portraits"},"Masked Portraits"),"."),(0,r.kt)("p",null,"See example prompts in the ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=mask_prompt"},"gallery")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"SDXL inpainting results are poor. Use SD15 models instead.")),(0,r.kt)("h3",{id:"syntax"},"Syntax"),(0,r.kt)("p",null,"Below parameters should be used as text inside the prompt text"),(0,r.kt)("h4",{id:"--mask_prompt"},(0,r.kt)("inlineCode",{parentName:"h4"},"--mask_prompt")),(0,r.kt)("p",null,"A short text like ",(0,r.kt)("inlineCode",{parentName:"p"},"foreground")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"face"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"head")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"person"),"."),(0,r.kt)("h4",{id:"--mask_negative"},(0,r.kt)("inlineCode",{parentName:"h4"},"--mask_negative")),(0,r.kt)("p",null,"A space separated list of words that should not appear in the mask. e.g: ",(0,r.kt)("inlineCode",{parentName:"p"},"clothes hat shoes")),(0,r.kt)("h4",{id:"--mask_invert"},(0,r.kt)("inlineCode",{parentName:"h4"},"--mask_invert")),(0,r.kt)("p",null,"Inverts the mask"),(0,r.kt)("h4",{id:"--mask_dilate"},(0,r.kt)("inlineCode",{parentName:"h4"},"--mask_dilate")),(0,r.kt)("p",null,"Dilates the mask. Negative values will erode the mask. Use percentage values like ",(0,r.kt)("inlineCode",{parentName:"p"},"-20%")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"-20")," if input image size is dynamic."),(0,r.kt)("h4",{id:"--hires_denoising_strength"},(0,r.kt)("inlineCode",{parentName:"h4"},"--hires_denoising_strength")),(0,r.kt)("p",null,"Denoising strength for hires-fix. Use hi-res fix with prompt-masking to smooth the colors and blending. Range 0-1. Default: 0.4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text"},"realistic digital painting, astronaut in a garden on a spring day, by martine johanna and simon stalenhag and chie yoshii and casey weldon and wlop, ornate, dynamic, particulate, rich colors, intricate, elegant, highly detailed, harpers bazaar art, fashion magazine, smooth, sharp focus, 8 k, octane rende --mask_prompt foreground --mask_negative clothes --mask_invert --mask_dilate -20 --hires_denoising_strength 0.1\nnum_images=1\nnegative_prompt=clay, text, watermark, padding, cropped, typography\nseed=\nsteps=30\ncfg_scale=\ncontrolnet=pose\ninput_image_url=https://sdbooth2-production.s3.amazonaws.com/esfd53purhhcijhmzka4c364x6lb\nmask_image_url=\ndenoising_strength=\ncontrolnet_conditioning_scale=\ncontrolnet_txt2img=false\nsuper_resolution=true\ninpaint_faces=false\nface_correct=true\nfilm_grain=false\nface_swap=false\nhires_fix=true\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=\nh=\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/57d2d9a8.4121712b.js b/assets/js/57d2d9a8.4121712b.js new file mode 100644 index 00000000..8f9aa16a --- /dev/null +++ b/assets/js/57d2d9a8.4121712b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[3911],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),l=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},m=function(e){var t=l(e.components);return a.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=l(n),u=r,k=c["".concat(p,".").concat(u)]||c[u]||d[u]||o;return n?a.createElement(k,i(i({ref:t},m),{},{components:n})):a.createElement(k,i({ref:t},m))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=u;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var l=2;l{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(7462),r=(n(7294),n(3905));const o={},i="Prompt Masking",s={unversionedId:"features/prompt-masking",id:"features/prompt-masking",title:"Prompt Masking",description:"Prompt masking uses a short text to create a mask from the input image. The mask can then be used to inpaint parts of the image. Use the below parameters as part of the prompts to use auto-masking",source:"@site/docs/features/prompt-masking.md",sourceDirName:"features",slug:"/features/prompt-masking",permalink:"/docs/features/prompt-masking",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"LoRA",permalink:"/docs/features/lora"},next:{title:"Styles",permalink:"/docs/features/styles"}},p={},l=[{value:"Syntax",id:"syntax",level:3},{value:"--mask_prompt",id:"--mask_prompt",level:4},{value:"--mask_negative",id:"--mask_negative",level:4},{value:"--mask_invert",id:"--mask_invert",level:4},{value:"--mask_dilate",id:"--mask_dilate",level:4},{value:"--hires_denoising_strength",id:"--hires_denoising_strength",level:4}],m={toc:l},c="wrapper";function d(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},m,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"prompt-masking"},"Prompt Masking"),(0,r.kt)("p",null,"Prompt masking uses a short text to create a mask from the input image. The mask can then be used to inpaint parts of the image. Use the below parameters as part of the prompts to use auto-masking"),(0,r.kt)("p",null,"Prompt masking can be used for ",(0,r.kt)("a",{parentName:"p",href:"/docs/use-cases/product-shots"},"product shots")," or ",(0,r.kt)("a",{parentName:"p",href:"/docs/use-cases/masked-portraits"},"Masked Portraits"),"."),(0,r.kt)("p",null,"See example prompts in the ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=mask_prompt"},"gallery")),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"SDXL inpainting results are poor. Use SD15 models instead.")),(0,r.kt)("h3",{id:"syntax"},"Syntax"),(0,r.kt)("p",null,"Below parameters should be used as text inside the prompt text"),(0,r.kt)("h4",{id:"--mask_prompt"},(0,r.kt)("inlineCode",{parentName:"h4"},"--mask_prompt")),(0,r.kt)("p",null,"A short text like ",(0,r.kt)("inlineCode",{parentName:"p"},"foreground")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"face"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"head")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"person"),"."),(0,r.kt)("h4",{id:"--mask_negative"},(0,r.kt)("inlineCode",{parentName:"h4"},"--mask_negative")),(0,r.kt)("p",null,"A space separated list of words that should not appear in the mask. e.g: ",(0,r.kt)("inlineCode",{parentName:"p"},"clothes hat shoes")),(0,r.kt)("h4",{id:"--mask_invert"},(0,r.kt)("inlineCode",{parentName:"h4"},"--mask_invert")),(0,r.kt)("p",null,"Inverts the mask"),(0,r.kt)("h4",{id:"--mask_dilate"},(0,r.kt)("inlineCode",{parentName:"h4"},"--mask_dilate")),(0,r.kt)("p",null,"Dilates the mask. Negative values will erode the mask. Use percentage values like ",(0,r.kt)("inlineCode",{parentName:"p"},"-20%")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"-20")," if input image size is dynamic."),(0,r.kt)("h4",{id:"--hires_denoising_strength"},(0,r.kt)("inlineCode",{parentName:"h4"},"--hires_denoising_strength")),(0,r.kt)("p",null,"Denoising strength for hires-fix. Use hi-res fix with prompt-masking to smooth the colors and blending. Range 0-1. Default: 0.4."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text"},"realistic digital painting, astronaut in a garden on a spring day, by martine johanna and simon stalenhag and chie yoshii and casey weldon and wlop, ornate, dynamic, particulate, rich colors, intricate, elegant, highly detailed, harpers bazaar art, fashion magazine, smooth, sharp focus, 8 k, octane rende --mask_prompt foreground --mask_negative clothes --mask_invert --mask_dilate -20 --hires_denoising_strength 0.1\nnum_images=1\nnegative_prompt=clay, text, watermark, padding, cropped, typography\nseed=\nsteps=30\ncfg_scale=\ncontrolnet=pose\ninput_image_url=https://sdbooth2-production.s3.amazonaws.com/esfd53purhhcijhmzka4c364x6lb\nmask_image_url=\ndenoising_strength=\ncontrolnet_conditioning_scale=\ncontrolnet_txt2img=false\nsuper_resolution=true\ninpaint_faces=false\nface_correct=true\nfilm_grain=false\nface_swap=false\nhires_fix=true\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=\nh=\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5a2a0040.631d6462.js b/assets/js/5a2a0040.631d6462.js deleted file mode 100644 index 98f8db1c..00000000 --- a/assets/js/5a2a0040.631d6462.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[3165],{4731:s=>{s.exports=JSON.parse('{"label":"backend-v1","permalink":"/docs/tags/backend-v-1","allTagsPath":"/docs/tags","count":1,"items":[{"id":"use-cases/virtual-try-on","title":"Virtual Try-on","description":"BETA. Backend V1 feature. Price changes still pending.","permalink":"/docs/use-cases/virtual-try-on"}]}')}}]); \ No newline at end of file diff --git a/assets/js/5b395111.02b3cb23.js b/assets/js/5b395111.02b3cb23.js deleted file mode 100644 index 6567c06a..00000000 --- a/assets/js/5b395111.02b3cb23.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[2920],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),s=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=s(n),m=o,f=u["".concat(p,".").concat(m)]||u[m]||d[m]||a;return n?r.createElement(f,l(l({ref:t},c),{},{components:n})):r.createElement(f,l({ref:t},c))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,l=new Array(a);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[u]="string"==typeof e?e:o,l[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const a={},l="Multi-Controlnet",i={unversionedId:"features/multi-controlnet",id:"features/multi-controlnet",title:"Multi-Controlnet",description:"Available only for Backend V1",source:"@site/docs/features/multi-controlnet.md",sourceDirName:"features",slug:"/features/multi-controlnet",permalink:"/docs/features/multi-controlnet",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"LoRA",permalink:"/docs/features/lora"},next:{title:"Multi-Pass inference",permalink:"/docs/features/multi-pass-inference"}},p={},s=[{value:"Syntax",id:"syntax",level:3},{value:"--controlnets",id:"--controlnets",level:4},{value:"--controlnet_weights",id:"--controlnet_weights",level:4},{value:"Example",id:"example",level:3}],c={toc:s},u="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(u,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"multi-controlnet"},"Multi-Controlnet"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"}," Available only for ",(0,o.kt)("a",{parentName:"strong",href:"/docs/features/backend-v1"},"Backend V1"))),(0,o.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr 1fr",gap:"1.5rem"}},(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Input image"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Input image",src:n(3566).Z,width:"1024",height:"1288"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Controlnet reference+pose"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Controlnet reference+pose",src:n(5205).Z,width:"1024",height:"1293"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Controlnet pose only"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Controlnet pose only",src:n(9436).Z,width:"1024",height:"1293"})))),(0,o.kt)("p",null,"Use multiple controlnet to get better consistency and precision."),(0,o.kt)("p",null,"See example prompts in the ",(0,o.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=controlnets"},"gallery"),". More about ",(0,o.kt)("a",{parentName:"p",href:"/docs/use-cases/controlnet"},"controlnet"),"."),(0,o.kt)("h3",{id:"syntax"},"Syntax"),(0,o.kt)("p",null,"Below parameters should be used as text inside the prompt text at the ",(0,o.kt)("strong",{parentName:"p"},"end")," of the prompt:"),(0,o.kt)("h4",{id:"--controlnets"},(0,o.kt)("inlineCode",{parentName:"h4"},"--controlnets")),(0,o.kt)("p",null,"Space separated list of controlnets.\nFor SD1.5: ",(0,o.kt)("inlineCode",{parentName:"p"},"pose"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"depth"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"mlsd"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"tile"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"canny"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"lineart"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"normal"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"faceid"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"reference"),"\nFor SDXL: ",(0,o.kt)("inlineCode",{parentName:"p"},"canny"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"pose"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"depth"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"tile"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"reference")),(0,o.kt)("h4",{id:"--controlnet_weights"},(0,o.kt)("inlineCode",{parentName:"h4"},"--controlnet_weights")),(0,o.kt)("p",null,"Space separated list of weights for each controlnet. Range 0-1. Default: 1"),(0,o.kt)("h3",{id:"example"},"Example"),(0,o.kt)("p",null,"Reference + Pose example from above"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-text"},"ohwx woman --controlnets pose reference --controlnet_weights 1 0.8\nnum_images=1\nnegative_prompt=\nseed=\nsteps=30\ncfg_scale=\ncontrolnet=pose\ninput_image_url=https://sdbooth2-production.s3.amazonaws.com/wh7m8lvx42dtz1n8av4fx37pb2jz\nmask_image_url=\ndenoising_strength=0.8\ncontrolnet_conditioning_scale=0.4\ncontrolnet_txt2img=false\nsuper_resolution=true\ninpaint_faces=true\nface_correct=false\nfilm_grain=true\nface_swap=true\nhires_fix=true\nbackend_version=1\nprompt_expansion=undefined\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=\nh=\n")))}d.isMDXComponent=!0},3566:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/multicontrolnet-input-image-d6e9d27f5983e2891f6cfd968d2606ab.jpeg"},9436:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/multicontrolnet-pose-only-749e87d50cb4b2dcb92b5a30658a2382.jpeg"},5205:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/multicontrolnet-reference-pose-0e21c6720606e3ed31b031cb7594b3ab.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/5cce4860.96570f42.js b/assets/js/5cce4860.96570f42.js deleted file mode 100644 index f1ff599b..00000000 --- a/assets/js/5cce4860.96570f42.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[2585],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var o=a.createContext({}),p=function(e){var t=a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c=function(e){var t=p(e.components);return a.createElement(o.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,o=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=r,g=u["".concat(o,".").concat(m)]||u[m]||d[m]||i;return n?a.createElement(g,s(s({ref:t},c),{},{components:n})):a.createElement(g,s({ref:t},c))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,s=new Array(i);s[0]=m;var l={};for(var o in t)hasOwnProperty.call(t,o)&&(l[o]=t[o]);l.originalType=e,l[u]="string"==typeof e?e:r,s[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=n(7462),r=(n(7294),n(3905));const i={},s="Multi-Pass inference",l={unversionedId:"features/multi-pass-inference",id:"features/multi-pass-inference",title:"Multi-Pass inference",description:"BETA",source:"@site/docs/features/multi-pass-inference.md",sourceDirName:"features",slug:"/features/multi-pass-inference",permalink:"/docs/features/multi-pass-inference",draft:!1,tags:[],version:"current",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Multi-Controlnet",permalink:"/docs/features/multi-controlnet"},next:{title:"Multi-Person",permalink:"/docs/features/multiperson"}},o={},p=[{value:"Overview",id:"overview",level:2},{value:"Advantages",id:"advantages",level:2},{value:"Syntax",id:"syntax",level:2},{value:"Example prompt",id:"example-prompt",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...i}=e;return(0,r.kt)(u,(0,a.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"multi-pass-inference"},"Multi-Pass inference"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"BETA")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr 1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Gym"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"source.png",src:n(7306).Z,width:"3072",height:"4608"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Hiking"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"generated.png",src:n(5605).Z,width:"3072",height:"4608"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Posh"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"generated.png",src:n(6149).Z,width:"1536",height:"2304"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Swimsuit"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"generated.png",src:n(2626).Z,width:"1536",height:"2304"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Fashion"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"source.png",src:n(5101).Z,width:"3072",height:"4608"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Starwars"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"generated.png",src:n(2092).Z,width:"2048",height:"3070"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Mech-warrior"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"generated.png",src:n(4406).Z,width:"3072",height:"4608"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Dreamy"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"generated.png",src:n(2056).Z,width:"3072",height:"4608"})))),(0,r.kt)("p",null,"See example prompts in the ",(0,r.kt)("a",{parentName:"p",href:"https://astria.ai/gallery?is_multiperson=true"},"gallery"),"."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"Multi-pass feature is a unique feature to the Astria platform allowing to generate a background image separately from the person thus offering a new level of high-quality results. "),(0,r.kt)("h2",{id:"advantages"},"Advantages"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Base prompt first pass allows to use the full breadth of an unmodified model. As such image compositions, fabrics and textures and details will show much better."),(0,r.kt)("li",{parentName:"ul"},"Separating the person from the background allows to prompt in more details on clothing, accessories and colors."),(0,r.kt)("li",{parentName:"ul"},"Better similarity to the original subject."),(0,r.kt)("li",{parentName:"ul"},"Multi-pass allows mixing SDXL model for base prompt and SD15 for person prompt.")),(0,r.kt)("h2",{id:"syntax"},"Syntax"),(0,r.kt)("p",null,"The prompt is divided by the ",(0,r.kt)("inlineCode",{parentName:"p"},"BREAK")," keyword such as:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"1st ",(0,r.kt)("strong",{parentName:"li"},"base prompt")," used to generate the background and scene. "),(0,r.kt)("li",{parentName:"ul"},"2nd ",(0,r.kt)("strong",{parentName:"li"},"common prompt")," that's concatenated to each person prompt and the base prompt to avoid repetition."),(0,r.kt)("li",{parentName:"ul"},"3rd ",(0,r.kt)("strong",{parentName:"li"},"person prompt")," Describe what the person is wearing or holding.")),(0,r.kt)("p",null,"To load the person checkpoint or LoRA use the ",(0,r.kt)("inlineCode",{parentName:"p"},"")," syntax."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Note that multi-pass works specifically well with ",(0,r.kt)("inlineCode",{parentName:"p"},"SD15")," models, while ",(0,r.kt)("inlineCode",{parentName:"p"},"SDXL")," models are not recommended.")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"")," syntax specifically for multi-pass inference can be used to also load a checkpoint and not just a LoRA.")),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/pricing"},"pricing")," for the cost of this feature."),(0,r.kt)("h2",{id:"example-prompt"},"Example prompt"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text"},"a model in preppy style, old money aesthetic, posh style, elite school stlye, luxurious style, gossip girl neo-prep style, ralph lauren style, country club style, ivy league style\n--tiled_upscale\nBREAK\nBREAK sks woman old money aesthetic, posh style, elite school, luxurious, gossip girl neo-prep style, ralph lauren style, ivy league style \nnum_images=4\nnegative_prompt=asian, , old, , multiple heads, 2 heads, elongated body, double image, 2 faces, multiple people, double head, , (nsfw), nsfw, nsfw, nsfw, nude, nude, nude, porn, porn, porn, naked, naked, nude, porn, black and white, monochrome, skin marks, skin lesions, pimples, , , , black and white, monochrome, greyscale, black and white, monochrome, greyscale, (black and white, monochrome, greyscale), frilly, frilled, lacy, ruffled, armpit hair, victorian, (sunglasses), (sunglasses), (deformed iris, deformed pupils, semi-realistic, cgi, 3d, render, sketch, cartoon, drawing, anime:1.4), text, close up, cropped, out of frame, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, extra fingers, mutated hands, poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, ex BREAK BREAK sunglasses, snow, skiing, ski resorts, snowboard\nseed=33504\nsteps=30\ncfg_scale=\ncontrolnet=\ninput_image_url=\nmask_image_url=\ndenoising_strength=\ncontrolnet_conditioning_scale=\ncontrolnet_txt2img=false\nsuper_resolution=true\ninpaint_faces=true\nface_correct=false\nfilm_grain=true\nface_swap=true\nhires_fix=false\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=512\nh=768\n")))}d.isMDXComponent=!0},7306:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/multipass-1-3fad6ed550153c10fa613cda7ce94924.jpeg"},5605:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/multipass-2-e292d27c95dd1cbda105cc0b51f780af.jpeg"},6149:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/multipass-3-83a8fa2dd107d0d25f4c8574df30e1eb.jpeg"},2626:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/multipass-4-bdd36b76b18a0a09e94b2745cfd4b182.jpeg"},5101:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/multipass-xl-1-199f63a9bca7524238c55680f6fbc708.jpeg"},2092:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/multipass-xl-2-22fd2a63e7df9c89239ae4056945a21c.jpeg"},4406:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/multipass-xl-3-afae0bb7b3da2b9a5d6ccd02e75e6095.jpeg"},2056:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/multipass-xl-4-7c04a47cf6322e0c81353d960c4a6a03.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/61744cd4.2f08408e.js b/assets/js/61744cd4.2f08408e.js new file mode 100644 index 00000000..094110c9 --- /dev/null +++ b/assets/js/61744cd4.2f08408e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[492],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),d=a,m=u["".concat(s,".").concat(d)]||u[d]||f[d]||o;return n?r.createElement(m,i(i({ref:t},c),{},{components:n})):r.createElement(m,i({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>f,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var r=n(7462),a=(n(7294),n(3905));const o={title:"LoRA",description:"LoRA",tags:["LoRA","fine-tuning","style","noise offset","lineart","oil painting"]},i="LoRA",l={unversionedId:"features/lora",id:"features/lora",title:"LoRA",description:"LoRA",source:"@site/docs/features/lora.md",sourceDirName:"features",slug:"/features/lora",permalink:"/docs/features/lora",draft:!1,tags:[{label:"LoRA",permalink:"/docs/tags/lo-ra"},{label:"fine-tuning",permalink:"/docs/tags/fine-tuning"},{label:"style",permalink:"/docs/tags/style"},{label:"noise offset",permalink:"/docs/tags/noise-offset"},{label:"lineart",permalink:"/docs/tags/lineart"},{label:"oil painting",permalink:"/docs/tags/oil-painting"}],version:"current",frontMatter:{title:"LoRA",description:"LoRA",tags:["LoRA","fine-tuning","style","noise offset","lineart","oil painting"]},sidebar:"tutorialSidebar",previous:{title:"Latent Consistency Models",permalink:"/docs/features/lcm"},next:{title:"Prompt Masking",permalink:"/docs/features/prompt-masking"}},s={},p=[],c={toc:p},u="wrapper";function f(e){let{components:t,...n}=e;return(0,a.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"lora"},"LoRA"),(0,a.kt)("p",null,"LoRA (low ranking adaption) is a type of model fine-tuning which takes an additional set of model weights (or parameters) and trains those on top while not changing the existing model. For this reason LoRA training is faster comparing to full checkpoint training as it only trains a small amount of weights comparing to the full model. Additionally, LoRA can be loaded on top of any base model, and multiple LoRA can be combined."),(0,a.kt)("p",null,"The LoRA ecosystem contains many different types of weight structures with different ranks. For this reason some LoRA might not be compatible in different UIs or platforms."),(0,a.kt)("p",null,"LoRAs can be used to enhance the quality of the image or deepen a specific style that is desired."),(0,a.kt)("p",null,"Astria provides a ",(0,a.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery/tunes?model_type=lora"},"LoRA gallery")," and allows importing external LoRAs. To use a LoRA go to the ",(0,a.kt)("a",{parentName:"p",href:"https://www.astria.ai/prompts"},"generate tab")," and use the LoRA syntax as such: ",(0,a.kt)("inlineCode",{parentName:"p"},""),". For example, a very common usage ",(0,a.kt)("inlineCode",{parentName:"p"},"")," - will load a Noise offset lora at strength 0.5 which will turn the image a bit darker and deepen the contrast."),(0,a.kt)("p",null,"See example prompts in the ",(0,a.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=lora"},"gallery")),(0,a.kt)("p",null,"You can also combine LoRAs as such:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"\n")),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"Note that LoRA can reduce the similarity of trained subjects when used together. To avoid this use low-strength for the lora.")),(0,a.kt)("p",null,"Some LoRAs may be trained on trigger words which are required to show in the prompt text. Check the LoRA information by clicking on the Website link and reading its docs and trigger words."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/61744cd4.6feb201b.js b/assets/js/61744cd4.6feb201b.js deleted file mode 100644 index 7a421bf1..00000000 --- a/assets/js/61744cd4.6feb201b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[492],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,m=u["".concat(s,".").concat(d)]||u[d]||f[d]||a;return n?r.createElement(m,i(i({ref:t},c),{},{components:n})):r.createElement(m,i({ref:t},c))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const a={title:"LoRA",description:"LoRA",tags:["LoRA","fine-tuning","style","noise offset","lineart","oil painting"]},i="LoRA",l={unversionedId:"features/lora",id:"features/lora",title:"LoRA",description:"LoRA",source:"@site/docs/features/lora.md",sourceDirName:"features",slug:"/features/lora",permalink:"/docs/features/lora",draft:!1,tags:[{label:"LoRA",permalink:"/docs/tags/lo-ra"},{label:"fine-tuning",permalink:"/docs/tags/fine-tuning"},{label:"style",permalink:"/docs/tags/style"},{label:"noise offset",permalink:"/docs/tags/noise-offset"},{label:"lineart",permalink:"/docs/tags/lineart"},{label:"oil painting",permalink:"/docs/tags/oil-painting"}],version:"current",frontMatter:{title:"LoRA",description:"LoRA",tags:["LoRA","fine-tuning","style","noise offset","lineart","oil painting"]},sidebar:"tutorialSidebar",previous:{title:"Latent Consistency Models",permalink:"/docs/features/lcm"},next:{title:"Multi-Controlnet",permalink:"/docs/features/multi-controlnet"}},s={},p=[],c={toc:p},u="wrapper";function f(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"lora"},"LoRA"),(0,o.kt)("p",null,"LoRA (low ranking adaption) is a type of model fine-tuning which takes an additional set of model weights (or parameters) and trains those on top while not changing the existing model. For this reason LoRA training is faster comparing to full checkpoint training as it only trains a small amount of weights comparing to the full model. Additionally, LoRA can be loaded on top of any base model, and multiple LoRA can be combined."),(0,o.kt)("p",null,"The LoRA ecosystem contains many different types of weight structures with different ranks. For this reason some LoRA might not be compatible in different UIs or platforms."),(0,o.kt)("p",null,"LoRAs can be used to enhance the quality of the image or deepen a specific style that is desired."),(0,o.kt)("p",null,"Astria provides a ",(0,o.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery/tunes?model_type=lora"},"LoRA gallery")," and allows importing external LoRAs. To use a LoRA go to the ",(0,o.kt)("a",{parentName:"p",href:"https://www.astria.ai/prompts"},"generate tab")," and use the LoRA syntax as such: ",(0,o.kt)("inlineCode",{parentName:"p"},""),". For example, a very common usage ",(0,o.kt)("inlineCode",{parentName:"p"},"")," - will load a Noise offset lora at strength 0.5 which will turn the image a bit darker and deepen the contrast."),(0,o.kt)("p",null,"See example prompts in the ",(0,o.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=lora"},"gallery")),(0,o.kt)("p",null,"You can also combine LoRAs as such:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"\n")),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"Note that LoRA can reduce the similarity of trained subjects when used together. To avoid this use low-strength for the lora.")),(0,o.kt)("p",null,"Some LoRAs may be trained on trigger words which are required to show in the prompt text. Check the LoRA information by clicking on the Website link and reading its docs and trigger words."))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6540dd0c.60431a59.js b/assets/js/6540dd0c.60431a59.js deleted file mode 100644 index cecd0a1f..00000000 --- a/assets/js/6540dd0c.60431a59.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[9075],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(n),m=r,h=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return n?a.createElement(h,i(i({ref:t},u),{},{components:n})):a.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{n.d(t,{Z:()=>i});var a=n(7294),r=n(6010);const o={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:n,className:i}=e;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,i),hidden:n},t)}},4866:(e,t,n)=>{n.d(t,{Z:()=>_});var a=n(7462),r=n(7294),o=n(6010),i=n(2466),s=n(6550),l=n(1980),p=n(7392),u=n(12);function c(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:a,default:r}}=e;return{value:t,label:n,attributes:a,default:r}}))}function d(e){const{values:t,children:n}=e;return(0,r.useMemo)((()=>{const e=t??c(n);return function(e){const t=(0,p.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function m(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:n}=e;const a=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(a.location.search);t.set(o,e),a.replace({...a.location,search:t.toString()})}),[o,a])]}function f(e){const{defaultValue:t,queryString:n=!1,groupId:a}=e,o=d(e),[i,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const a=n.find((e=>e.default))??n[0];if(!a)throw new Error("Unexpected error: 0 tabValues");return a.value}({defaultValue:t,tabValues:o}))),[l,p]=h({queryString:n,groupId:a}),[c,f]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[a,o]=(0,u.Nk)(n);return[a,(0,r.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:a}),g=(()=>{const e=l??c;return m({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),p(e),f(e)}),[p,f,o]),tabValues:o}}var g=n(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function k(e){let{className:t,block:n,selectedValue:s,selectValue:l,tabValues:p}=e;const u=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const t=e.currentTarget,n=u.indexOf(t),a=p[n].value;a!==s&&(c(t),l(a))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const n=u.indexOf(e.currentTarget)+1;t=u[n]??u[0];break}case"ArrowLeft":{const n=u.indexOf(e.currentTarget)-1;t=u[n]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":n},t)},p.map((e=>{let{value:t,label:n,attributes:i}=e;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>u.push(e),onKeyDown:m,onClick:d},i,{className:(0,o.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":s===t})}),n??t)})))}function w(e){let{lazy:t,children:n,selectedValue:a}=e;const o=(Array.isArray(n)?n:[n]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===a));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==a}))))}function y(e){const t=f(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",b.tabList)},r.createElement(k,(0,a.Z)({},e,t)),r.createElement(w,(0,a.Z)({},e,t)))}function _(e){const t=(0,g.Z)();return r.createElement(y,(0,a.Z)({key:String(t)},e))}},4336:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>p,toc:()=>c});var a=n(7462),r=(n(7294),n(3905)),o=n(4866),i=n(5162);const s={hide_table_of_contents:!0},l="FaceID",p={unversionedId:"features/faceid",id:"features/faceid",title:"FaceID",description:"BETA",source:"@site/docs/features/faceid.md",sourceDirName:"features",slug:"/features/faceid",permalink:"/docs/features/faceid",draft:!1,tags:[],version:"current",frontMatter:{hide_table_of_contents:!0},sidebar:"tutorialSidebar",previous:{title:"Face Swap",permalink:"/docs/features/face-swap"},next:{title:"Latent Consistency Models",permalink:"/docs/features/lcm"}},u={},c=[{value:"Overview",id:"overview",level:2},{value:"Usage",id:"usage",level:2},{value:"Notes",id:"notes",level:2},{value:"API",id:"api",level:2},{value:"Step 1: Create fine-tune",id:"step-1-create-fine-tune",level:3},{value:"POST /tunes",id:"post-tunes",level:4},{value:"Response",id:"response",level:4},{value:"Step 2: Create prompts",id:"step-2-create-prompts",level:3},{value:"POST /tunes/:id/prompts",id:"post-tunesidprompts",level:4}],d={toc:c},m="wrapper";function h(e){let{components:t,...s}=e;return(0,r.kt)(m,(0,a.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"faceid"},"FaceID"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"BETA")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Input images"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"source.png",src:n(3957).Z,width:"2000",height:"2203"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,(0,r.kt)("a",{href:"https://www.astria.ai/gallery?text=faceid"},"FaceID")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:n(5703).Z,width:"1044",height:"1556"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,(0,r.kt)("a",{href:"https://www.astria.ai/gallery?text=faceid_portrait"},"FaceID portrait")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:n(5753).Z,width:"1044",height:"1556"})))),(0,r.kt)("div",{className:"api-method"},(0,r.kt)("div",null,(0,r.kt)("p",null,"See example prompts in the ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=faceid"},"gallery")),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"FaceID is a model adapter allowing to generate image while preserving a person identity without fine-tuning. Input images can be as few as just one image. The adapter was trained on human faces and cannot be used for pets or other subjects."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Generate a placeholder fine-tune dataset which will contain the person images. The fine-tune will not go through training and will be immediately ready.\n",(0,r.kt)("img",{alt:"faceid-new-fine-tune.png",src:n(1158).Z,width:"740",height:"544"})),(0,r.kt)("li",{parentName:"ol"},"Generate the image using the FaceID adapter using a syntax similar to LoRA - ",(0,r.kt)("inlineCode",{parentName:"li"},"")," ")),(0,r.kt)("h2",{id:"notes"},"Notes"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Use ",(0,r.kt)("inlineCode",{parentName:"li"},"cfg_scale=3")),(0,r.kt)("li",{parentName:"ol"},"FaceID can work nicely together with ",(0,r.kt)("a",{parentName:"li",href:"/docs/features/face-swap"},"Face Swap")," to improve similarity."),(0,r.kt)("li",{parentName:"ol"},"Disable Face-Swap in case your prompt is animation style. Additionally, make sure to select an animated model from the ",(0,r.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes?title=pixar"},"gallery"),". "),(0,r.kt)("li",{parentName:"ol"},"For fast generation use the ",(0,r.kt)("a",{parentName:"li",href:"/docs/features/lcm"},"LCM schedulers"),"."),(0,r.kt)("li",{parentName:"ol"},"For realistic images, please consider enabling face-correct to improve facial features."),(0,r.kt)("li",{parentName:"ol"},"When creating a fine-tune: Base-model is only used as a default for UI generation but does not affect FaceID."),(0,r.kt)("li",{parentName:"ol"},"When creating a fine-tune: ",(0,r.kt)("inlineCode",{parentName:"li"},"steps")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"training_face_correct")," are not used for FaceID.")),(0,r.kt)("h2",{id:"api"},"API"),(0,r.kt)("p",null,"FaceID is an adapter loaded on top of a base model. As such the inference needs to take place on a model from the gallery.\nThe fine-tune's ",(0,r.kt)("inlineCode",{parentName:"p"},"trained_at")," is set upon creation and there is no training time. As such no callback is needed."),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"If you are receiving ",(0,r.kt)("inlineCode",{parentName:"p"},"422")," error ",(0,r.kt)("inlineCode",{parentName:"p"},"model_type=faceid is not supported. Use a checkpoint instead")," - Change the request URL to ",(0,r.kt)("a",{parentName:"p",href:"https://api.astria.ai/tunes/690204/prompts"},"https://api.astria.ai/tunes/690204/prompts")," with ",(0,r.kt)("inlineCode",{parentName:"p"},"690204")," as a hard-coded tune_id of Realistic Vision v5.1 from the gallery. See explanation above. "))),(0,r.kt)("div",null,(0,r.kt)("h3",{id:"step-1-create-fine-tune"},"Step 1: Create fine-tune"),(0,r.kt)("h4",{id:"post-tunes"},"POST /tunes"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# With images as multipart/form-data\n# Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n# https://www.astria.ai/gallery/tunes/690204/prompts\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[model_type]="faceid" \\\n -F tune[callback]="https://optional-callback-url.com/webhooks/astria?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F "tune[images][]=@1.jpg" \\\n -F "tune[images][]=@2.jpg" \\\n -F "tune[images][]=@3.jpg" \\\n -F "tune[images][]=@4.jpg"\n\n# With image_urls as form-data\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[model_type]="faceid" \\\n -F tune[callback]="https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg"\n \n# As JSON\ncat > data.json <<- EOM\n{\n "tune": {\n "title": "John Doe - UUID - 1234-6789-1234-56789",\n "name": "man",\n "model_type": "faceid",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1",\n "image_urls": [\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg"\n ]\n }\n}\nEOM\n\ncurl -X POST -H"Content-Type: application/json" -H "Authorization: Bearer $API_KEY" --data @data.json https://api.astria.ai/tunes \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"// NodeJS 16\n// With image_urls and fetch()\n// For NodeJS 18 - do NOT import the below as it is built-in\nimport fetch from \"node-fetch\";\n\nconst API_KEY = 'sd_XXXXXX';\nconst DOMAIN = 'https://api.astria.ai';\n\nfunction createTune() {\n let options = {\n method: 'POST',\n headers: { 'Authorization': 'Bearer ' + API_KEY, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tune: {\n \"title\": 'John Doe - UUID - 1234-6789-1234-56789',\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n \"base_tune_id\": 690204,\n \"name\": \"man\",\n \"model_type\": \"faceid\",\n \"image_urls\": [\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\"\n ]\n }\n })\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r))\n}\n\ncreateTune()\n\n\n/// With form-data, fetch()\n// For NodeJS 18 - do NOT import the two below as they are built-in\nimport fetch from \"node-fetch\";\nimport FormData from 'form-data';\nimport fs from 'fs';\n\nconst API_KEY = 'sd_XXXX';\nconst DOMAIN = 'https://api.astria.ai';\nfunction createTune() {\n let formData = new FormData();\n formData.append('tune[title]', 'John Doe - UUID - 1234-6789-1234-56789');\n formData.append('tune[model_type]', 'faceid');\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n formData.append('tune[base_tune_id]', 690204);\n formData.append('tune[name]', 'man');\n // Load all JPGs from ./samples directory and append to FormData\n let files = fs.readdirSync('./samples');\n files.forEach(file => {\n if(file.endsWith('.jpg')) {\n formData.append('tune[images][]', fs.createReadStream(`./samples/${file}`), file);\n }\n });\n formData.append('tune[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1');\n\n let options = {\n method: 'POST',\n headers: {\n 'Authorization': 'Bearer ' + API_KEY\n },\n body: formData\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r));\n}\n\ncreateTune();\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import requests\nheaders = {\'Authorization\': f\'Bearer {API_KEY}\'}\n\ndef load_image(file_path):\n with open(file_path, "rb") as f:\n return f.read()\n\n# Assuming `tune.images` are already defined in your context\n# If not, you should define them before the below code\n\nimage_data = load_image("assets/image.jpeg")\n\ndata = {\n "tune[title]": "John Doe - UUID - 1234-6789-1234-56789",\n "tune[name]": "man",\n "tune[base_tune_id]": 690204,\n "tune[model_type]": "faceid",\n "tune[token]": "ohwx"\n}\nfiles = []\n\nfor image in tune.images:\n image_data = load_image(image) # Assuming image is a file path\n files.append(("tune[images][]", image_data))\n\nAPI_URL = \'https://api.astria.ai/tunes\'\nresponse = requests.post(API_URL, data=data, files=files, headers=headers)\nresponse.raise_for_status()\n\n')))),(0,r.kt)("h4",{id:"response"},"Response"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'\n[\n {\n "id": 1,\n "title": "John Doe",\n "name": "woman",\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": false,\n "ckpt_url": null,\n "ckpt_urls": [],\n "eta": "2023-10-02T14:32:40.363Z",\n "trained_at": "2023-10-02T14:32:40.363Z",\n "started_training_at": "2023-10-02T14:32:05.229Z",\n "expires_at": "2023-11-01T14:32:40.363Z",\n "created_at": "2023-10-02T14:32:05.067Z",\n "branch": "sd15",\n "model_type": "faceid",\n "updated_at": "2023-10-02T14:32:40.363Z",\n "url": "https://www.astria.ai/tunes/788416.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n },\n {\n "id": 775459,\n "title": "Marry Jane",\n "name": null,\n "is_api": false,\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": null,\n "ckpt_url": "https://sdbooth2-production.s3.amazonaws.com/mock",\n "ckpt_urls": [\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ],\n "eta": "2023-09-23T16:07:49.137Z",\n "trained_at": "2023-09-23T16:07:49.137Z",\n "started_training_at": "2023-09-23T16:07:37.334Z",\n "expires_at": "2023-10-23T16:07:49.137Z",\n "created_at": "2023-09-23T16:07:36.606Z",\n "branch": "sd15",\n "model_type": "faceid",\n "updated_at": "2023-09-23T16:07:49.138Z",\n "url": "https://www.astria.ai/tunes/775459.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n }\n ]\n')),(0,r.kt)("h3",{id:"step-2-create-prompts"},"Step 2: Create prompts"),(0,r.kt)("h4",{id:"post-tunesidprompts"},"POST /tunes/:id/prompts"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes/690204/prompts \\\n -F prompt[text]=" woman trekking in the alps" \\\n -F prompt[negative_prompt]="" \\\n -F prompt[super_resolution]=true \\\n -F prompt[face_correct]=true \\\n -F prompt[face_swap]=true \\\n -F prompt[callback]="https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1" \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"const fetch = require('node-fetch');\nconst FormData = require('form-data');\n\n// Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\nconst API_URL = 'https://api.astria.ai/tunes/690204/prompts';\nconst API_KEY = 'YOUR_API_KEY'; // Replace with your actual API key\nconst headers = { Authorization: `Bearer ${API_KEY}` }\n\nconst form = new FormData();\nform.append('prompt[text]', ' woman trekking in the alps');\nform.append('prompt[negative_prompt]', '');\nform.append('prompt[super_resolution]', true);\nform.append('prompt[face_correct]', true);\nform.append('prompt[face_swap]', true);\nform.append('prompt[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1');\n\nfetch(API_URL, {\n method: 'POST',\n headers: headers,\n body: form\n}).then(response => response.json())\n\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import requests\n\n# Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\nAPI_URL = 'https://api.astria.ai/tunes/690204/prompts'\nAPI_KEY = 'YOUR_API_KEY' # Replace with your actual API key\n\nheaders = {\n 'Authorization': f'Bearer {API_KEY}'\n}\n\ndata = {\n 'prompt[text]': ' woman trekking in the alps',\n 'prompt[negative_prompt]': '',\n 'prompt[super_resolution]': True,\n 'prompt[face_correct]': True,\n 'prompt[face_swap]': True,\n 'prompt[callback]': 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1'\n}\nfiles = []\nfiles.append((f\"tune[prompts_attributes][{i}][input_image]\", load_image(prompt['input_image'])))\n\nresponse = requests.post(API_URL, headers=headers, data=data)\n")))))))}h.isMDXComponent=!0},1158:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/faceid-new-fine-tune-cc128107ac919832509e97a8ca45918b.png"},5703:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/faceid-output-8799f088b000a2adc1d94447c8a3e096.jpg"},5753:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/faceid-portrait-output-46eed1b926c1c5e3b055ad7ffb68676a.jpg"},3957:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/ai-photoshoot-input-3e9da4e3f5e050cbe4f36788a62521de.png"}}]); \ No newline at end of file diff --git a/assets/js/6540dd0c.f8679019.js b/assets/js/6540dd0c.f8679019.js new file mode 100644 index 00000000..6e1cbc3d --- /dev/null +++ b/assets/js/6540dd0c.f8679019.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[9075],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),m=r,h=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return a?n.createElement(h,i(i({ref:t},u),{},{components:a})):n.createElement(h,i({ref:t},u))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p{a.d(t,{Z:()=>i});var n=a(7294),r=a(6010);const o={tabItem:"tabItem_Ymn6"};function i(e){let{children:t,hidden:a,className:i}=e;return n.createElement("div",{role:"tabpanel",className:(0,r.Z)(o.tabItem,i),hidden:a},t)}},4866:(e,t,a)=>{a.d(t,{Z:()=>_});var n=a(7462),r=a(7294),o=a(6010),i=a(2466),s=a(6550),l=a(1980),p=a(7392),u=a(12);function c(e){return function(e){return r.Children.map(e,(e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)}))?.filter(Boolean)??[]}(e).map((e=>{let{props:{value:t,label:a,attributes:n,default:r}}=e;return{value:t,label:a,attributes:n,default:r}}))}function d(e){const{values:t,children:a}=e;return(0,r.useMemo)((()=>{const e=t??c(a);return function(e){const t=(0,p.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,a])}function m(e){let{value:t,tabValues:a}=e;return a.some((e=>e.value===t))}function h(e){let{queryString:t=!1,groupId:a}=e;const n=(0,s.k6)(),o=function(e){let{queryString:t=!1,groupId:a}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!a)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return a??null}({queryString:t,groupId:a});return[(0,l._X)(o),(0,r.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(n.location.search);t.set(o,e),n.replace({...n.location,search:t.toString()})}),[o,n])]}function f(e){const{defaultValue:t,queryString:a=!1,groupId:n}=e,o=d(e),[i,s]=(0,r.useState)((()=>function(e){let{defaultValue:t,tabValues:a}=e;if(0===a.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!m({value:t,tabValues:a}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${a.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const n=a.find((e=>e.default))??a[0];if(!n)throw new Error("Unexpected error: 0 tabValues");return n.value}({defaultValue:t,tabValues:o}))),[l,p]=h({queryString:a,groupId:n}),[c,f]=function(e){let{groupId:t}=e;const a=function(e){return e?`docusaurus.tab.${e}`:null}(t),[n,o]=(0,u.Nk)(a);return[n,(0,r.useCallback)((e=>{a&&o.set(e)}),[a,o])]}({groupId:n}),g=(()=>{const e=l??c;return m({value:e,tabValues:o})?e:null})();(0,r.useLayoutEffect)((()=>{g&&s(g)}),[g]);return{selectedValue:i,selectValue:(0,r.useCallback)((e=>{if(!m({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);s(e),p(e),f(e)}),[p,f,o]),tabValues:o}}var g=a(2389);const b={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};function k(e){let{className:t,block:a,selectedValue:s,selectValue:l,tabValues:p}=e;const u=[],{blockElementScrollPositionUntilNextRender:c}=(0,i.o5)(),d=e=>{const t=e.currentTarget,a=u.indexOf(t),n=p[a].value;n!==s&&(c(t),l(n))},m=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const a=u.indexOf(e.currentTarget)+1;t=u[a]??u[0];break}case"ArrowLeft":{const a=u.indexOf(e.currentTarget)-1;t=u[a]??u[u.length-1];break}}t?.focus()};return r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,o.Z)("tabs",{"tabs--block":a},t)},p.map((e=>{let{value:t,label:a,attributes:i}=e;return r.createElement("li",(0,n.Z)({role:"tab",tabIndex:s===t?0:-1,"aria-selected":s===t,key:t,ref:e=>u.push(e),onKeyDown:m,onClick:d},i,{className:(0,o.Z)("tabs__item",b.tabItem,i?.className,{"tabs__item--active":s===t})}),a??t)})))}function w(e){let{lazy:t,children:a,selectedValue:n}=e;const o=(Array.isArray(a)?a:[a]).filter(Boolean);if(t){const e=o.find((e=>e.props.value===n));return e?(0,r.cloneElement)(e,{className:"margin-top--md"}):null}return r.createElement("div",{className:"margin-top--md"},o.map(((e,t)=>(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==n}))))}function y(e){const t=f(e);return r.createElement("div",{className:(0,o.Z)("tabs-container",b.tabList)},r.createElement(k,(0,n.Z)({},e,t)),r.createElement(w,(0,n.Z)({},e,t)))}function _(e){const t=(0,g.Z)();return r.createElement(y,(0,n.Z)({key:String(t)},e))}},4336:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>p,toc:()=>c});var n=a(7462),r=(a(7294),a(3905)),o=a(4866),i=a(5162);const s={hide_table_of_contents:!0},l="FaceID",p={unversionedId:"features/faceid",id:"features/faceid",title:"FaceID",description:"BETA",source:"@site/docs/features/faceid.md",sourceDirName:"features",slug:"/features/faceid",permalink:"/docs/features/faceid",draft:!1,tags:[],version:"current",frontMatter:{hide_table_of_contents:!0},sidebar:"tutorialSidebar",previous:{title:"Face Swap",permalink:"/docs/features/face-swap"},next:{title:"Latent Consistency Models",permalink:"/docs/features/lcm"}},u={},c=[{value:"Overview",id:"overview",level:2},{value:"Usage",id:"usage",level:2},{value:"Notes",id:"notes",level:2},{value:"API",id:"api",level:2},{value:"Step 1: Create fine-tune",id:"step-1-create-fine-tune",level:3},{value:"POST /tunes",id:"post-tunes",level:4},{value:"Response",id:"response",level:4},{value:"Step 2: Create prompts",id:"step-2-create-prompts",level:3},{value:"POST /tunes/:id/prompts",id:"post-tunesidprompts",level:4}],d={toc:c},m="wrapper";function h(e){let{components:t,...s}=e;return(0,r.kt)(m,(0,n.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"faceid"},"FaceID"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"BETA")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Input images"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"source.png",src:a(6973).Z,width:"525",height:"671"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,(0,r.kt)("a",{href:"https://www.astria.ai/gallery?text=faceid"},"FaceID")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(8167).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(6361).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(1250).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(7432).Z,width:"1024",height:"1536"}))))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,(0,r.kt)("a",{href:"https://www.astria.ai/gallery?text=faceid_portrait"},"FaceID portrait")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(3257).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(6113).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(9814).Z,width:"1024",height:"1536"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,(0,r.kt)("img",{alt:"faceid-output.png",src:a(8497).Z,width:"1024",height:"1536"})))))),(0,r.kt)("div",{className:"api-method"},(0,r.kt)("div",null,(0,r.kt)("p",null,"See example prompts in the ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=faceid"},"gallery")),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"FaceID is a model adapter allowing to generate image while preserving a person identity without fine-tuning. Input images can be as few as just one image. The adapter was trained on human faces and cannot be used for pets or other subjects."),(0,r.kt)("h2",{id:"usage"},"Usage"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Generate a placeholder fine-tune dataset which will contain the person images. The fine-tune will not go through training and will be immediately ready.\n",(0,r.kt)("img",{alt:"faceid-new-fine-tune.png",src:a(1158).Z,width:"740",height:"544"})),(0,r.kt)("li",{parentName:"ol"},"Generate the image using the FaceID adapter using a syntax similar to LoRA - ",(0,r.kt)("inlineCode",{parentName:"li"},"")," ")),(0,r.kt)("h2",{id:"notes"},"Notes"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Use ",(0,r.kt)("inlineCode",{parentName:"li"},"cfg_scale=3")),(0,r.kt)("li",{parentName:"ol"},"FaceID can work nicely together with ",(0,r.kt)("a",{parentName:"li",href:"/docs/features/face-swap"},"Face Swap")," to improve similarity."),(0,r.kt)("li",{parentName:"ol"},"Disable Face-Swap in case your prompt is animation style. Additionally, make sure to select an animated model from the ",(0,r.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes?title=pixar"},"gallery"),". "),(0,r.kt)("li",{parentName:"ol"},"For fast generation use the ",(0,r.kt)("a",{parentName:"li",href:"/docs/features/lcm"},"LCM schedulers"),"."),(0,r.kt)("li",{parentName:"ol"},"For realistic images, please consider enabling face-correct to improve facial features."),(0,r.kt)("li",{parentName:"ol"},"When creating a fine-tune: Base-model is only used as a default for UI generation but does not affect FaceID."),(0,r.kt)("li",{parentName:"ol"},"When creating a fine-tune: ",(0,r.kt)("inlineCode",{parentName:"li"},"steps")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"training_face_correct")," are not used for FaceID.")),(0,r.kt)("h2",{id:"api"},"API"),(0,r.kt)("p",null,"FaceID is an adapter loaded on top of a base model. As such the inference needs to take place on a model from the gallery.\nThe fine-tune's ",(0,r.kt)("inlineCode",{parentName:"p"},"trained_at")," is set upon creation and there is no training time. As such no callback is needed."),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"If you are receiving ",(0,r.kt)("inlineCode",{parentName:"p"},"422")," error ",(0,r.kt)("inlineCode",{parentName:"p"},"model_type=faceid is not supported. Use a checkpoint instead")," - Change the request URL to ",(0,r.kt)("a",{parentName:"p",href:"https://api.astria.ai/tunes/690204/prompts"},"https://api.astria.ai/tunes/690204/prompts")," with ",(0,r.kt)("inlineCode",{parentName:"p"},"690204")," as a hard-coded tune_id of Realistic Vision v5.1 from the gallery. See explanation above. "))),(0,r.kt)("div",null,(0,r.kt)("h3",{id:"step-1-create-fine-tune"},"Step 1: Create fine-tune"),(0,r.kt)("h4",{id:"post-tunes"},"POST /tunes"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# With images as multipart/form-data\n# Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n# https://www.astria.ai/gallery/tunes/690204/prompts\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[model_type]="faceid" \\\n -F tune[callback]="https://optional-callback-url.com/webhooks/astria?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F "tune[images][]=@1.jpg" \\\n -F "tune[images][]=@2.jpg" \\\n -F "tune[images][]=@3.jpg" \\\n -F "tune[images][]=@4.jpg"\n\n# With image_urls as form-data\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes \\\n -F tune[title]="John Doe - UUID - 1234-6789-1234-56789" \\\n -F tune[name]=man \\\n -F tune[model_type]="faceid" \\\n -F tune[callback]="https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1" \\\n -F tune[base_tune_id]=690204 \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg" \\\n -F "tune[image_urls][]=https://i.imgur.com/HLHBnl9.jpeg"\n \n# As JSON\ncat > data.json <<- EOM\n{\n "tune": {\n "title": "John Doe - UUID - 1234-6789-1234-56789",\n "name": "man",\n "model_type": "faceid",\n "callback": "https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1",\n "image_urls": [\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg",\n "https://i.imgur.com/HLHBnl9.jpeg"\n ]\n }\n}\nEOM\n\ncurl -X POST -H"Content-Type: application/json" -H "Authorization: Bearer $API_KEY" --data @data.json https://api.astria.ai/tunes \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"// NodeJS 16\n// With image_urls and fetch()\n// For NodeJS 18 - do NOT import the below as it is built-in\nimport fetch from \"node-fetch\";\n\nconst API_KEY = 'sd_XXXXXX';\nconst DOMAIN = 'https://api.astria.ai';\n\nfunction createTune() {\n let options = {\n method: 'POST',\n headers: { 'Authorization': 'Bearer ' + API_KEY, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n tune: {\n \"title\": 'John Doe - UUID - 1234-6789-1234-56789',\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n \"base_tune_id\": 690204,\n \"name\": \"man\",\n \"model_type\": \"faceid\",\n \"image_urls\": [\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\",\n \"https://i.imgur.com/HLHBnl9.jpeg\"\n ]\n }\n })\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r))\n}\n\ncreateTune()\n\n\n/// With form-data, fetch()\n// For NodeJS 18 - do NOT import the two below as they are built-in\nimport fetch from \"node-fetch\";\nimport FormData from 'form-data';\nimport fs from 'fs';\n\nconst API_KEY = 'sd_XXXX';\nconst DOMAIN = 'https://api.astria.ai';\nfunction createTune() {\n let formData = new FormData();\n formData.append('tune[title]', 'John Doe - UUID - 1234-6789-1234-56789');\n formData.append('tune[model_type]', 'faceid');\n // Hard coded tune id of Realistic Vision v5.1 from the gallery - https://www.astria.ai/gallery/tunes \n // https://www.astria.ai/gallery/tunes/690204/prompts\n formData.append('tune[base_tune_id]', 690204);\n formData.append('tune[name]', 'man');\n // Load all JPGs from ./samples directory and append to FormData\n let files = fs.readdirSync('./samples');\n files.forEach(file => {\n if(file.endsWith('.jpg')) {\n formData.append('tune[images][]', fs.createReadStream(`./samples/${file}`), file);\n }\n });\n formData.append('tune[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?user_id=1&tune_id=1');\n\n let options = {\n method: 'POST',\n headers: {\n 'Authorization': 'Bearer ' + API_KEY\n },\n body: formData\n };\n return fetch(DOMAIN + '/tunes', options)\n .then(r => r.json())\n .then(r => console.log(r));\n}\n\ncreateTune();\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},'import requests\nheaders = {\'Authorization\': f\'Bearer {API_KEY}\'}\n\ndef load_image(file_path):\n with open(file_path, "rb") as f:\n return f.read()\n\n# Assuming `tune.images` are already defined in your context\n# If not, you should define them before the below code\n\nimage_data = load_image("assets/image.jpeg")\n\ndata = {\n "tune[title]": "John Doe - UUID - 1234-6789-1234-56789",\n "tune[name]": "man",\n "tune[base_tune_id]": 690204,\n "tune[model_type]": "faceid",\n "tune[token]": "ohwx"\n}\nfiles = []\n\nfor image in tune.images:\n image_data = load_image(image) # Assuming image is a file path\n files.append(("tune[images][]", image_data))\n\nAPI_URL = \'https://api.astria.ai/tunes\'\nresponse = requests.post(API_URL, data=data, files=files, headers=headers)\nresponse.raise_for_status()\n\n')))),(0,r.kt)("h4",{id:"response"},"Response"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'\n[\n {\n "id": 1,\n "title": "John Doe",\n "name": "woman",\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": false,\n "ckpt_url": null,\n "ckpt_urls": [],\n "eta": "2023-10-02T14:32:40.363Z",\n "trained_at": "2023-10-02T14:32:40.363Z",\n "started_training_at": "2023-10-02T14:32:05.229Z",\n "expires_at": "2023-11-01T14:32:40.363Z",\n "created_at": "2023-10-02T14:32:05.067Z",\n "branch": "sd15",\n "model_type": "faceid",\n "updated_at": "2023-10-02T14:32:40.363Z",\n "url": "https://www.astria.ai/tunes/788416.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n },\n {\n "id": 775459,\n "title": "Marry Jane",\n "name": null,\n "is_api": false,\n "token": "ohwx",\n "base_tune_id": null,\n "args": null,\n "steps": null,\n "face_crop": null,\n "training_face_correct": null,\n "ckpt_url": "https://sdbooth2-production.s3.amazonaws.com/mock",\n "ckpt_urls": [\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ],\n "eta": "2023-09-23T16:07:49.137Z",\n "trained_at": "2023-09-23T16:07:49.137Z",\n "started_training_at": "2023-09-23T16:07:37.334Z",\n "expires_at": "2023-10-23T16:07:49.137Z",\n "created_at": "2023-09-23T16:07:36.606Z",\n "branch": "sd15",\n "model_type": "faceid",\n "updated_at": "2023-09-23T16:07:49.138Z",\n "url": "https://www.astria.ai/tunes/775459.json",\n "orig_images": [\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock",\n "https://sdbooth2-production.s3.amazonaws.com/mock"\n ]\n }\n ]\n')),(0,r.kt)("h3",{id:"step-2-create-prompts"},"Step 2: Create prompts"),(0,r.kt)("h4",{id:"post-tunesidprompts"},"POST /tunes/:id/prompts"),(0,r.kt)(o.Z,{groupId:"lang",mdxType:"Tabs"},(0,r.kt)(i.Z,{value:"curl",label:"cURL",default:!0,mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash",metastring:"showLineNumbers",showLineNumbers:!0},'# Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\ncurl -X POST -H "Authorization: Bearer $API_KEY" https://api.astria.ai/tunes/690204/prompts \\\n -F prompt[text]=" woman trekking in the alps" \\\n -F prompt[negative_prompt]="" \\\n -F prompt[super_resolution]=true \\\n -F prompt[face_correct]=true \\\n -F prompt[face_swap]=true \\\n -F prompt[callback]="https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1" \n'))),(0,r.kt)(i.Z,{value:"javascript",label:"Node.js",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-javascript"},"const fetch = require('node-fetch');\nconst FormData = require('form-data');\n\n// Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\nconst API_URL = 'https://api.astria.ai/tunes/690204/prompts';\nconst API_KEY = 'YOUR_API_KEY'; // Replace with your actual API key\nconst headers = { Authorization: `Bearer ${API_KEY}` }\n\nconst form = new FormData();\nform.append('prompt[text]', ' woman trekking in the alps');\nform.append('prompt[negative_prompt]', '');\nform.append('prompt[super_resolution]', true);\nform.append('prompt[face_correct]', true);\nform.append('prompt[face_swap]', true);\nform.append('prompt[callback]', 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1');\n\nfetch(API_URL, {\n method: 'POST',\n headers: headers,\n body: form\n}).then(response => response.json())\n\n\n"))),(0,r.kt)(i.Z,{value:"python",label:"Python",mdxType:"TabItem"},(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-python"},"import requests\n\n# Note the hard-coded 690204 which is the tune_id of Realistic Vision v5.1 from the gallery\nAPI_URL = 'https://api.astria.ai/tunes/690204/prompts'\nAPI_KEY = 'YOUR_API_KEY' # Replace with your actual API key\n\nheaders = {\n 'Authorization': f'Bearer {API_KEY}'\n}\n\ndata = {\n 'prompt[text]': ' woman trekking in the alps',\n 'prompt[negative_prompt]': '',\n 'prompt[super_resolution]': True,\n 'prompt[face_correct]': True,\n 'prompt[face_swap]': True,\n 'prompt[callback]': 'https://optional-callback-url.com/to-your-service-when-ready?prompt_id=1'\n}\nfiles = []\nfiles.append((f\"tune[prompts_attributes][{i}][input_image]\", load_image(prompt['input_image'])))\n\nresponse = requests.post(API_URL, headers=headers, data=data)\n")))))))}h.isMDXComponent=!0},1158:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-new-fine-tune-cc128107ac919832509e97a8ca45918b.png"},8167:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output1-aa799eba49b320b187e29cec267a3258.jpg"},6361:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output2-e44e20e05a5a6cffaba2d97ee9ac1947.jpg"},1250:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output3-b4745421562fc7a28a7be8eb46f4853e.jpg"},7432:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-output4-8e3f3c0ebd0449c2adf1d12015229097.jpg"},3257:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output1-8c5ea4967162c608b58d6b56dcb60cce.jpg"},6113:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output2-890a11d787c8827591af150362b1af05.jpg"},9814:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output3-92853d1bee638e8a6785ae5961ef96b8.jpg"},8497:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/faceid-portrait-output4-4d41c4f7de56b0befb40e69b89bc0190.jpg"},6973:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/ai-photoshoot-input-66e224267554a6902bfaa5e6103ae27f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.b985f437.js b/assets/js/935f2afb.b985f437.js new file mode 100644 index 00000000..0869905d --- /dev/null +++ b/assets/js/935f2afb.b985f437.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[2197],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Changes","href":"/docs/changes","docId":"changes"},{"type":"category","label":"Use cases","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"AI Photoshoot - fine-tuning for professional headshots","href":"/docs/use-cases/ai-photoshoot","docId":"use-cases/ai-photoshoot"},{"type":"link","label":"Fine-tuning guide","href":"/docs/use-cases/finetuning-guide","docId":"use-cases/finetuning-guide"},{"type":"link","label":"SDXL training","href":"/docs/use-cases/sdxl-training","docId":"use-cases/sdxl-training"},{"type":"link","label":"Controlnet","href":"/docs/use-cases/controlnet","docId":"use-cases/controlnet"},{"type":"link","label":"Inpainting and masking","href":"/docs/use-cases/inpainting-and-masking","docId":"use-cases/inpainting-and-masking"},{"type":"link","label":"Product placement","href":"/docs/use-cases/product-shots","docId":"use-cases/product-shots"},{"type":"link","label":"Toonify","href":"/docs/use-cases/toonify","docId":"use-cases/toonify"},{"type":"link","label":"Video Generation","href":"/docs/use-cases/video-generation","docId":"use-cases/video-generation"},{"type":"link","label":"FAQ","href":"/docs/use-cases/faq","docId":"use-cases/faq"},{"type":"link","label":"Masked portraits","href":"/docs/use-cases/masked-portraits","docId":"use-cases/masked-portraits"},{"type":"link","label":"AI Interior Design","href":"/docs/use-cases/room-redesign","docId":"use-cases/room-redesign"},{"type":"link","label":"Upscale","href":"/docs/use-cases/upscale","docId":"use-cases/upscale"}],"href":"/docs/category/use-cases"},{"type":"category","label":"Features","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Backend V1","href":"/docs/features/backend-v1","docId":"features/backend-v1"},{"type":"link","label":"Face inpainting","href":"/docs/features/face-inpainting","docId":"features/face-inpainting"},{"type":"link","label":"Face Swap","href":"/docs/features/face-swap","docId":"features/face-swap"},{"type":"link","label":"FaceID","href":"/docs/features/faceid","docId":"features/faceid"},{"type":"link","label":"Latent Consistency Models","href":"/docs/features/lcm","docId":"features/lcm"},{"type":"link","label":"LoRA","href":"/docs/features/lora","docId":"features/lora"},{"type":"link","label":"Prompt Masking","href":"/docs/features/prompt-masking","docId":"features/prompt-masking"},{"type":"link","label":"Styles","href":"/docs/features/styles","docId":"features/styles"},{"type":"link","label":"Tiled upscale","href":"/docs/features/tiled-upscale","docId":"features/tiled-upscale"}],"href":"/docs/category/features"},{"type":"category","label":"API","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Overview","href":"/docs/api/overview","docId":"api/overview"},{"type":"category","label":"Tunes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The tune object","href":"/docs/api/tune/","docId":"api/tune/tune"},{"type":"link","label":"Create a tune","href":"/docs/api/tune/create","docId":"api/tune/create"},{"type":"link","label":"Retrieve a tune","href":"/docs/api/tune/retrieve","docId":"api/tune/retrieve"},{"type":"link","label":"List all tunes","href":"/docs/api/tune/list","docId":"api/tune/list"}],"href":"/docs/category/tunes"},{"type":"category","label":"Prompts","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The prompt object","href":"/docs/api/prompt/prompt","docId":"api/prompt/prompt"},{"type":"link","label":"Create a prompt","href":"/docs/api/prompt/create","docId":"api/prompt/create"},{"type":"link","label":"Retrieve a prompt","href":"/docs/api/prompt/retrieve","docId":"api/prompt/retrieve"},{"type":"link","label":"List all prompts","href":"/docs/api/prompt/list","docId":"api/prompt/list"}],"href":"/docs/category/prompts"},{"type":"category","label":"Packs","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The pack object","href":"/docs/api/pack/pack","docId":"api/pack/pack"},{"type":"link","label":"List all packs","href":"/docs/api/pack/list","docId":"api/pack/list"},{"type":"category","label":"Pack tunes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Create a tune from a pack","href":"/docs/api/pack/tunes/create","docId":"api/pack/tunes/create"}],"href":"/docs/category/pack-tunes"}],"href":"/docs/category/packs"},{"type":"category","label":"Likes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Create a like","href":"/docs/api/like/create","docId":"api/like/create"},{"type":"link","label":"Delete a like","href":"/docs/api/like/delete","docId":"api/like/delete"}],"href":"/docs/category/likes"},{"type":"link","label":"SDXL API usage","href":"/docs/api/sdxl-api","docId":"api/sdxl-api"}],"href":"/docs/category/api"},{"type":"category","label":"API links","items":[{"type":"link","label":"Headshots Opens-source app","href":"https://github.com/astriaai/headshots-starter"},{"type":"link","label":"Python SDK","href":"https://github.com/aronbrand/astriaclient"},{"type":"link","label":"Postman","href":"https://documenter.getpostman.com/view/273068/2s8YmSrfgD"},{"type":"link","label":"Bubble.io Plugin","href":"https://bubble.io/plugin/astria-api---stable-diffusion-1674501522435x732640117689417700"},{"type":"link","label":"API key","href":"https://www.astria.ai/users/edit#api"}],"collapsed":false,"collapsible":true}]},"docs":{"api/like/create":{"id":"api/like/create","title":"Create a like","description":"Adds a like to a prompt.","sidebar":"tutorialSidebar"},"api/like/delete":{"id":"api/like/delete","title":"Delete a like","description":"Delete a like from a prompt.","sidebar":"tutorialSidebar"},"api/overview":{"id":"api/overview","title":"Overview","description":"Billing","sidebar":"tutorialSidebar"},"api/pack/list":{"id":"api/pack/list","title":"List all packs","description":"Parameters","sidebar":"tutorialSidebar"},"api/pack/pack":{"id":"api/pack/pack","title":"The pack object","description":"A pack represents a list of grouped prompts, as well as the fine-tune to be created from the training images.","sidebar":"tutorialSidebar"},"api/pack/tunes/create":{"id":"api/pack/tunes/create","title":"Create a tune from a pack","description":"Creates a new fine-tune model from training images according to the pack base tune id, model type and adds prompts to generate images.","sidebar":"tutorialSidebar"},"api/prompt/create":{"id":"api/prompt/create","title":"Create a prompt","description":"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images.","sidebar":"tutorialSidebar"},"api/prompt/list":{"id":"api/prompt/list","title":"List all prompts","description":"Parameters","sidebar":"tutorialSidebar"},"api/prompt/prompt":{"id":"api/prompt/prompt","title":"The prompt object","description":"The prompt object is usually used as a nested resource of tune as prompts are generated using a fine-tune model. A prompt is a text that is used to generate images using a fine-tune model. The prompt object contains the generated images.","sidebar":"tutorialSidebar"},"api/prompt/retrieve":{"id":"api/prompt/retrieve","title":"Retrieve a prompt","description":"Parameters","sidebar":"tutorialSidebar"},"api/sdxl-api":{"id":"api/sdxl-api","title":"SDXL API usage","description":"For general tips on SDXL training and inference, see SDXL training","sidebar":"tutorialSidebar"},"api/tune/create":{"id":"api/tune/create","title":"Create a tune","description":"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images.","sidebar":"tutorialSidebar"},"api/tune/list":{"id":"api/tune/list","title":"List all tunes","description":"Parameters","sidebar":"tutorialSidebar"},"api/tune/retrieve":{"id":"api/tune/retrieve","title":"Retrieve a tune","description":"Parameters","sidebar":"tutorialSidebar"},"api/tune/tune":{"id":"api/tune/tune","title":"The tune object","description":"Tune (or Fine-tune) represents a model that is created using training images to learn a new concept or subject. At its core a fine-tune is a neural-network weights file (usually weights 2GB) and contains the information of the trained images.","sidebar":"tutorialSidebar"},"changes":{"id":"changes","title":"Changes","description":"* 2024-07-29 Added Styles option for prompt","sidebar":"tutorialSidebar"},"features/backend-v1":{"id":"features/backend-v1","title":"Backend V1","description":"BETA","sidebar":"tutorialSidebar"},"features/face-inpainting":{"id":"features/face-inpainting","title":"Face inpainting","description":"Entire picture","sidebar":"tutorialSidebar"},"features/face-swap":{"id":"features/face-swap","title":"Face Swap","description":"Without face-swap","sidebar":"tutorialSidebar"},"features/faceid":{"id":"features/faceid","title":"FaceID","description":"BETA","sidebar":"tutorialSidebar"},"features/lcm":{"id":"features/lcm","title":"Latent Consistency Models","description":"DPM SDE Karras 30 steps 15 seconds for 8 images","sidebar":"tutorialSidebar"},"features/lora":{"id":"features/lora","title":"LoRA","description":"LoRA","sidebar":"tutorialSidebar"},"features/prompt-masking":{"id":"features/prompt-masking","title":"Prompt Masking","description":"Prompt masking uses a short text to create a mask from the input image. The mask can then be used to inpaint parts of the image. Use the below parameters as part of the prompts to use auto-masking","sidebar":"tutorialSidebar"},"features/styles":{"id":"features/styles","title":"Styles","description":"Prompt style attribute allow to easily generate an image according to a preconfigured set of styles. The styles are essentially a set of weights that are applied to the model during the generation process.","sidebar":"tutorialSidebar"},"features/tiled-upscale":{"id":"features/tiled-upscale","title":"Tiled upscale","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/ai-photoshoot":{"id":"use-cases/ai-photoshoot","title":"AI Photoshoot - fine-tuning for professional headshots","description":"Overview","sidebar":"tutorialSidebar"},"use-cases/controlnet":{"id":"use-cases/controlnet","title":"Controlnet","description":"Preserve composition","sidebar":"tutorialSidebar"},"use-cases/faq":{"id":"use-cases/faq","title":"FAQ","description":"What image size should I upload? Is there a size limit to uploads?","sidebar":"tutorialSidebar"},"use-cases/finetuning-guide":{"id":"use-cases/finetuning-guide","title":"Fine-tuning guide","description":"The guide for high quality avatars and AI photography","sidebar":"tutorialSidebar"},"use-cases/inpainting-and-masking":{"id":"use-cases/inpainting-and-masking","title":"Inpainting and masking","description":"Input image","sidebar":"tutorialSidebar"},"use-cases/masked-portraits":{"id":"use-cases/masked-portraits","title":"Masked portraits","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/product-shots":{"id":"use-cases/product-shots","title":"Product placement","description":"Background replacement","sidebar":"tutorialSidebar"},"use-cases/room-redesign":{"id":"use-cases/room-redesign","title":"AI Interior Design","description":"Backend V1","sidebar":"tutorialSidebar"},"use-cases/sdxl-training":{"id":"use-cases/sdxl-training","title":"SDXL training","description":"Overview","sidebar":"tutorialSidebar"},"use-cases/toonify":{"id":"use-cases/toonify","title":"Toonify","description":"Input image","sidebar":"tutorialSidebar"},"use-cases/upscale":{"id":"use-cases/upscale","title":"Upscale","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/video-generation":{"id":"use-cases/video-generation","title":"Video Generation","description":"Generate videos using text","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.d87cc3c3.js b/assets/js/935f2afb.d87cc3c3.js deleted file mode 100644 index 13ab823c..00000000 --- a/assets/js/935f2afb.d87cc3c3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[2197],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Changes","href":"/docs/changes","docId":"changes"},{"type":"category","label":"Use cases","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"AI Photoshoot - fine-tuning for professional headshots","href":"/docs/use-cases/ai-photoshoot","docId":"use-cases/ai-photoshoot"},{"type":"link","label":"Fine-tuning guide","href":"/docs/use-cases/finetuning-guide","docId":"use-cases/finetuning-guide"},{"type":"link","label":"SDXL training","href":"/docs/use-cases/sdxl-training","docId":"use-cases/sdxl-training"},{"type":"link","label":"Controlnet","href":"/docs/use-cases/controlnet","docId":"use-cases/controlnet"},{"type":"link","label":"Inpainting and masking","href":"/docs/use-cases/inpainting-and-masking","docId":"use-cases/inpainting-and-masking"},{"type":"link","label":"Virtual Try-on","href":"/docs/use-cases/virtual-try-on","docId":"use-cases/virtual-try-on"},{"type":"link","label":"Product placement","href":"/docs/use-cases/product-shots","docId":"use-cases/product-shots"},{"type":"link","label":"Toonify","href":"/docs/use-cases/toonify","docId":"use-cases/toonify"},{"type":"link","label":"Video Generation","href":"/docs/use-cases/video-generation","docId":"use-cases/video-generation"},{"type":"link","label":"FAQ","href":"/docs/use-cases/faq","docId":"use-cases/faq"},{"type":"link","label":"Masked portraits","href":"/docs/use-cases/masked-portraits","docId":"use-cases/masked-portraits"},{"type":"link","label":"AI Interior Design","href":"/docs/use-cases/room-redesign","docId":"use-cases/room-redesign"},{"type":"link","label":"Upscale","href":"/docs/use-cases/upscale","docId":"use-cases/upscale"}],"href":"/docs/category/use-cases"},{"type":"category","label":"Features","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Backend V1","href":"/docs/features/backend-v1","docId":"features/backend-v1"},{"type":"link","label":"Face inpainting","href":"/docs/features/face-inpainting","docId":"features/face-inpainting"},{"type":"link","label":"Face Swap","href":"/docs/features/face-swap","docId":"features/face-swap"},{"type":"link","label":"FaceID","href":"/docs/features/faceid","docId":"features/faceid"},{"type":"link","label":"Latent Consistency Models","href":"/docs/features/lcm","docId":"features/lcm"},{"type":"link","label":"LoRA","href":"/docs/features/lora","docId":"features/lora"},{"type":"link","label":"Multi-Controlnet","href":"/docs/features/multi-controlnet","docId":"features/multi-controlnet"},{"type":"link","label":"Multi-Pass inference","href":"/docs/features/multi-pass-inference","docId":"features/multi-pass-inference"},{"type":"link","label":"Multi-Person","href":"/docs/features/multiperson","docId":"features/multiperson"},{"type":"link","label":"Prompt Masking","href":"/docs/features/prompt-masking","docId":"features/prompt-masking"},{"type":"link","label":"Styles","href":"/docs/features/styles","docId":"features/styles"},{"type":"link","label":"Tiled upscale","href":"/docs/features/tiled-upscale","docId":"features/tiled-upscale"}],"href":"/docs/category/features"},{"type":"category","label":"API","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Overview","href":"/docs/api/overview","docId":"api/overview"},{"type":"category","label":"Tunes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The tune object","href":"/docs/api/tune/","docId":"api/tune/tune"},{"type":"link","label":"Create a tune","href":"/docs/api/tune/create","docId":"api/tune/create"},{"type":"link","label":"Retrieve a tune","href":"/docs/api/tune/retrieve","docId":"api/tune/retrieve"},{"type":"link","label":"List all tunes","href":"/docs/api/tune/list","docId":"api/tune/list"}],"href":"/docs/category/tunes"},{"type":"category","label":"Prompts","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The prompt object","href":"/docs/api/prompt/prompt","docId":"api/prompt/prompt"},{"type":"link","label":"Create a prompt","href":"/docs/api/prompt/create","docId":"api/prompt/create"},{"type":"link","label":"Retrieve a prompt","href":"/docs/api/prompt/retrieve","docId":"api/prompt/retrieve"},{"type":"link","label":"List all prompts","href":"/docs/api/prompt/list","docId":"api/prompt/list"}],"href":"/docs/category/prompts"},{"type":"category","label":"Packs","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"The pack object","href":"/docs/api/pack/pack","docId":"api/pack/pack"},{"type":"link","label":"List all packs","href":"/docs/api/pack/list","docId":"api/pack/list"},{"type":"category","label":"Pack tunes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Create a tune from a pack","href":"/docs/api/pack/tunes/create","docId":"api/pack/tunes/create"}],"href":"/docs/category/pack-tunes"}],"href":"/docs/category/packs"},{"type":"category","label":"Likes","collapsible":true,"collapsed":false,"items":[{"type":"link","label":"Create a like","href":"/docs/api/like/create","docId":"api/like/create"},{"type":"link","label":"Delete a like","href":"/docs/api/like/delete","docId":"api/like/delete"}],"href":"/docs/category/likes"},{"type":"link","label":"SDXL API usage","href":"/docs/api/sdxl-api","docId":"api/sdxl-api"}],"href":"/docs/category/api"},{"type":"category","label":"API links","items":[{"type":"link","label":"Headshots Opens-source app","href":"https://github.com/astriaai/headshots-starter"},{"type":"link","label":"Python SDK","href":"https://github.com/aronbrand/astriaclient"},{"type":"link","label":"Postman","href":"https://documenter.getpostman.com/view/273068/2s8YmSrfgD"},{"type":"link","label":"Bubble.io Plugin","href":"https://bubble.io/plugin/astria-api---stable-diffusion-1674501522435x732640117689417700"},{"type":"link","label":"API key","href":"https://www.astria.ai/users/edit#api"}],"collapsed":false,"collapsible":true}]},"docs":{"api/like/create":{"id":"api/like/create","title":"Create a like","description":"Adds a like to a prompt.","sidebar":"tutorialSidebar"},"api/like/delete":{"id":"api/like/delete","title":"Delete a like","description":"Delete a like from a prompt.","sidebar":"tutorialSidebar"},"api/overview":{"id":"api/overview","title":"Overview","description":"Billing","sidebar":"tutorialSidebar"},"api/pack/list":{"id":"api/pack/list","title":"List all packs","description":"Parameters","sidebar":"tutorialSidebar"},"api/pack/pack":{"id":"api/pack/pack","title":"The pack object","description":"A pack represents a list of grouped prompts, as well as the fine-tune to be created from the training images.","sidebar":"tutorialSidebar"},"api/pack/tunes/create":{"id":"api/pack/tunes/create","title":"Create a tune from a pack","description":"Creates a new fine-tune model from training images according to the pack base tune id, model type and adds prompts to generate images.","sidebar":"tutorialSidebar"},"api/prompt/create":{"id":"api/prompt/create","title":"Create a prompt","description":"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images.","sidebar":"tutorialSidebar"},"api/prompt/list":{"id":"api/prompt/list","title":"List all prompts","description":"Parameters","sidebar":"tutorialSidebar"},"api/prompt/prompt":{"id":"api/prompt/prompt","title":"The prompt object","description":"The prompt object is usually used as a nested resource of tune as prompts are generated using a fine-tune model. A prompt is a text that is used to generate images using a fine-tune model. The prompt object contains the generated images.","sidebar":"tutorialSidebar"},"api/prompt/retrieve":{"id":"api/prompt/retrieve","title":"Retrieve a prompt","description":"Parameters","sidebar":"tutorialSidebar"},"api/sdxl-api":{"id":"api/sdxl-api","title":"SDXL API usage","description":"For general tips on SDXL training and inference, see SDXL training","sidebar":"tutorialSidebar"},"api/tune/create":{"id":"api/tune/create","title":"Create a tune","description":"Creates a new fine-tune model from training images which in turn will be used to create prompts and generate images.","sidebar":"tutorialSidebar"},"api/tune/list":{"id":"api/tune/list","title":"List all tunes","description":"Parameters","sidebar":"tutorialSidebar"},"api/tune/retrieve":{"id":"api/tune/retrieve","title":"Retrieve a tune","description":"Parameters","sidebar":"tutorialSidebar"},"api/tune/tune":{"id":"api/tune/tune","title":"The tune object","description":"Tune (or Fine-tune) represents a model that is created using training images to learn a new concept or subject. At its core a fine-tune is a neural-network weights file (usually weights 2GB) and contains the information of the trained images.","sidebar":"tutorialSidebar"},"changes":{"id":"changes","title":"Changes","description":"* 2024-07-29 Added Styles option for prompt","sidebar":"tutorialSidebar"},"features/backend-v1":{"id":"features/backend-v1","title":"Backend V1","description":"BETA","sidebar":"tutorialSidebar"},"features/face-inpainting":{"id":"features/face-inpainting","title":"Face inpainting","description":"Entire picture","sidebar":"tutorialSidebar"},"features/face-swap":{"id":"features/face-swap","title":"Face Swap","description":"Without face-swap","sidebar":"tutorialSidebar"},"features/faceid":{"id":"features/faceid","title":"FaceID","description":"BETA","sidebar":"tutorialSidebar"},"features/lcm":{"id":"features/lcm","title":"Latent Consistency Models","description":"DPM SDE Karras 30 steps 15 seconds for 8 images","sidebar":"tutorialSidebar"},"features/lora":{"id":"features/lora","title":"LoRA","description":"LoRA","sidebar":"tutorialSidebar"},"features/multi-controlnet":{"id":"features/multi-controlnet","title":"Multi-Controlnet","description":"Available only for Backend V1","sidebar":"tutorialSidebar"},"features/multi-pass-inference":{"id":"features/multi-pass-inference","title":"Multi-Pass inference","description":"BETA","sidebar":"tutorialSidebar"},"features/multiperson":{"id":"features/multiperson","title":"Multi-Person","description":"BETA","sidebar":"tutorialSidebar"},"features/prompt-masking":{"id":"features/prompt-masking","title":"Prompt Masking","description":"Prompt masking uses a short text to create a mask from the input image. The mask can then be used to inpaint parts of the image. Use the below parameters as part of the prompts to use auto-masking","sidebar":"tutorialSidebar"},"features/styles":{"id":"features/styles","title":"Styles","description":"Prompt style attribute allow to easily generate an image according to a preconfigured set of styles. The styles are essentially a set of weights that are applied to the model during the generation process.","sidebar":"tutorialSidebar"},"features/tiled-upscale":{"id":"features/tiled-upscale","title":"Tiled upscale","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/ai-photoshoot":{"id":"use-cases/ai-photoshoot","title":"AI Photoshoot - fine-tuning for professional headshots","description":"Overview","sidebar":"tutorialSidebar"},"use-cases/controlnet":{"id":"use-cases/controlnet","title":"Controlnet","description":"Preserve composition","sidebar":"tutorialSidebar"},"use-cases/faq":{"id":"use-cases/faq","title":"FAQ","description":"What image size should I upload? Is there a size limit to uploads?","sidebar":"tutorialSidebar"},"use-cases/finetuning-guide":{"id":"use-cases/finetuning-guide","title":"Fine-tuning guide","description":"The guide for high quality avatars and AI photography","sidebar":"tutorialSidebar"},"use-cases/inpainting-and-masking":{"id":"use-cases/inpainting-and-masking","title":"Inpainting and masking","description":"Input image","sidebar":"tutorialSidebar"},"use-cases/masked-portraits":{"id":"use-cases/masked-portraits","title":"Masked portraits","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/product-shots":{"id":"use-cases/product-shots","title":"Product placement","description":"Background replacement","sidebar":"tutorialSidebar"},"use-cases/room-redesign":{"id":"use-cases/room-redesign","title":"AI Interior Design","description":"Backend V1","sidebar":"tutorialSidebar"},"use-cases/sdxl-training":{"id":"use-cases/sdxl-training","title":"SDXL training","description":"Overview","sidebar":"tutorialSidebar"},"use-cases/toonify":{"id":"use-cases/toonify","title":"Toonify","description":"Input image","sidebar":"tutorialSidebar"},"use-cases/upscale":{"id":"use-cases/upscale","title":"Upscale","description":"BETA","sidebar":"tutorialSidebar"},"use-cases/video-generation":{"id":"use-cases/video-generation","title":"Video Generation","description":"Generate videos using text","sidebar":"tutorialSidebar"},"use-cases/virtual-try-on":{"id":"use-cases/virtual-try-on","title":"Virtual Try-on","description":"BETA. Backend V1 feature. Price changes still pending.","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/9a7541ec.8a97443e.js b/assets/js/9a7541ec.8a97443e.js deleted file mode 100644 index 799c9c68..00000000 --- a/assets/js/9a7541ec.8a97443e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[254],{4418:e=>{e.exports=JSON.parse('{"label":"e-commerce","permalink":"/docs/tags/e-commerce","allTagsPath":"/docs/tags","count":1,"items":[{"id":"use-cases/virtual-try-on","title":"Virtual Try-on","description":"BETA. Backend V1 feature. Price changes still pending.","permalink":"/docs/use-cases/virtual-try-on"}]}')}}]); \ No newline at end of file diff --git a/assets/js/9c06740a.9b823cf6.js b/assets/js/9c06740a.9b823cf6.js deleted file mode 100644 index 89d82dfc..00000000 --- a/assets/js/9c06740a.9b823cf6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[9473],{1009:s=>{s.exports=JSON.parse('{"label":"garment","permalink":"/docs/tags/garment","allTagsPath":"/docs/tags","count":1,"items":[{"id":"use-cases/virtual-try-on","title":"Virtual Try-on","description":"BETA. Backend V1 feature. Price changes still pending.","permalink":"/docs/use-cases/virtual-try-on"}]}')}}]); \ No newline at end of file diff --git a/assets/js/9fda4f55.51e22853.js b/assets/js/9fda4f55.51e22853.js new file mode 100644 index 00000000..490ea4ba --- /dev/null +++ b/assets/js/9fda4f55.51e22853.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[4868],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),p=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(a),u=n,f=d["".concat(l,".").concat(u)]||d[u]||m[u]||i;return a?r.createElement(f,o(o({ref:t},c),{},{components:a})):r.createElement(f,o({ref:t},c))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:n,o[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var r=a(7462),n=(a(7294),a(3905));const i={},o="Changes",s={unversionedId:"changes",id:"changes",title:"Changes",description:"* 2024-07-29 Added Styles option for prompt",source:"@site/docs/0-changes.md",sourceDirName:".",slug:"/changes",permalink:"/docs/changes",draft:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{},sidebar:"tutorialSidebar",next:{title:"Use cases",permalink:"/docs/category/use-cases"}},l={},p=[],c={toc:p},d="wrapper";function m(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"changes"},"Changes"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"2024-07-29 Added ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/styles"},"Styles")," option for prompt"),(0,n.kt)("li",{parentName:"ul"},"2024-06-26 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/tiled-upscale"},"Tiled upscale V2")," preserves identity and similarity while adding details and skin tones."),(0,n.kt)("li",{parentName:"ul"},"2024-06-26 Added controlnet ",(0,n.kt)("inlineCode",{parentName:"li"},"relight")," for SD15 with Backend V1 to allow better composition and blending for ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/product-shots/"},"background replacement"),"."),(0,n.kt)("li",{parentName:"ul"},"2024-05-26 Added ",(0,n.kt)("inlineCode",{parentName:"li"},"--improve_similarity 0.5")," flag for Checkpoint/LoRA models which dramatically improves similarity/identity."),(0,n.kt)("li",{parentName:"ul"},"2024-05-22 Improved SDXL FaceID"),(0,n.kt)("li",{parentName:"ul"},"2024-05-22 Added Controlnet Style for SDXL1 "),(0,n.kt)("li",{parentName:"ul"},"2024-05-10 Added Controlnet Lineart for SDXL1 "),(0,n.kt)("li",{parentName:"ul"},"2024-05-06 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/room-redesign"},"Interior design"),' - improved "Segment Room" (',(0,n.kt)("inlineCode",{parentName:"li"},"segroom"),") controlnet to handle empty rooms. "),(0,n.kt)("li",{parentName:"ul"},"2024-05-05 ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/pack/pack/"},"Packs")," + ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/like/create/"},"Likes")," API - Control prompts from within Astria and experiment faster. "),(0,n.kt)("li",{parentName:"ul"},"2024-04-20 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/room-redesign"},"Interior design"),' - Added "Segment Room" controlnet for Backend V1, and MLSD for SDXL to be used. '),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 Added support for face-inpainting, hires-fix and tiled upscale for faceid on Backend V1. "),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 Lightning schedulers for Backend V1 to support lightning models such as ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes/1194447/prompts"},"RealVis XL Lightning")," "),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 V1: Lightning schedulers to support lightning models such as ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes/1194447/prompts"},"RealVis XL Lightning")," "),(0,n.kt)("li",{parentName:"ul"},"2024-03-27 Upgraded ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/themes"},"Themes")," to use Claude Opus and adjust for both SDXL and SD15 prompting."),(0,n.kt)("li",{parentName:"ul"},"2024-03-20 ",(0,n.kt)("a",{parentName:"li",href:"https://astria.ai/upscale"},"Free Upscale")," tool"),(0,n.kt)("li",{parentName:"ul"},"2024-03-17 Controlnet ",(0,n.kt)("inlineCode",{parentName:"li"},"composition")," support for Backend V1. Examples in the ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery?controlnet=composition"},"gallery")),(0,n.kt)("li",{parentName:"ul"},"2024-03-10 New ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/backend-v1"},"Backend version v1")," for inference - Higher quality, better samplers, faster inference, and more features."),(0,n.kt)("li",{parentName:"ul"},"2024-03-05 ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jabir-zheng/TCD"},"TCD")," sampler gets better results than LCM in 4-8 steps for SDXL models and is available on the samplers dropdown in the Advanced settings of the prompt."),(0,n.kt)("li",{parentName:"ul"},"2024-02-16 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/faceid"},"FaceID Portrait")," has better color balance and similarity and is well suited for portraits."),(0,n.kt)("li",{parentName:"ul"},"2024-02-08 Deprecate prompt aspect-ratio. Use width and height instead for better results (backward compatability available)."),(0,n.kt)("li",{parentName:"ul"},"2024-02-08 Added ",(0,n.kt)("inlineCode",{parentName:"li"},"--fix_bindi")," to remove dot on the forehead."),(0,n.kt)("li",{parentName:"ul"},"2024-01-30 Deprecated prompt expansion."),(0,n.kt)("li",{parentName:"ul"},"2024-01-25 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/upscale"},"Upscale only")," Allows you to upscale an existing image."),(0,n.kt)("li",{parentName:"ul"},"2024-01-17 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/faceid"},"FaceID")," Preserve identity without fine-tuning."),(0,n.kt)("li",{parentName:"ul"},"2024-01-03 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/tiled-upscale"},"Tiled upscale")," improved upscaling."),(0,n.kt)("li",{parentName:"ul"},"2023-12-14 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/prompt-masking"},"Prompt masking")," feature added - to support ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/product-shots"},"product shots")," and ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/masked-portraits"},"Masked Portraits")),(0,n.kt)("li",{parentName:"ul"},"2023-11-27 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/lcm"},"LCM")," (Latent Consistency Models) scheduler allows inference in 6 steps "),(0,n.kt)("li",{parentName:"ul"},"2023-10-29 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/face-swap"},"Face-Swap")," feature added - uses training images to improve inference time similarity"),(0,n.kt)("li",{parentName:"ul"},"2023-10-22 ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/themes"},"Themes")," - Have ChatGPT create 10 prompts for you from a short 2-4 word theme description.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9fda4f55.e9c0dcc6.js b/assets/js/9fda4f55.e9c0dcc6.js deleted file mode 100644 index 078cd0b9..00000000 --- a/assets/js/9fda4f55.e9c0dcc6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[4868],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),p=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=p(a),u=n,f=d["".concat(l,".").concat(u)]||d[u]||m[u]||i;return a?r.createElement(f,o(o({ref:t},c),{},{components:a})):r.createElement(f,o({ref:t},c))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:n,o[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var r=a(7462),n=(a(7294),a(3905));const i={},o="Changes",s={unversionedId:"changes",id:"changes",title:"Changes",description:"* 2024-07-29 Added Styles option for prompt",source:"@site/docs/0-changes.md",sourceDirName:".",slug:"/changes",permalink:"/docs/changes",draft:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{},sidebar:"tutorialSidebar",next:{title:"Use cases",permalink:"/docs/category/use-cases"}},l={},p=[],c={toc:p},d="wrapper";function m(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,r.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"changes"},"Changes"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"2024-07-29 Added ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/styles"},"Styles")," option for prompt"),(0,n.kt)("li",{parentName:"ul"},"2024-06-26 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/tiled-upscale"},"Tiled upscale V2")," preserves identity and similarity while adding details and skin tones."),(0,n.kt)("li",{parentName:"ul"},"2024-06-26 Added controlnet ",(0,n.kt)("inlineCode",{parentName:"li"},"relight")," for SD15 with Backend V1 to allow better composition and blending for ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/product-shots/"},"background replacement"),"."),(0,n.kt)("li",{parentName:"ul"},"2024-05-26 Added ",(0,n.kt)("inlineCode",{parentName:"li"},"--improve_similarity 0.5")," flag for Checkpoint/LoRA models which dramatically improves similarity/identity."),(0,n.kt)("li",{parentName:"ul"},"2024-05-22 Improved SDXL FaceID"),(0,n.kt)("li",{parentName:"ul"},"2024-05-22 Added Controlnet Style for SDXL1 "),(0,n.kt)("li",{parentName:"ul"},"2024-05-10 Added Controlnet Lineart for SDXL1 "),(0,n.kt)("li",{parentName:"ul"},"2024-05-06 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/room-redesign"},"Interior design"),' - improved "Segment Room" (',(0,n.kt)("inlineCode",{parentName:"li"},"segroom"),") controlnet to handle empty rooms. "),(0,n.kt)("li",{parentName:"ul"},"2024-05-05 ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/pack/pack/"},"Packs")," + ",(0,n.kt)("a",{parentName:"li",href:"/docs/api/like/create/"},"Likes")," API - Control prompts from within Astria and experiment faster. "),(0,n.kt)("li",{parentName:"ul"},"2024-05-03 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/virtual-try-on"},"Virtual Try-on")," - Improved quality "),(0,n.kt)("li",{parentName:"ul"},"2024-04-20 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/room-redesign"},"Interior design"),' - Added "Segment Room" controlnet for Backend V1, and MLSD for SDXL to be used. '),(0,n.kt)("li",{parentName:"ul"},"2024-04-17 Showcase ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/virtual-try-on"},"virtual try-on")," - add reference clothes to a person in an image. "),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 Added support for face-inpainting, hires-fix and tiled upscale for faceid on Backend V1. "),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 Lightning schedulers for Backend V1 to support lightning models such as ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes/1194447/prompts"},"RealVis XL Lightning")," "),(0,n.kt)("li",{parentName:"ul"},"2024-04-04 V1: Lightning schedulers to support lightning models such as ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery/tunes/1194447/prompts"},"RealVis XL Lightning")," "),(0,n.kt)("li",{parentName:"ul"},"2024-03-27 Upgraded ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/themes"},"Themes")," to use Claude Opus and adjust for both SDXL and SD15 prompting."),(0,n.kt)("li",{parentName:"ul"},"2024-03-20 ",(0,n.kt)("a",{parentName:"li",href:"https://astria.ai/upscale"},"Free Upscale")," tool"),(0,n.kt)("li",{parentName:"ul"},"2024-03-17 Controlnet ",(0,n.kt)("inlineCode",{parentName:"li"},"composition")," support for Backend V1. Examples in the ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/gallery?controlnet=composition"},"gallery")),(0,n.kt)("li",{parentName:"ul"},"2024-03-14 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/multi-controlnet"},"Multi-controlnet + Controlnet reference")," is available for Backend V1"),(0,n.kt)("li",{parentName:"ul"},"2024-03-10 New ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/backend-v1"},"Backend version v1")," for inference - Higher quality, better samplers, faster inference, and more features."),(0,n.kt)("li",{parentName:"ul"},"2024-03-05 ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/jabir-zheng/TCD"},"TCD")," sampler gets better results than LCM in 4-8 steps for SDXL models and is available on the samplers dropdown in the Advanced settings of the prompt."),(0,n.kt)("li",{parentName:"ul"},"2024-02-16 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/faceid"},"FaceID Portrait")," has better color balance and similarity and is well suited for portraits."),(0,n.kt)("li",{parentName:"ul"},"2024-02-08 Deprecate prompt aspect-ratio. Use width and height instead for better results (backward compatability available)."),(0,n.kt)("li",{parentName:"ul"},"2024-02-08 Added ",(0,n.kt)("inlineCode",{parentName:"li"},"--fix_bindi")," to remove dot on the forehead."),(0,n.kt)("li",{parentName:"ul"},"2024-01-30 Deprecated prompt expansion."),(0,n.kt)("li",{parentName:"ul"},"2024-01-25 ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/upscale"},"Upscale only")," Allows you to upscale an existing image."),(0,n.kt)("li",{parentName:"ul"},"2024-01-17 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/faceid"},"FaceID")," Preserve identity without fine-tuning."),(0,n.kt)("li",{parentName:"ul"},"2024-01-03 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/tiled-upscale"},"Tiled upscale")," improved upscaling."),(0,n.kt)("li",{parentName:"ul"},"2024-01-03 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/multi-pass-inference"},"Multi pass inference")," unlocks new level of detail, image composition and similarity."),(0,n.kt)("li",{parentName:"ul"},"2023-12-14 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/prompt-masking"},"Prompt masking")," feature added - to support ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/product-shots"},"product shots")," and ",(0,n.kt)("a",{parentName:"li",href:"/docs/use-cases/masked-portraits"},"Masked Portraits")),(0,n.kt)("li",{parentName:"ul"},"2023-11-27 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/lcm"},"LCM")," (Latent Consistency Models) scheduler allows inference in 6 steps "),(0,n.kt)("li",{parentName:"ul"},"2023-11-01 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/multiperson"},"Multi-person")," inference using LoRA and SD15 models "),(0,n.kt)("li",{parentName:"ul"},"2023-10-29 ",(0,n.kt)("a",{parentName:"li",href:"/docs/features/face-swap"},"Face-Swap")," feature added - uses training images to improve inference time similarity"),(0,n.kt)("li",{parentName:"ul"},"2023-10-22 ",(0,n.kt)("a",{parentName:"li",href:"https://www.astria.ai/themes"},"Themes")," - Have ChatGPT create 10 prompts for you from a short 2-4 word theme description.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a175974d.703ab2d9.js b/assets/js/a175974d.703ab2d9.js deleted file mode 100644 index 3d577e6a..00000000 --- a/assets/js/a175974d.703ab2d9.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[4274],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(n),g=r,d=p["".concat(l,".").concat(g)]||p[g]||m[g]||i;return n?a.createElement(d,o(o({ref:t},u),{},{components:n})):a.createElement(d,o({ref:t},u))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:r,o[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>s,metadata:()=>c,toc:()=>p});var a=n(7462),r=(n(7294),n(3905));const i=n.p+"assets/images/ai-photoshoot-input-3e9da4e3f5e050cbe4f36788a62521de.png",o=n.p+"assets/images/virtual-try-on-jcrew-swimming-suit-53c3b1768a8393476e21cf6489a9d5fc.webp",s={hide_table_of_contents:!0,tags:["virtual try-on","fashion","e-commerce","clothing","garment","backend-v1","VTON"]},l="Virtual Try-on",c={unversionedId:"use-cases/virtual-try-on",id:"use-cases/virtual-try-on",title:"Virtual Try-on",description:"BETA. Backend V1 feature. Price changes still pending.",source:"@site/docs/use-cases/35-virtual-try-on.md",sourceDirName:"use-cases",slug:"/use-cases/virtual-try-on",permalink:"/docs/use-cases/virtual-try-on",draft:!1,tags:[{label:"virtual try-on",permalink:"/docs/tags/virtual-try-on"},{label:"fashion",permalink:"/docs/tags/fashion"},{label:"e-commerce",permalink:"/docs/tags/e-commerce"},{label:"clothing",permalink:"/docs/tags/clothing"},{label:"garment",permalink:"/docs/tags/garment"},{label:"backend-v1",permalink:"/docs/tags/backend-v-1"},{label:"VTON",permalink:"/docs/tags/vton"}],version:"current",sidebarPosition:35,frontMatter:{hide_table_of_contents:!0,tags:["virtual try-on","fashion","e-commerce","clothing","garment","backend-v1","VTON"]},sidebar:"tutorialSidebar",previous:{title:"Inpainting and masking",permalink:"/docs/use-cases/inpainting-and-masking"},next:{title:"Product placement",permalink:"/docs/use-cases/product-shots"}},u={},p=[{value:"Overview",id:"overview",level:2}],m={toc:p},g="wrapper";function d(e){let{components:t,...s}=e;return(0,r.kt)(g,(0,a.Z)({},m,s,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"virtual-try-on"},"Virtual Try-on"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"BETA. Backend V1 feature. Price changes still pending.")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Training images"),(0,r.kt)("img",{src:i,alt:"Fine-tuning training images",style:{height:375}}),(0,r.kt)("figcaption",null,"Garment / Clothing"),(0,r.kt)("img",{src:o,alt:"Virtual try on J. Crew swimming suit",style:{height:375}})),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Generated images"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Person + Garment",src:n(7500).Z,width:"896",height:"1536"})))),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Garment / Clothing"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Garment / Clothing",src:n(3321).Z,width:"1300",height:"1510"}))),(0,r.kt)("div",null,(0,r.kt)("figcaption",null,"Generated images"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"Person + Garment",src:n(2338).Z,width:"1344",height:"1536"})))),(0,r.kt)("p",null,"More examples in the gallery - ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=faceid%3A1227460"},"Swimming suit")," and ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?text=faceid%3A1228120"},"Parka"),". See also the article walkthrough on ",(0,r.kt)("a",{parentName:"p",href:"https://www.astria.ai/articles/virtual-tryon/"},"virtual try-on"),"."),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,"Virtual try-on is the term for the process of generating images of a person wearing a specific garment or clothing item. This can be useful for e-commerce websites, fashion designers, or even for personal use."),(0,r.kt)("p",null,"To use Astria's virtual try-on feature, you need to create:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"A model of the person you want to dress up ideally through ",(0,r.kt)("a",{parentName:"li",href:"/docs/use-cases/ai-photoshoot"},"fine-tuning")),(0,r.kt)("li",{parentName:"ol"},"A ",(0,r.kt)("a",{parentName:"li",href:"/docs/features/faceid"},"faceid")," fine-tune of the garment you want to try on. The faceid class name should be ",(0,r.kt)("inlineCode",{parentName:"li"},"clothing"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"shirt")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"pants"),". Class name is used to identify the garment in the image and remove the original model in case a reference image with a fashion model is used.")),(0,r.kt)("p",null,"For prompting, use both the fine-tuned model of the person and the faceid reference of the garment. See below reference example prompt. Ideally you should try to describe the background/scene and type of cloth the person is wearing. In case a reference image to the garment includes a fashion model, a better alternative to this, could be to use the input image as a reference pose as well as img2img to bring some of the background features into the image. For example a swimming suit reference image might feature a background pool, while a reference parka might feature a snowy background. "),(0,r.kt)("p",null,"It is recommended to use 3:4 aspect-ratio - ",(0,r.kt)("inlineCode",{parentName:"p"},"512x680")," width x height for the input image."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text"}," ohwx woman wearing a swimming suit, high resolution fashion photoshoot, UHD\nnum_images=4\nnegative_prompt=old, wrinkles, mole, blemish, scar, sad, severe, 3d, cg\nseed=\nsteps=30\ncfg_scale=\ncontrolnet=pose\ninput_image_url=https://sdbooth2-production.s3.amazonaws.com/7cw0uwxugd4g22qobjlow6h5gbcv\nmask_image_url=\ndenoising_strength=0.9\ncontrolnet_conditioning_scale=0.4\ncontrolnet_txt2img=false\nsuper_resolution=true\ninpaint_faces=true\nface_correct=false\nfilm_grain=false\nface_swap=true\nhires_fix=true\nbackend_version=1\nprompt_expansion=undefined\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=\nh=\n")))}d.isMDXComponent=!0},2338:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/virtual-try-on-northface-parka-generated-71287974ec84442ed404064b65eebba9.jpg"},3321:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/virtual-try-on-northface-parka-dee9f2eaa8bb98f86187806bd6f555e6.webp"},7500:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/virtual-try-on-swimming-suit-generated-a449c37fab4876ffec4c4dc8203f2af3.jpg"}}]); \ No newline at end of file diff --git a/assets/js/b83527cb.189c557a.js b/assets/js/b83527cb.189c557a.js deleted file mode 100644 index 57cae49e..00000000 --- a/assets/js/b83527cb.189c557a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[2062],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var i=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=i.createContext({}),p=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return i.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),m=r,g=u["".concat(l,".").concat(m)]||u[m]||d[m]||a;return n?i.createElement(g,o(o({ref:t},c),{},{components:n})):i.createElement(g,o({ref:t},c))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:r,o[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var i=n(7462),r=(n(7294),n(3905));const a={},o="SDXL training",s={unversionedId:"use-cases/sdxl-training",id:"use-cases/sdxl-training",title:"SDXL training",description:"Overview",source:"@site/docs/use-cases/10-sdxl-training.md",sourceDirName:"use-cases",slug:"/use-cases/sdxl-training",permalink:"/docs/use-cases/sdxl-training",draft:!1,tags:[],version:"current",sidebarPosition:10,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Fine-tuning guide",permalink:"/docs/use-cases/finetuning-guide"},next:{title:"Controlnet",permalink:"/docs/use-cases/controlnet"}},l={},p=[{value:"Overview",id:"overview",level:2},{value:"Training tips",id:"training-tips",level:2},{value:"Inference tips",id:"inference-tips",level:2},{value:"Aspect ratios",id:"aspect-ratios",level:2},{value:"API usage",id:"api-usage",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(u,(0,i.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"sdxl-training"},"SDXL training"),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Stable Diffusion XL")," or ",(0,r.kt)("strong",{parentName:"p"},"SDXL")," is the 2nd gen image generation model that is tailored towards more photorealistic outputs with more detailed imagery and composition. SDXL can generate realistic faces, legible text within the images, and better image composition, all while using shorter and simpler prompts."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"LoRA + Text-embedding")," is currently the only option for fine-tuning SDXL.")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,"Input training images",(0,r.kt)("p",null,(0,r.kt)("img",{alt:"source.png",src:n(3957).Z,width:"2000",height:"2203"}))),(0,r.kt)("div",null,(0,r.kt)("p",null,"Output images"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"generated.png",src:n(9970).Z,width:"670",height:"893"})))),(0,r.kt)("h2",{id:"training-tips"},"Training tips"),(0,r.kt)("p",null,"Default token for SDXL should be ",(0,r.kt)("inlineCode",{parentName:"p"},"ohwx")," and will be set automatically if none is specified"),(0,r.kt)("h2",{id:"inference-tips"},"Inference tips"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Do not copy and paste prompts from SD15"),(0,r.kt)("li",{parentName:"ol"},"Do not use textual-inversions such as ",(0,r.kt)("inlineCode",{parentName:"li"},"easynegative")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"badhands")," from SD15"),(0,r.kt)("li",{parentName:"ol"},"Consider activating face-swap and face-inpainting (which in turn requires super-resolution) - this is the biggest boost you can get to increase similarity to subject"),(0,r.kt)("li",{parentName:"ol"},"Use clean small concise prompts - usually up to 15 words"),(0,r.kt)("li",{parentName:"ol"},"Avoid long negatives - this will decrease similarity to subject."),(0,r.kt)("li",{parentName:"ol"},"Start with baseline SDXL 1.0 inference before going to other base models. Most custom SDXL models are biased and may reduce similarity. Models which we noticed that work okay are ",(0,r.kt)("inlineCode",{parentName:"li"},"ZavyChromaXL")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"ClearChromaXL"))),(0,r.kt)("p",null,"All above tips will help increase similarity to the original subject."),(0,r.kt)("h2",{id:"aspect-ratios"},"Aspect ratios"),(0,r.kt)("p",null,"The below aspect ratios are recommended for SDXL inference since these were also used for the training."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text"},"aspect: width, height\n0.5: 704, 1408\n0.52: 704, 1344\n0.57: 768, 1344\n0.6: 768, 1280\n0.68: 832, 1216\n0.72: 832, 1152\n0.78: 896, 1152\n0.82: 896, 1088\n0.88: 960, 1088\n0.94: 960, 1024\n1.0: 1024, 1024\n1.07: 1024, 960\n1.13: 1088, 960\n1.21: 1088, 896\n1.29: 1152, 896\n1.38: 1152, 832\n1.46: 1216, 832\n1.67: 1280, 768\n1.75: 1344, 768\n1.91: 1344, 704\n2.0: 1408, 704\n2.09: 1472, 704\n2.4: 1536, 640\n2.5: 1600, 640\n2.89: 1664, 576\n3.0: 1728, 576\n")),(0,r.kt)("h2",{id:"api-usage"},"API usage"),(0,r.kt)("p",null,"See here for ",(0,r.kt)("a",{parentName:"p",href:"/docs/api/sdxl-api"},"API usage")))}d.isMDXComponent=!0},3957:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/ai-photoshoot-input-3e9da4e3f5e050cbe4f36788a62521de.png"},9970:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/sdxl-output-eb2fc7f16279a8316300344ad7b0d084.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/b83527cb.5c7855b1.js b/assets/js/b83527cb.5c7855b1.js new file mode 100644 index 00000000..e9582215 --- /dev/null +++ b/assets/js/b83527cb.5c7855b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[2062],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var i=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=i.createContext({}),p=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=p(e.components);return i.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(n),m=r,g=u["".concat(l,".").concat(m)]||u[m]||d[m]||a;return n?i.createElement(g,o(o({ref:t},c),{},{components:n})):i.createElement(g,o({ref:t},c))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:r,o[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>g,frontMatter:()=>s,metadata:()=>p,toc:()=>u});var i=n(7462),r=(n(7294),n(3905));const a=n.p+"assets/images/sdxl-output-e65457001cbfcde71dc935732d9b396c.jpg",o=n.p+"assets/images/ai-photoshoot-input-66e224267554a6902bfaa5e6103ae27f.jpg",s={},l="SDXL training",p={unversionedId:"use-cases/sdxl-training",id:"use-cases/sdxl-training",title:"SDXL training",description:"Overview",source:"@site/docs/use-cases/10-sdxl-training.md",sourceDirName:"use-cases",slug:"/use-cases/sdxl-training",permalink:"/docs/use-cases/sdxl-training",draft:!1,tags:[],version:"current",sidebarPosition:10,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Fine-tuning guide",permalink:"/docs/use-cases/finetuning-guide"},next:{title:"Controlnet",permalink:"/docs/use-cases/controlnet"}},c={},u=[{value:"Overview",id:"overview",level:2},{value:"Training tips",id:"training-tips",level:2},{value:"Inference tips",id:"inference-tips",level:2},{value:"Aspect ratios",id:"aspect-ratios",level:2},{value:"API usage",id:"api-usage",level:2}],d={toc:u},m="wrapper";function g(e){let{components:t,...n}=e;return(0,r.kt)(m,(0,i.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"sdxl-training"},"SDXL training"),(0,r.kt)("h2",{id:"overview"},"Overview"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Stable Diffusion XL")," or ",(0,r.kt)("strong",{parentName:"p"},"SDXL")," is the 2nd gen image generation model that is tailored towards more photorealistic outputs with more detailed imagery and composition. SDXL can generate realistic faces, legible text within the images, and better image composition, all while using shorter and simpler prompts."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},(0,r.kt)("inlineCode",{parentName:"p"},"LoRA + Text-embedding")," is currently the only option for fine-tuning SDXL.")),(0,r.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,r.kt)("div",null,"Input training images",(0,r.kt)("img",{src:o,alt:"generated.png"})),(0,r.kt)("div",null,"Output images",(0,r.kt)("img",{src:a,alt:"generated.png",style:{height:500}}))),(0,r.kt)("h2",{id:"training-tips"},"Training tips"),(0,r.kt)("p",null,"Default token for SDXL should be ",(0,r.kt)("inlineCode",{parentName:"p"},"ohwx")," and will be set automatically if none is specified"),(0,r.kt)("h2",{id:"inference-tips"},"Inference tips"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Do not copy and paste prompts from SD15"),(0,r.kt)("li",{parentName:"ol"},"Do not use textual-inversions such as ",(0,r.kt)("inlineCode",{parentName:"li"},"easynegative")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"badhands")," from SD15"),(0,r.kt)("li",{parentName:"ol"},"Consider activating face-swap and face-inpainting (which in turn requires super-resolution) - this is the biggest boost you can get to increase similarity to subject"),(0,r.kt)("li",{parentName:"ol"},"Use clean small concise prompts - usually up to 15 words"),(0,r.kt)("li",{parentName:"ol"},"Avoid long negatives - this will decrease similarity to subject."),(0,r.kt)("li",{parentName:"ol"},"Start with baseline SDXL 1.0 inference before going to other base models. Most custom SDXL models are biased and may reduce similarity. Models which we noticed that work okay are ",(0,r.kt)("inlineCode",{parentName:"li"},"ZavyChromaXL")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"ClearChromaXL"))),(0,r.kt)("p",null,"All above tips will help increase similarity to the original subject."),(0,r.kt)("h2",{id:"aspect-ratios"},"Aspect ratios"),(0,r.kt)("p",null,"The below aspect ratios are recommended for SDXL inference since these were also used for the training."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-text"},"aspect: width, height\n0.5: 704, 1408\n0.52: 704, 1344\n0.57: 768, 1344\n0.6: 768, 1280\n0.68: 832, 1216\n0.72: 832, 1152\n0.78: 896, 1152\n0.82: 896, 1088\n0.88: 960, 1088\n0.94: 960, 1024\n1.0: 1024, 1024\n1.07: 1024, 960\n1.13: 1088, 960\n1.21: 1088, 896\n1.29: 1152, 896\n1.38: 1152, 832\n1.46: 1216, 832\n1.67: 1280, 768\n1.75: 1344, 768\n1.91: 1344, 704\n2.0: 1408, 704\n2.09: 1472, 704\n2.4: 1536, 640\n2.5: 1600, 640\n2.89: 1664, 576\n3.0: 1728, 576\n")),(0,r.kt)("h2",{id:"api-usage"},"API usage"),(0,r.kt)("p",null,"See here for ",(0,r.kt)("a",{parentName:"p",href:"/docs/api/sdxl-api"},"API usage")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cee787f4.9b5abbda.js b/assets/js/cee787f4.9b5abbda.js deleted file mode 100644 index 4e6a9a16..00000000 --- a/assets/js/cee787f4.9b5abbda.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[9586],{3773:s=>{s.exports=JSON.parse('{"label":"fashion","permalink":"/docs/tags/fashion","allTagsPath":"/docs/tags","count":1,"items":[{"id":"use-cases/virtual-try-on","title":"Virtual Try-on","description":"BETA. Backend V1 feature. Price changes still pending.","permalink":"/docs/use-cases/virtual-try-on"}]}')}}]); \ No newline at end of file diff --git a/assets/js/e2fc4889.9fd33f89.js b/assets/js/e2fc4889.9fd33f89.js deleted file mode 100644 index ba3e0116..00000000 --- a/assets/js/e2fc4889.9fd33f89.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[6995],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>c});var A=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var A=Object.getOwnPropertySymbols(e);t&&(A=A.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,A)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(A=0;A=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=A.createContext({}),l=function(e){var t=A.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},p=function(e){var t=l(e.components);return A.createElement(s.Provider,{value:t},e.children)},g="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return A.createElement(A.Fragment,{},t)}},u=A.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),g=l(n),u=a,c=g["".concat(s,".").concat(u)]||g[u]||m[u]||i;return n?A.createElement(c,r(r({ref:t},p),{},{components:n})):A.createElement(c,r({ref:t},p))}));function c(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=u;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[g]="string"==typeof e?e:a,r[1]=o;for(var l=2;l{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var A=n(7462),a=(n(7294),n(3905));const i={title:"Multi-Person"},r="Multi-Person inference",o={unversionedId:"features/multiperson",id:"features/multiperson",title:"Multi-Person",description:"BETA",source:"@site/docs/features/multiperson.md",sourceDirName:"features",slug:"/features/multiperson",permalink:"/docs/features/multiperson",draft:!1,tags:[],version:"current",frontMatter:{title:"Multi-Person"},sidebar:"tutorialSidebar",previous:{title:"Multi-Pass inference",permalink:"/docs/features/multi-pass-inference"},next:{title:"Prompt Masking",permalink:"/docs/features/prompt-masking"}},s={},l=[{value:"Overview",id:"overview",level:2},{value:"Requirements",id:"requirements",level:2},{value:"Step 1: Training",id:"step-1-training",level:3},{value:"Step 2 - Inference",id:"step-2---inference",level:3},{value:"Examples",id:"examples",level:2},{value:"1. Pre-processed controlnet txt2img pose input image",id:"1-pre-processed-controlnet-txt2img-pose-input-image",level:3},{value:"2. Pose input image txt2img",id:"2-pose-input-image-txt2img",level:3},{value:"3. Prompt with input image as a background",id:"3-prompt-with-input-image-as-a-background",level:3},{value:"4. No input image",id:"4-no-input-image",level:3},{value:"5. DALLE background image",id:"5-dalle-background-image",level:3},{value:"6. Img2img",id:"6-img2img",level:3}],p={toc:l},g="wrapper";function m(e){let{components:t,...i}=e;return(0,a.kt)(g,(0,A.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"multi-person-inference"},"Multi-Person inference"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"BETA")),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Multiperson pose input image"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"source.png",src:n(8948).Z,width:"768",height:"512"}))),(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Multiperson result"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"generated.png",src:n(4969).Z,width:"1876",height:"1250"})))),(0,a.kt)("p",null,"See example prompts in the ",(0,a.kt)("a",{parentName:"p",href:"https://astria.ai/gallery?is_multiperson=true"},"gallery")),(0,a.kt)("h2",{id:"overview"},"Overview"),(0,a.kt)("p",null,"Multi-person inference is a feature that allows you to generate images with multiple people in them.\nSee example prompts in the ",(0,a.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?is_multiperson=true"},"gallery")," or in the ",(0,a.kt)("a",{parentName:"p",href:"https://www.astria.ai/community?is_multiperson=true"},"community feed"),"."),(0,a.kt)("p",null,"See ",(0,a.kt)("a",{parentName:"p",href:"https://www.astria.ai/pricing"},"pricing")," for the cost of this feature."),(0,a.kt)("h2",{id:"requirements"},"Requirements"),(0,a.kt)("p",null,"It is recommended to use SD15 models based on ",(0,a.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery/tunes/690204/prompts"},"RealisticVision V5.1")," as SD15 works better than SDXL for this use-case."),(0,a.kt)("h3",{id:"step-1-training"},"Step 1: Training"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://www.astria.ai/tunes/new"},"Create a fine-tune")," for each person. Model can be either lora or a checkpoint."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"img.png",src:n(368).Z,width:"751",height:"563"})),(0,a.kt)("h3",{id:"step-2---inference"},"Step 2 - Inference"),(0,a.kt)("p",null,"Provide an ",(0,a.kt)("inlineCode",{parentName:"p"},"input_image")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"controlnet=pose")," so that the generation has a solid image composition to start with.\nIf no ",(0,a.kt)("inlineCode",{parentName:"p"},"input_image")," is given, a constant pose input image (with arms crossed) will be used for each person."),(0,a.kt)("p",null,"The prompt is divided by the ",(0,a.kt)("inlineCode",{parentName:"p"},"BREAK")," keyword such as:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"1st ",(0,a.kt)("strong",{parentName:"li"},"base prompt")," used to generate the background and scene."),(0,a.kt)("li",{parentName:"ul"},"2nd ",(0,a.kt)("strong",{parentName:"li"},"common prompt")," that's concatenated to each person prompt and the base prompt to avoid repetition."),(0,a.kt)("li",{parentName:"ul"},"3+ each person and its LoRA syntax reference (even for checkpoint)")),(0,a.kt)("h2",{id:"examples"},"Examples"),(0,a.kt)("h3",{id:"1-pre-processed-controlnet-txt2img-pose-input-image"},"1. Pre-processed controlnet txt2img pose input image"),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"0.5fr 1fr",gap:"1.5rem"}},(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Pose input image"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"source.png",src:n(8948).Z,width:"768",height:"512"}))),(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Multiperson result"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"generated.png",src:n(4969).Z,width:"1876",height:"1250"})))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-text"},"Glamour aristocrat party 2girl \nBREAK Zeiss Canon Mark D5, wallpaper, photorealistic, detailed skin \nBREAK (ohwx woman) BREAK (ohwx woman) \nnum_images=1 \nnegative_prompt=hat, open mouth, text, oversaturated, ugly, 3d, render, cartoon, grain, low-res, kitsch ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, mutation, mutated, extra limbs, extra legs, extra arms, disfigured, deformed, cross-eye, body out of shot \nseed= \nsteps= \ncfg_scale= \ncontrolnet=pose \ninput_image_url=https://sdbooth2-production.s3.amazonaws.com/2vxpjloxggnv9s4tw33ckn5xzdnp \nmask_image_url= \ndenoising_strength= \ncontrolnet_conditioning_scale= \ncontrolnet_txt2img=true \nsuper_resolution=true \ninpaint_faces=true \nface_correct=false\nfilm_grain=true\nface_swap=true\nhires_fix=true\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=768\nh=512\n")),(0,a.kt)("h3",{id:"2-pose-input-image-txt2img"},"2. Pose input image txt2img"),(0,a.kt)("p",null,"To use an input image for the pose, while preserving the semantics of the input image, use an input image with ",(0,a.kt)("inlineCode",{parentName:"p"},"controlnet_txt2img=True")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"controlnet=pose")),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"0.5fr 1fr",gap:"1.5rem"}},(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Pose input image"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"multiperson-txt2img-pose.jpg",src:n(840).Z,width:"863",height:"863"}))),(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Multiperson result"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"multiperson-txt2img-pose.jpg",src:n(7768).Z,width:"949",height:"948"})))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-text"},"A beautiful man and woman in an Italian village \nBREAK \nBREAK ohwx woman, red blouse jeans, and belt, holding a rifle \nBREAK ohwx man, dark vest \nnum_images=4\nnegative_prompt=\nseed=43\nsteps=30\ncfg_scale=\ncontrolnet=pose\ninput_image_url=https://sdbooth2-production.s3.amazonaws.com/2ftedv374nggsabon14nqvuqyzsc\nmask_image_url=\ndenoising_strength=\ncontrolnet_conditioning_scale=\ncontrolnet_txt2img=true\nsuper_resolution=true\ninpaint_faces=true\nface_correct=false\nfilm_grain=false\nface_swap=true\nhires_fix=true\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=\nh=\n")),(0,a.kt)("h3",{id:"3-prompt-with-input-image-as-a-background"},"3. Prompt with input image as a background"),(0,a.kt)("p",null,"In some cases it might be desired to keep the exact same background as the input image, and only change the people in the image. To do this, add an ",(0,a.kt)("inlineCode",{parentName:"p"},"input_image")," and keep the base prompt empty, i.e: start the prompt with ",(0,a.kt)("inlineCode",{parentName:"p"},"BREAK BREAK")," to keep both the base and common prompts empty."),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"0.5fr 1fr",gap:"1.5rem"}},(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Pose input image"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"multiperson-txt2img-pose.jpg",src:n(840).Z,width:"863",height:"863"}))),(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Multiperson result"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"multiperson-txt2img-pose.jpg",src:n(1193).Z,width:"948",height:"947"})))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-text"},"BREAK \nBREAK ohwx woman, red blouse jeans, and belt, holding a rifle \nBREAK ohwx man, dark vest \nnum_images=4\nnegative_prompt=\nseed=43\nsteps=30\ncfg_scale=\ncontrolnet=\ninput_image_url=https://sdbooth2-production.s3.amazonaws.com/4j0pej570oosmbj22xx6igf3gfi2\nmask_image_url=\ndenoising_strength=\ncontrolnet_conditioning_scale=\ncontrolnet_txt2img=false\nsuper_resolution=true\ninpaint_faces=true\nface_correct=false\nfilm_grain=false\nface_swap=true\nhires_fix=true\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=\nh=\n")),(0,a.kt)("h3",{id:"4-no-input-image"},"4. No input image"),(0,a.kt)("p",null,"The base prompt will be used to generate the background and scene. This method is more prone to variation and results can be less consistent."),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"1fr",gap:"1.5rem"}},(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Multiperson result"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"multiperson-no-input-image.jpg",src:n(3922).Z,width:"562",height:"486"})))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-text"},"A beautiful man and woman in an Italian village \nBREAK \nBREAK ohwx woman, red blouse jeans, and belt, holding a rifle \nBREAK ohwx man, dark vest \nnum_images=4\nnegative_prompt=\nseed=43\nsteps=30\ncfg_scale=\ncontrolnet=\ninput_image_url=\nmask_image_url=\ndenoising_strength=\ncontrolnet_conditioning_scale=\ncontrolnet_txt2img=true\nsuper_resolution=true\ninpaint_faces=true\nface_correct=false\nfilm_grain=false\nface_swap=true\nhires_fix=true\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=512\nh=640\n")),(0,a.kt)("h3",{id:"5-dalle-background-image"},"5. DALLE background image"),(0,a.kt)("p",null,"Prefix the base prompt with ",(0,a.kt)("inlineCode",{parentName:"p"},"DALLE: ")," to use OpenAI ",(0,a.kt)("a",{parentName:"p",href:"https://openai.com/dall-e-3"},"DALLE3")," to generate the background and scene.\nOnly the "),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"1fr",gap:"1.5rem"}},(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Multiperson with DALLE background image "),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"multiperson-dalle.jpg",src:n(2507).Z,width:"945",height:"818"})))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-text"},"DALLE: A portrait of a couple in a small Italian village\nBREAK\nBREAK ohwx woman, red blouse jeans, and belt, holding a rifle \nBREAK ohwx man, dark vest \nnum_images=4\nnegative_prompt=\nseed=43\nsteps=30\ncfg_scale=\ncontrolnet=\ninput_image_url=\nmask_image_url=\ndenoising_strength=\ncontrolnet_conditioning_scale=\ncontrolnet_txt2img=false\nsuper_resolution=true\ninpaint_faces=true\nface_correct=false\nfilm_grain=false\nface_swap=true\nhires_fix=true\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=512\nh=640\n")),(0,a.kt)("h3",{id:"6-img2img"},"6. Img2img"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Not recommended"),". When not specifying a controlnet pose/depth to use, the model is having hard time creating multi person results and the quality is not consistent."),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"0.5fr 1fr",gap:"1.5rem"}},(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Pose input image"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"multiperson-txt2img-pose.jpg",src:n(840).Z,width:"863",height:"863"}))),(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Multiperson result"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"multiperson-img2img.jpg",src:n(9533).Z,width:"945",height:"481"})))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-text"},"A beautiful man and woman in an Italian village \nBREAK \nBREAK ohwx woman, red blouse jeans, and belt, holding a rifle \nBREAK ohwx man, dark vest \nnum_images=4\nnegative_prompt=\nseed=43\nsteps=30\ncfg_scale=\ncontrolnet=\ninput_image_url=https://sdbooth2-production.s3.amazonaws.com/3moqd5vab7j68iuozpsnx8m7mxil\nmask_image_url=\ndenoising_strength=\ncontrolnet_conditioning_scale=\ncontrolnet_txt2img=true\nsuper_resolution=true\ninpaint_faces=true\nface_correct=false\nfilm_grain=false\nface_swap=true\nhires_fix=true\nar=1:1\nscheduler=dpm++sde_karras\ncolor_grading=\nuse_lpw=true\nw=\nh=\n")))}m.isMDXComponent=!0},8948:(e,t,n)=>{n.d(t,{Z:()=>A});const A="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAIACAIAAAC6lJxtAAAhQUlEQVR4nO3d6XnjyLkG0KKfScAp3BTGITiF7hCoWByCGEJ3ChNCTwpOwSHg/kCLorAW9lrO+UVtJASCqBdfLQgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6Gua5upNgAPdrt4AAA7XNM3tFnvC70Sf+D+EjPxx9QYAcKBnmmkfSDPQ+sfVGwBAQvo9X4v6wnSckQuXAgDFGowjs0WgdV1gOs7IiwoQQGbiqyz9FCKXQMsnASAbK6osqwszW8ZNL30tOJ+jEyAb56SZdXSBkRddYAB52DI8WRyBDh8JgFgn1FFmN+D1ywRjzeW7CCKpAAHMa5qmDR/PB7O/f/xGpUj6IReOVKB2MUWL+NLLCUUaVRbYzkcIqFdkWFk0xSn9Xiog6AIDmBW/ms7GZZQrZP9wFQEIqNQRYcXCg/GWDquCfQlAQKUWhZXb7db+9PkAyJqPMVCv48brGKc8zcrRXM7RBhRo6W0cNL3nM1qcaznggKJoVnPhneJaf1y9AQDUqE08ym9cxSBooBxmoe/u6B0o/XAVAYiKaAtD6TvBLPR4s0eCaeqUTRcYVXievtsHdTaKkTtBl0Txpo+EJjQ3w0OpgAoQWTrtejSjC9/tm1rGFb8Fe1ZrQtOE5vcDnYmUztmBzKyYObJuxZGMpqjEbGrMTsjoX2a1sSOhjT5ff7X7O4dtFFxABYjyGRcSInaCK/5K+DhAyxggcjLYSB9x+l73QseNnpl45r32ye12UwGq1kD5J3z0EDThcXubfwZDx8iN45XMbGmkl64OHP9Ch95RYfaZl25qZJbSnpWtPRLew3v75T3c+7/zCAPR5y08Os/z+qXDhlzoAqMiTs2hlPt9Xtg9d9xL7/vMs8/2mn6m3Zsvv/Ye7u9DaQnykvQ5DsacVm+P7Pnqf3OXzVv0zOfsk8t7Oi6sN1xb59v32T4LP839cftd0ekUgR7hrRN9+n1hnV+YeMWrXH7EkiyHBewgl6axgC05ejMu6SI8OQC16efefI07t0cI4S28va4D1HmqwcFAnQyUTtpI5IglWbrASIIJR8Q4dKpafxmkHy9Dg4976X2fefbZJrq93sJbCGEs/YSReg9kSiLmYiVdpV0yC+wcx3XzbdyS48owP1+e+Hu4nfnSx1WAXnu++n/Yf92YCtDHE753ftoZK32ydI5YkuVo4GIlBaCyJfJOHbQZg+1lJwPFv/TSwHpCAOoXfjoZKGaCYcx8+I4LY1AiRyzJsg4QVzptXR+K0R4eux8n/WWQfvaePual1911bt9/qv9skbO94p5q2fyv5+9fWxCCPi0NF3OVlpeCE+psAPoeccJM8HieTj/35r5iI1dPgz8/BhV8xLKRw4IpJ5w7EmwwyrPv+1h2i9I0TT/6hBD+Ex4hhL+HFgZ8/dv+N6/dV7O1n7fJ/2juybOJQdBX7FmMjU7OJWW3qRc6f4GZrN3Dewjh30Pt+n8+2uy/w1suq2kfmn4+XmL9iohiENcq7fzFXpI6jzPttPa4gKNibF/dv2aFTgZ6pp9fcwOHE9lFMYN+tqefr68oCZEZ6wAxwI3Bc9FfuubzR6H7nXDwAjOJm9hXnfTz3tz/Co+/wiOE8D3c/rOkeU7hdiKrhzxvsSXEuLcGl8jvAo5zJHIhu5fILrbseuIG36Yvd/b+GlFqrgANbnw/+vR/58+P3/kVt3bOtSLTz77ln68bsCnKqAZxmrQ+uqQj66bu1eA/8iM0nRk9Of6/wwWYzoYLQCGEkX31duu2tYMBKIxnoH/d5kdGn+ny9POyJWIQqcvm/MUlsquI9E3Pbf4+sup/Lv91f7ObMJSKmoEl7J5tzIpV+3LZP686+2o2/bQ6GWgwALW2x6CNOzad9PMkBpGy/M5iEG92ed8wtMJvK527zU//+Zevx5/pMdTsJXsby77tqWs2AIXxClB4KQKFEH41938N/fnqDLQ9fyeYfp7EINKU7vkOFrmPNACdJm1sdbvzK0A7vuJrOBisAA2mn9ALQG2VKLX2ZveJbIPRpzURgMLXDDRmXQba+D+mnH6exCBSIwCRgbFw03pv7vFN2uAad/G3edqx92dRmzf7us9fiO8CG7yz9+uvJdLk7BiApg+k1mNymZ+YDBQWxqCNBcgs0s+TGEQ6BCBSEdM4dXTCzXQMers90lngLr7Nm33d3u0qH/fXf/Pr63Ri0GAFqKOYe3pHpp/Z3zkhA5Wafp7EIFLgZqhcY0Xc2WIiGz39Gd5PGwTTv/Xmji/9CI8Qwj3cb2FkTPQS197Mcq8dtePx9nd4i8lAf4b3o2eHZZp+wsextDoGtX8oBrGRChCHOyjrDM7ZGQs6z26ysRV+w8vI1n67dcQo6Zh2ffZ1B3/h8bET7kO7aLAvbLD203dJk7M9AEUegTHln6eD6kDF1376LCHNVQQgdnZmaSemC2xwWGu7DtCixV0OKtjEDO6Zft1+F1j7oG35ej/doTlsW50mfLuFn9ufLdLq0VdHpJ/WERkoUjHp55UkxMkEIHZwcn/W02wAage0vn5ncF7P2OIur03XVQsF7RuA2j/fOALjHv735TlPjEFLHZd+WpdkoCLTz5M7zHMaAYg1rko8g15ngT0myzatzuIug/c3GFvg7qo1AMde99kW3pv742v+e5vb7HUtTSf9tNLMQEenn9bJGajs9PMkBnECAYhPTfhxC98Hf5RU4nk123rNVlD6Gai/xl069zroGGsOF7V/ixqbXALQOemndVoGqiT9PIlBHEoAIoQQmvDj9ctnDEoz9yxqtFaMNd53kd/jTDSH65rA2fZmMP20kspAZ6af1gkZqLb082pdEvo9WC3PO7dwAocF3fTTehtv6k62Sys1exJs60CD0edVOjFo9/Qz9BIDrU76FaDz00/r0AxUc/p5WhqDMrrTC5dwQJBQANq9TVrkwkk9S003h4e2gk341v9mOgHoqvTTOugQkn46IpOQAMQ0B0TtBtNP6+gMdG3cGRTZgIWrY9CFASj0MpD082p1BpooUsYEoHrSz9N0DBq808vH7WJOXcGBZAlAHFsBSjDlTEs/A12bfp5Sa0VSSD+tpRloepjabPqpMPp0jCWh/p1eMlrBgRMIQKwPQNmFm0jnZ6D4cZqaw0HppJ/Wogw0EYC83Yt0klC3CHQbmOIqA9VMACKE8Vlg1TotAy1dXzGR8k9IaXJNaumnFXkIDS5D9bFepfSzRj8GtQugpz9+n5Mlcf4iEYPrAKXTzp3vhBi0KAAl0iJetSj2mL1u836EmEPo19DdWhJ5r7P2moRyWcGBM1XasBEjtXbuEodmoKX3WE2k/JPUgZFy+mnNHkL9ACT97O493FWA6KixSSNSUu3chc7MQKvTT7io/NO66tiYTT+JDFObPYT+Dm+vpdYTFnmqUOIrOHC+Sps0ZiXVzl3uuAwUGYASST+tRJJxLunnafooeh450s9xkl3BgUtU2p4RI5F2LhHxGSisikFbRv+c3C6mcGBkl35asxlI+jlBais4cJV/XL0BkIdFmWZRWgqbxz6f7Ha7tRv8fJCaNNNPmDuKBoquH6SfHUk/tFI8eZGUmmeB9R1aBxqTVPknBdPln2TTz6vOgfTr6zY/Xn5a4fsL59CwwWJnrpSY1OifFDThx9gqnVlEn1ftgfRraLPbDFTbmwtnEoBgjXMykPTzqmmacPvsvOjEoOzST+vP8D4YgJya4Wg+ZbDSCRlI51erOyfxIwa1GSjT6NP6/Y81Teh1NDs7w6EMgoaV4mPN0jHRrdTGPqcp6/QTQghNE9p493wQQpB+4Hg+ZbDVQaUg5Z/W4JJUzyJQ7vet6xW3fp+TnZrhaCpAsNURpSDln6eBSYilpp8Q2iKQ9AMnEIBgB3tloOFqR0895Z+y9bPd7fa4yb5wCgEI9rExAzVN06af54MxFaafzxUXbz+LKf9MkoHgcAIQ7Obv8BYZg9YNi67c7XZrQ88tfC8m/XxdVvtx9eZARQQg2NmKDNQv+dyb++BfVVj+6Sgm+ryy2Dqcz6cOjhJT5nmmpU4GegwVA6SfCrweM95uOJAKEBwlphQU3xcm/cAikVMKqJYABAeKz0DPsSCP22Ow/EN9DBRbKX5KATUTgOBY8SOjw0jPV1D+YSGtPswSgOAM0xlouiNM+qlJ571eXARS/Oj/13XuB2YJQHCS6VLQn+F98CQt/dCnRZ8wtLyk6T4McFjABToln19fU87j46fJpp+maTQqE7btn07V58sx0Ik+nVcZDEYVvlPTewlaKkAs4LpzL6+loF+9lHMPbyHV9KOHZdoB+2dBL5jiR+vr8pI17gFiODKI4orqIH+G934ACgl/Mh0J02L2T0R9aLgIFFPg8QZBJJ8NojirHmSiRJDgLtbDMm12/0THo/5kwOEMNLbz9VHCLF1gzDOr4jhjbVSabZcelmkb989L99m9GbkXyuotAToEIOZp9o40PMJDxCzPLhcSRrfAXnx+iKIL7Bi/00/zOgwoh12th2Xa2P6Z+ByNdJ+99oWlOCge8qUCRBTXnYe6hffb7wd5cAxMW7F/huqs7ogCBxKAWECzt6tu59fNcKvSbbuQcGsw2JMABJcYnudsuFWM3EPh2HuqzgpnEoDgcivHduSeA1aoYRlG0QfOIQDB+ab6MmLKADXkAIaSsV4w2I0ABFstjCBRbZgyQJ8BUsCOBCBYb49KzOL+r2pzgAFSIQRFINiLAARn+MgoUzf6jiQHAGwnAMFKkZWYr1Wilfc3qKTGM6u+eVIWP4SjCECw0jmVmMFetvpywBcV/stf6QWDHQhAcKChKtGzCPQ2/Zuzqs8BAOsJQLDebCVm/P4Gn+lnYiR1teOdmbO+COQQgpYABFsdV4kx3pmvWXnlGLKPP69i+aiC/zX29cfVGwCFa0s+TXN/ubfll/JP5/fdaJ2+Z/RpH1x7n9RkD9Hnp6l9kOZGkg4VIDjU766KsRZrtsZT+Xjn4o3NHIz402W9YBu7Uzulo7JrSFTC+RSOM9hEdSc2dxqSZFNOstf96Vi0iwbf95hvfvzosXSS/LojbSLoJHU8jOylhLaQ1KgAwcWOrvFsv1J33T/r0F00PpQ+asP23ZjTnnwpA+ZYSgBik6TOgImJKv88rTtZT+9/wSVZgx1Sy3uppnrB+u/+iqg9vQESBlkTgFhJ4zrp8KXqTtv/puLPWrGLBssVEzWM2+3WVn1ut8fGEdCLUkteEceAORYRgOA0p97WYK/gUnPPQuQem95FO+bFLT1fe21G+gkj2Q0jNQIQa9RWFVj43+1Q/pnt25r4zlhNSMMQr19gW3GET1fpBssVnfco4kWHD7YdY2t/Ox1IlEEAYo0sqgK7ZLLlPU1j6edtYpMG48vEK568//UsxLwj63ZRLvszl+2EeAIQBUpwfNLYJi3d1NnfGav9bG/A6mkCVx8z0z1f697fl+8s60IVW2GaAMRKeZ1e1zVpE63RyBNOlX+2v+JrVBrb/1kU5xI3vcd2GRi0619Ndbl692GMAMQmCZ5exzLEimrQYGs0XrMZTT8Tm7RiG+J/yhGS3OeHzzqE8ghAlCbB9mnssj7+cn9Rf0pexbld7N7RucuA33VvxORfnTqREMrmZqjUpVl4P4fbx70Ing9GnnBr59fYKz6/2Xnp2f+itujTHHD/y9cMtPTI6TzJOX8FxFMBokATl+8bW6PVT7i0GKD9S03y78hML1hkkSyRSQNwAgGIYp3YYsWWfzqbpGNro3UzrTK3uKYYOdMwwbmTcCgBiMLtnht6T7h+/OmKepLo8yr9KW+SBCRLAKIKu7eLH084kX6MV63aFQWVgaMxskhWZS2N2glAcITY9KNja6PLd+AVQWFBto4skqVfS4PdCUBwvR0bmzov3K+KPmM1nusKKhYEglimwcNqaTU2h04IZ5EVyxb0rZ5439+YmGfbONsfsqMCBOsY/VO1Q2s8R4wfil+vYZeXg/QJQLBCcunHINaTzQ6aOXhw0sRhllZh8iAOb7YTgGCp6xuY/tnfINY0rev5mv1OCKHaQqP1itiLAAQ5XU0effbPaFdc7qAajywL5xCAOEoWTeneeeLKi/KN7bEL63WSTCe/i5TlvY+6etmRWWDsr9TpSE3T3G6P8Z8fnn7Gb8X6qZi9XbPtE7JK/QzuMr0OWipA1Cv+avKlOnJvmvvQr5xR+zmuc8SF9QmW7tKIN7fSYUCwCwGInWXUlBps8WRXHOrk7sV+Rk/2M7jC5Wt/UwwBiJ2V15QORbpOA3PehbizP7P6HbXlHSrl/UecTwCiajF5YijSTYwEWmbdpfkRZ3/R6iBbaqIRv6kXDFYyCJr9Zbem/tx2Ti/8s7IFSnOYaiKbUZJ143Y3Hh5tRm+auzcUxghAHKWkM+9Lc7Jb7QeOVtJnEHanCwymfZZ/htLP1vLPxHcoxtLuRYcHnEAAgtXWD79YPVRcQ5iv+HrMwsOj9vuCwToCEOTBSs2r2V1AnwAEEw68gDbr6gT5psb9Dg9FIBgmAMGY+clf29vU1T1feTXnrBMdfUyGh8UEIBg0k35OLi2Ut7zkCaRGYIIABJSpstRoKDQsIwBB33z5p/Otc4pAxgwB7EUAgo75oT87lhYOuEM4n6TGD4pA0GUlaLhGmrfCKJJ9C/SpAMGr2Nt+KS2QnuznghmlzpkEIBJy9elvcTfBjj1fV//vcKV8V2wiXwIQSajt9Hf+BKUa9iqTDAOCLwQgaM02D7n2L9QWLuuW5VGqIMolBCCul8Ppb/92xSgiTpdoEaiyFZtIhQDE9Wo+/Z3f85VeuGRfWRaB4HwCEIT4yV/ZqTlckhEFUc4nAJGES09/xaYf6Em0F6wl+nAmCyGSEKe/I7R7tWkauxfgyQmRyin/UCQHNszQBUbNNBIAlRKAAL4oYqKc+A4zjAGiWso/dLlDLdRDBYg6ST/ULOm5YHAOAQgghAIXjZTjYYoARIVc/jKgskUjfQqonQBE9hZephd701NIR+bFM6pgEDQZM2SVfVk0cjufSnKhAkRVlH+YV1CbPX086wWjagIQuVo+ZFX6gWMVN5CckglA5KqyIauwzqlFIJ9KMiIAUQnlHwA+GQRNxqKHrJacfozYJSkGkpMLAYjsVXueNd2GZDkaSZ8uMIpXcvkHIpgLBgMEICqXa/ox3QZgCwEIsmS6DUvkGvThOAIQZXPXdwAGCEAUrPDBDbfbra36PB/AKoV/UmCQAES1fpd/ch86I/qkIPejCCrk1Emp5ju/Oo2WJMEKWR1FeoThkwoQQCUWRBw1LYonAFGk+TENppGzXZFHUdM07X/xfABFEoAoT9TKh6aRs52jCPIlAAEQ2iuHImtaMMjFCoVZfOMLd21ku6yOopmh0FkN64b1VIAoyZrbfm0/v+9yiew6O2tSAmRHAIL1dhkuaswp55qZC2aBTSohAFEMd32H3Yg+FE8AogwXpJ9dhosac0pi3BaDWghAsNIuU6DNo+Zpr+wrQ0MMAYgC6Pwib3uNA4t+nulPhCIQVfjj6g2Aox2YftpqzcYp0Ls8CQCLqADBVrsEF+mnWnuNAzOeDBYRgMidG1yTt73GgRlPBosIQGRN+oF1DAOidsYAAVxsr3FgxpNBPB8S8qX8Axv5EFEvXWBkyokbgPUEIACgOgIQOVL+gV34sFAvAYjsSD9wDnPBKJkABFAz1wxUSgAiLy5JAdiBAERG3PQUTuaSg2IJQABAdQQgiqH8A+u4LQY1EoDIhclfAOxGAALAJQTVEYDIgvIPAHsSgEif9APXMgyIAglAAATXEtRGACJxyj+QAkUgSiMAkTLpB87kM0VFBCAy5UwNwHoCEAAx9IJRFAGIZDnbAnAUAYg0Gf0Dl/DhohYCEABQHQGIBCn/wIUmPmI6pimHAERepB8AdiAAkZqJS0zpBy6nCEQhBCAAOlxsUD4BiKQo/wBwBgGIdEg/kA5DoSmcAEQinFIBOI8ABABURwAiffq/4BI+epRMACIFRv9AXvRZkz0BiMtJPwCcTQAiWdIPAEcRgAAYYzI8xRKAuJZzKAAXEIC4kNE/kD4fRsokAJGgXE+435qrtwCAOLerN4BqjZV/skw/nejz0weLoijWUiAVINiqX/hRCqIshkJToD+u3gDqlHH55/3P7nf+umIzANhCAIJ5/dDz9Nev4e9/a3SEAaTLGZrz5VH+mQg9HYMZSPqhOHl8ciGSChAnS/ocGh96gA/viXx+YREBCDblnre/Q7iZBUYN3gx5piQCEGdKq/yzsd7z9vfn4zbxGPcDkAsBiMudnX6293O9Rp9X0g+10gtGfgQgTnNl8XyvwT1j0QfqoBeMcghAXOvYq8YdBzWLPgAlUbLnHINXjUelH7kHDuO2GBRCBYhy7DuJXfSBIXrBKIQKECc4tvyz++I9og/MObWmC0dQAeIS+5wolXwgJeaCkRMBiKPtXy2XewDYSADifCuvEeUeSIaRQGRPAOJQO5wiDfEBYHcGQXOcfvpZVvtR8oGEpXVnG1hKBYjkyD2QA71g5E0A4jQz14VyDwCn0QXGQTqXhqPpxxAfyJZeMDKmAsQRogrjSj6QOb1gZEwA4gTdy0H36gLgWgIQR/tMP3IP1MGS0GRAAGJ3AyXxvaKP3AOJ0QtGrgQg9tUd+7w9+gg9AOxOAGIHzbdw+9n95vufm2rgcg9kQhGILAlAbNJ8+/KgH4OWknugCIYBkToBiPWe6eflO2+3n+9heflH7gHgTAIQ+4tMP0IPlEIvGPkRgFjjPYR7r/zTar69Pf47+odCDwApcCsMogxe3A1moH76EXqgDv3zhGFApEsFiFHrKtriDgDpUwHi04rE0ykCbZ8FBmRr8BSiCESiBKDabRm4+DyxDa4DBNRHLxjZ0AVWqe0TNl7PatIPAHlRAarLLhNVXdAB47r3w7lmK2COAFS+vVbncBoDIugFIw+6wIq146pkzl4AFEYFqCi7L8Uq+gDL6QUjAwJQCeQeICV6wciAAJQxuQdIlSIQqTMGKD9H3HLQyQmAqghA2ZB7AGAvusBSJ/cAedILRtJUgNJliA8ATPjWhJ9rKzkqQMlR8gFK8Xo+cx5iT9+aL1+uiEEqQKmQewBY5/3Pq7fgXH/96n5nRSlIBehicg9QNEWgL2pLKgfpB6CwvAikAnQZQ3wA8iK+pGAw/YTlRSAB6GxyD8C15Jis/ftf+1SAdIGdRO4BavUeQmi+vd1+HvkaMk3R3v7+8mVnBHRLAEqOu7IDNWu+fflyaQySbCrRiTizOhnon4/wWNhGCkAH2iv6yD1Apjrpp9XJQCJO8ZaGm3jfmvDPx+eXizKQALS/XXKP0AOHOmICZrUmzleDAejx38M2hbMcl2mWun/9MMdnIIOgN2l+hNv3zy+3n1LlHuiQVNI39h7dh9JPCOH+fzJQKtLJMedTAVqp+fHly9v3TadpuYeyCTHVGsxA0s9eao4vr9YVgVSA1uikn/Y7j+9DvzpO6CFNnbrmBLEGIkkqZ7q/R2UgAeg8Eg+Jeyb79sHGuiaEEG4/t84Cg1mPt24RKIYusMX65Z+nfhFI6CEXgwf20romFYo8yzXfRB8O1A9As0UgAWiNiaZC4iFTAhCvnMrIztIMpAtsN84X5GusrnlfPriNdDgpwQQVoJX6s8Aga4MZaOLANjxoR5IKbDc4DGiiCCQAbRI/XwYStzQAAaRmUQb6x6GbUjzNA8XoH8wOb6BgKkBACCG8338/uP9b9AFyFV8EUgECvnj8dfUWABxPAAIACjFY7BksCwlAwGf/F0CR+hlIAAIAyhF5M1QBCAAoX6cIJABB7fR/AYWJKQIJQMAXb4+rtwDgGK9FIAEIACjNWBHomYEEIKia/i+gNm0GEoAAgAJNjwQSgACAutzfBSComP4voGwTRSABCACojgAEfDIHHijMWBFIAIJK6f8CaiYAAQAlGywCCUAAQOH6GUgAAgCqIwBBjQwAAmrTKQIJQMBvpoAB9RCAAIDqCEBQHf1fQJ1ee8EEIACgOgIQAFCLZxFIAAJCMAIaqIwABHUxAAioXFsEEoAAgOoIQABAXR5vAhDURP8XQEsAAoyABqojAAEA1RGAAIDqCEBQCwOAAJ4EIACgOgIQAFAdAQhqZwoYUCEBCKpgABDAKwEIAKiOAAQAVEcAgqoZAATUSQACAKojAEH5jIAG6BCAAIDqCEAAQHUEICic/i+APgEI6mUKGFAtAQgAqI4ABABURwCCkhkABDBIAIJKGQAE1EwAAgCqIwABANURgKBYBgABjBGAoEYGAAGVE4AAgOoIQABAdQQgAKA6AhCUyQhogAkCEFTHCGgAAQgAqI4ABABURwCCAhkABDBNAIK6GAAEEAQgAKBCAhAAUB0BCACojgAEpTECGmCWAAQVMQIaoCUAAQDVEYAAgOoIQFAUA4AAYghAUAsDgACeBCAAoDoCEABQHQEIymEAEEAkAQiqYAAQwCsBCACojgAEAFRHAILy6f8C6BCAAIDqCEBQCFPAAOIJQABAdQQgAKA6AhAUzghogD4BCEpgABDAIgIQAFAdAQgAqI4ABCUzAAhgkAAEAFRHAAIAqiMAQfZMAQNYSgCCYhkABDBGAIJPP5qrtwCAU/xx9QZAEp7Rp33w/XbhtgBwOBUgGCj8FFAK0v8FMEEAgrwZAQ2wgi4wajdW7PnRhP99FFHe3k7bHADOIABRu++34Qz0v5cupPf33w8kIYAyCECwQC5JyAAggGkCEAwUgf43FyBySUIADDLZFz79aH5PgH/mm3iXJKGxEdAqQADTBCAYtiIDhdNj0GAAkn4AZglAMGVdDApnJSEBCGAdAQjmJRuDBCCAdQQgiLI6A7UOSkICEMA6AhAskFoM6gcg6QcghgAEiyUSg5R/AFYTgGCly2OQAASwmgAEm1wYg/R/AawmAMEOLolBAhDAagIQ7ObkGCQAAawmAMHOTotBnQAk/QDEE4DgECfEIAEIYDUBCA50XAzS/wWwhQAEhzsiBin/AGwhAMF5drynmAAEsIUABGfbJQYJQABbCEBwmXVJqI1BrwFI+gFY6h9XbwDU6+1tzRKIz9h03za0CKBmKkCQiviC0P1r/9fN5xhgISdOSM50EroP3QNVBgJYxFkT0jWYhAQggO2cNSEDn+N+htJPSwYCiPf/9Knbr4WWr4UAAAAASUVORK5CYII="},368:(e,t,n)=>{n.d(t,{Z:()=>A});const A=n.p+"assets/images/multiperson-training-4568726f76653fd3e79915b003dbb259.png"},4969:(e,t,n)=>{n.d(t,{Z:()=>A});const A=n.p+"assets/images/multiperson-3eb19ee130434a8dfacaacfc5560ad60.png"},2507:(e,t,n)=>{n.d(t,{Z:()=>A});const A=n.p+"assets/images/multiperson-dalle-565280b3b0256849af10daa70ad1bb64.jpg"},9533:(e,t,n)=>{n.d(t,{Z:()=>A});const A=n.p+"assets/images/multiperson-img2img-c40deae782ddcfba5ce191126bb0a25e.jpg"},1193:(e,t,n)=>{n.d(t,{Z:()=>A});const A=n.p+"assets/images/multiperson-no-base-prompt-aec03b14af49a52e88ae822b1afe5905.jpg"},3922:(e,t,n)=>{n.d(t,{Z:()=>A});const A=n.p+"assets/images/multiperson-no-input-image-5ce21a715ef2cb16e1cc45389186c803.jpg"},840:(e,t,n)=>{n.d(t,{Z:()=>A});const A=n.p+"assets/images/multiperson-pose-back-to-back-45b9a68c860ba481eeaf646f27e82bc8.webp"},7768:(e,t,n)=>{n.d(t,{Z:()=>A});const A=n.p+"assets/images/multiperson-txt2img-pose-cedced053047e7075ea2a522fc53ab13.jpg"}}]); \ No newline at end of file diff --git a/assets/js/e4fcfa79.c5fc76ab.js b/assets/js/e4fcfa79.7aaaa9e1.js similarity index 51% rename from assets/js/e4fcfa79.c5fc76ab.js rename to assets/js/e4fcfa79.7aaaa9e1.js index cf7bc196..337434f4 100644 --- a/assets/js/e4fcfa79.c5fc76ab.js +++ b/assets/js/e4fcfa79.7aaaa9e1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[8772],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>g});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,g=u["".concat(l,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(g,c(c({ref:t},s),{},{components:r})):n.createElement(g,c({ref:t},s))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:o,c[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Product placement",tags:["ecommerce","background replacement","products","Shopify","photo optimization","product photo"],hide_table_of_contents:!0},c="Product placement for Ecommerce",i={unversionedId:"use-cases/product-shots",id:"use-cases/product-shots",title:"Product placement",description:"Background replacement",source:"@site/docs/use-cases/40-product-shots.md",sourceDirName:"use-cases",slug:"/use-cases/product-shots",permalink:"/docs/use-cases/product-shots",draft:!1,tags:[{label:"ecommerce",permalink:"/docs/tags/ecommerce"},{label:"background replacement",permalink:"/docs/tags/background-replacement"},{label:"products",permalink:"/docs/tags/products"},{label:"Shopify",permalink:"/docs/tags/shopify"},{label:"photo optimization",permalink:"/docs/tags/photo-optimization"},{label:"product photo",permalink:"/docs/tags/product-photo"}],version:"current",sidebarPosition:40,frontMatter:{title:"Product placement",tags:["ecommerce","background replacement","products","Shopify","photo optimization","product photo"],hide_table_of_contents:!0},sidebar:"tutorialSidebar",previous:{title:"Virtual Try-on",permalink:"/docs/use-cases/virtual-try-on"},next:{title:"Toonify",permalink:"/docs/use-cases/toonify"}},l={},p=[{value:"Background replacement",id:"background-replacement",level:2},{value:"Overview",id:"overview",level:2}],s={toc:p},u="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(u,(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"product-placement-for-ecommerce"},"Product placement for Ecommerce"),(0,o.kt)("h2",{id:"background-replacement"},"Background replacement"),(0,o.kt)("h2",{id:"overview"},"Overview"),(0,o.kt)("p",null,"Background replacement can be used for e-commerce product short, marketing campaigns and achieving compelling visuals. In this process the existing background is removed and a new background is generated using the prompt text. Using ",(0,o.kt)("inlineCode",{parentName:"p"},"relight")," controlnet we can blend the product with the new background to achieve realistic results."),(0,o.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr 1fr",gap:"1.5rem"}},(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Input image"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Input image of bottle of whiskey",src:r(6595).Z,width:"580",height:"580"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output with controlnet relight"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Bottle of whiskey background replacement",src:r(2609).Z,width:"512",height:"512"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output with controlnet relight"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Bottle of whiskey background replacement",src:r(7886).Z,width:"768",height:"768"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Input image"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Input image of a shoe",src:r(2265).Z,width:"580",height:"580"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Shoe with background replacement of a forest",src:r(3373).Z,width:"768",height:"768"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Shoe with background replacement of snow",src:r(7023).Z,width:"768",height:"768"})))),(0,o.kt)("p",null,"See example prompts in the ",(0,o.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?controlnet=relight"},"gallery"),"."))}d.isMDXComponent=!0},6595:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-input1-ade7c2a702cccd5e3b429fb746ad37f5.png"},2265:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-input2-2ae76b239f75d4ca95e8575c1b720fcb.png"},3373:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-placement-background-replacement-shoe-out1-15a16a6f6fbe8311f810fb41e9817f8e.jpeg"},7023:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-placement-background-replacement-shoe-out2-9db7f3cb72d61b6226f4790b38c3f798.jpeg"},2609:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-placement-background-replacement-whiskey-out1-3af1e7835749d82838657b97cbc907ff.jpeg"},7886:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-placement-background-replacement-whiskey-out2-5e923f067c8c7cd59ec1c81f49e9aebe.jpeg"}}]); \ No newline at end of file +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[8772],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>g});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,g=u["".concat(l,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(g,c(c({ref:t},s),{},{components:r})):n.createElement(g,c({ref:t},s))}));function g(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:o,c[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"Product placement",tags:["ecommerce","background replacement","products","Shopify","photo optimization","product photo"],hide_table_of_contents:!0},c="Product placement for Ecommerce",i={unversionedId:"use-cases/product-shots",id:"use-cases/product-shots",title:"Product placement",description:"Background replacement",source:"@site/docs/use-cases/40-product-shots.md",sourceDirName:"use-cases",slug:"/use-cases/product-shots",permalink:"/docs/use-cases/product-shots",draft:!1,tags:[{label:"ecommerce",permalink:"/docs/tags/ecommerce"},{label:"background replacement",permalink:"/docs/tags/background-replacement"},{label:"products",permalink:"/docs/tags/products"},{label:"Shopify",permalink:"/docs/tags/shopify"},{label:"photo optimization",permalink:"/docs/tags/photo-optimization"},{label:"product photo",permalink:"/docs/tags/product-photo"}],version:"current",sidebarPosition:40,frontMatter:{title:"Product placement",tags:["ecommerce","background replacement","products","Shopify","photo optimization","product photo"],hide_table_of_contents:!0},sidebar:"tutorialSidebar",previous:{title:"Inpainting and masking",permalink:"/docs/use-cases/inpainting-and-masking"},next:{title:"Toonify",permalink:"/docs/use-cases/toonify"}},l={},p=[{value:"Background replacement",id:"background-replacement",level:2},{value:"Overview",id:"overview",level:2}],s={toc:p},u="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(u,(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"product-placement-for-ecommerce"},"Product placement for Ecommerce"),(0,o.kt)("h2",{id:"background-replacement"},"Background replacement"),(0,o.kt)("h2",{id:"overview"},"Overview"),(0,o.kt)("p",null,"Background replacement can be used for e-commerce product short, marketing campaigns and achieving compelling visuals. In this process the existing background is removed and a new background is generated using the prompt text. Using ",(0,o.kt)("inlineCode",{parentName:"p"},"relight")," controlnet we can blend the product with the new background to achieve realistic results."),(0,o.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr 1fr",gap:"1.5rem"}},(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Input image"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Input image of bottle of whiskey",src:r(6595).Z,width:"580",height:"580"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output with controlnet relight"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Bottle of whiskey background replacement",src:r(2609).Z,width:"512",height:"512"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output with controlnet relight"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Bottle of whiskey background replacement",src:r(7886).Z,width:"768",height:"768"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Input image"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Input image of a shoe",src:r(2265).Z,width:"580",height:"580"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Shoe with background replacement of a forest",src:r(3373).Z,width:"768",height:"768"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Shoe with background replacement of snow",src:r(7023).Z,width:"768",height:"768"})))),(0,o.kt)("p",null,"See example prompts in the ",(0,o.kt)("a",{parentName:"p",href:"https://www.astria.ai/gallery?controlnet=relight"},"gallery"),"."))}d.isMDXComponent=!0},6595:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-input1-ade7c2a702cccd5e3b429fb746ad37f5.png"},2265:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-input2-2ae76b239f75d4ca95e8575c1b720fcb.png"},3373:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-placement-background-replacement-shoe-out1-15a16a6f6fbe8311f810fb41e9817f8e.jpeg"},7023:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-placement-background-replacement-shoe-out2-9db7f3cb72d61b6226f4790b38c3f798.jpeg"},2609:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-placement-background-replacement-whiskey-out1-3af1e7835749d82838657b97cbc907ff.jpeg"},7886:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/product-placement-background-replacement-whiskey-out2-5e923f067c8c7cd59ec1c81f49e9aebe.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/e8766d5f.53ed6d57.js b/assets/js/e8766d5f.f7387663.js similarity index 52% rename from assets/js/e8766d5f.53ed6d57.js rename to assets/js/e8766d5f.f7387663.js index 5ab65b5b..d84e9242 100644 --- a/assets/js/e8766d5f.53ed6d57.js +++ b/assets/js/e8766d5f.f7387663.js @@ -1 +1 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[6450],{3905:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),p=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},l=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,l=o(e,["components","mdxType","originalType","parentName"]),u=p(n),d=a,m=u["".concat(c,".").concat(d)]||u[d]||g[d]||i;return n?r.createElement(m,s(s({ref:t},l),{},{components:n})):r.createElement(m,s({ref:t},l))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,s=new Array(i);s[0]=d;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o[u]="string"==typeof e?e:a,s[1]=o;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>g,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var r=n(7462),a=(n(7294),n(3905));const i={},s="Inpainting and masking",o={unversionedId:"use-cases/inpainting-and-masking",id:"use-cases/inpainting-and-masking",title:"Inpainting and masking",description:"Input image",source:"@site/docs/use-cases/30-inpainting-and-masking.md",sourceDirName:"use-cases",slug:"/use-cases/inpainting-and-masking",permalink:"/docs/use-cases/inpainting-and-masking",draft:!1,tags:[],version:"current",sidebarPosition:30,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Controlnet",permalink:"/docs/use-cases/controlnet"},next:{title:"Virtual Try-on",permalink:"/docs/use-cases/virtual-try-on"}},c={},p=[{value:"Overview",id:"overview",level:2}],l={toc:p},u="wrapper";function g(e){let{components:t,...i}=e;return(0,a.kt)(u,(0,r.Z)({},l,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"inpainting-and-masking"},"Inpainting and masking"),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Input image"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"source.png",src:n(3408).Z,width:"1060",height:"530"}))),(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Mask"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"generated.png",src:n(9098).Z,width:"1060",height:"530"}))),(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Output"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"generated.png",src:n(3175).Z,width:"1060",height:"530"})))),(0,a.kt)("h2",{id:"overview"},"Overview"),(0,a.kt)("p",null,"Inpainting means re-painting of a specific area of an image defined by a mask image. The mask image is a binary image where the area to be inpainted is white and the rest is black. The inpainting process will fill the white area with the content of the surrounding area. Astria has features for automatically creating masks for inpainting - see ",(0,a.kt)("a",{parentName:"p",href:"/docs/features/prompt-masking"},"Prompt Masking"),"."))}g.isMDXComponent=!0},3408:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/inpaint-input-58e7521dea463626a153c16a63c4e26d.png"},9098:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/inpaint-mask-20057dc63fcc851126231618ccf0884d.png"},3175:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/inpaint-output-fab07e2698f26f47fea7e307acc75106.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[6450],{3905:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),p=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},l=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,l=o(e,["components","mdxType","originalType","parentName"]),u=p(n),g=a,m=u["".concat(c,".").concat(g)]||u[g]||d[g]||i;return n?r.createElement(m,s(s({ref:t},l),{},{components:n})):r.createElement(m,s({ref:t},l))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,s=new Array(i);s[0]=g;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o[u]="string"==typeof e?e:a,s[1]=o;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var r=n(7462),a=(n(7294),n(3905));const i={},s="Inpainting and masking",o={unversionedId:"use-cases/inpainting-and-masking",id:"use-cases/inpainting-and-masking",title:"Inpainting and masking",description:"Input image",source:"@site/docs/use-cases/30-inpainting-and-masking.md",sourceDirName:"use-cases",slug:"/use-cases/inpainting-and-masking",permalink:"/docs/use-cases/inpainting-and-masking",draft:!1,tags:[],version:"current",sidebarPosition:30,frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Controlnet",permalink:"/docs/use-cases/controlnet"},next:{title:"Product placement",permalink:"/docs/use-cases/product-shots"}},c={},p=[{value:"Overview",id:"overview",level:2}],l={toc:p},u="wrapper";function d(e){let{components:t,...i}=e;return(0,a.kt)(u,(0,r.Z)({},l,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"inpainting-and-masking"},"Inpainting and masking"),(0,a.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Input image"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"source.png",src:n(3408).Z,width:"1060",height:"530"}))),(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Mask"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"generated.png",src:n(9098).Z,width:"1060",height:"530"}))),(0,a.kt)("div",null,(0,a.kt)("figcaption",null,"Output"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"generated.png",src:n(8639).Z,width:"1536",height:"768"})))),(0,a.kt)("h2",{id:"overview"},"Overview"),(0,a.kt)("p",null,"Inpainting means re-painting of a specific area of an image defined by a mask image. The mask image is a binary image where the area to be inpainted is white and the rest is black. The inpainting process will fill the white area with the content of the surrounding area. Astria has features for automatically creating masks for inpainting - see ",(0,a.kt)("a",{parentName:"p",href:"/docs/features/prompt-masking"},"Prompt Masking"),"."))}d.isMDXComponent=!0},3408:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/inpaint-input-58e7521dea463626a153c16a63c4e26d.png"},9098:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/inpaint-mask-20057dc63fcc851126231618ccf0884d.png"},8639:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/inpaint-output-dd16b5c0ad5e2fe412cdcbbcac28641c.jpg"}}]); \ No newline at end of file diff --git a/assets/js/f2bb83c3.3b8dea7a.js b/assets/js/f2bb83c3.15e57691.js similarity index 63% rename from assets/js/f2bb83c3.3b8dea7a.js rename to assets/js/f2bb83c3.15e57691.js index 987cb396..45f5f7ef 100644 --- a/assets/js/f2bb83c3.3b8dea7a.js +++ b/assets/js/f2bb83c3.15e57691.js @@ -1 +1 @@ -"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[1716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(n),g=o,m=u["".concat(c,".").concat(g)]||u[g]||d[g]||i;return n?r.createElement(m,a(a({ref:t},p),{},{components:n})):r.createElement(m,a({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=g;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:o,a[1]=s;for(var l=2;l{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var r=n(7462),o=(n(7294),n(3905));const i={title:"Controlnet"},a="ControlNet",s={unversionedId:"use-cases/controlnet",id:"use-cases/controlnet",title:"Controlnet",description:"Preserve composition",source:"@site/docs/use-cases/20-controlnet.md",sourceDirName:"use-cases",slug:"/use-cases/controlnet",permalink:"/docs/use-cases/controlnet",draft:!1,tags:[],version:"current",sidebarPosition:20,frontMatter:{title:"Controlnet"},sidebar:"tutorialSidebar",previous:{title:"SDXL training",permalink:"/docs/use-cases/sdxl-training"},next:{title:"Inpainting and masking",permalink:"/docs/use-cases/inpainting-and-masking"}},c={},l=[{value:"Preserve composition",id:"preserve-composition",level:2}],p={toc:l},u="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(u,(0,r.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"controlnet"},"ControlNet"),(0,o.kt)("h2",{id:"preserve-composition"},"Preserve composition"),(0,o.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Input image"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"source.png",src:n(7950).Z,width:"1000",height:"1500"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output with Controlnet img2img tile"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"generated.png",src:n(3701).Z,width:"480",height:"720"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Input image"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"source.png",src:n(9299).Z,width:"1000",height:"1500"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output with Controlnet img2img pose"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"generated.png",src:n(671).Z,width:"480",height:"720"})))))}d.isMDXComponent=!0},7950:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/controlnet-input-47a0e7bd790726c6290ff60c3102257f.jpeg"},9299:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/controlnet-input2-7026826b3c01ab8a035e9d247ae31097.jpeg"},3701:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/controlnet-output-3b470785595068fc9c7c681b1415da1e.png"},671:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/controlnet-output2-ca89564f598070101fb713b4a79ebe22.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[1716],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(n),g=o,m=u["".concat(s,".").concat(g)]||u[g]||d[g]||i;return n?r.createElement(m,a(a({ref:t},p),{},{components:n})):r.createElement(m,a({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=g;var c={};for(var s in t)hasOwnProperty.call(t,s)&&(c[s]=t[s]);c.originalType=e,c[u]="string"==typeof e?e:o,a[1]=c;for(var l=2;l{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>c,toc:()=>l});var r=n(7462),o=(n(7294),n(3905));const i={title:"Controlnet"},a="ControlNet",c={unversionedId:"use-cases/controlnet",id:"use-cases/controlnet",title:"Controlnet",description:"Preserve composition",source:"@site/docs/use-cases/20-controlnet.md",sourceDirName:"use-cases",slug:"/use-cases/controlnet",permalink:"/docs/use-cases/controlnet",draft:!1,tags:[],version:"current",sidebarPosition:20,frontMatter:{title:"Controlnet"},sidebar:"tutorialSidebar",previous:{title:"SDXL training",permalink:"/docs/use-cases/sdxl-training"},next:{title:"Inpainting and masking",permalink:"/docs/use-cases/inpainting-and-masking"}},s={},l=[{value:"Preserve composition",id:"preserve-composition",level:2}],p={toc:l},u="wrapper";function d(e){let{components:t,...i}=e;return(0,o.kt)(u,(0,r.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"controlnet"},"ControlNet"),(0,o.kt)("h2",{id:"preserve-composition"},"Preserve composition"),(0,o.kt)("div",{style:{display:"grid","grid-template-columns":"1fr 1fr",gap:"1.5rem"}},(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Input image"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"source.png",src:n(7950).Z,width:"1000",height:"1500"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output with Controlnet img2img tile"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"generated.png",src:n(3883).Z,width:"1024",height:"1536"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Input image"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"source.png",src:n(9299).Z,width:"1000",height:"1500"}))),(0,o.kt)("div",null,(0,o.kt)("figcaption",null,"Output with Controlnet img2img pose"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"generated.png",src:n(671).Z,width:"480",height:"720"})))))}d.isMDXComponent=!0},7950:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/controlnet-input-47a0e7bd790726c6290ff60c3102257f.jpeg"},9299:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/controlnet-input2-7026826b3c01ab8a035e9d247ae31097.jpeg"},3883:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/controlnet-output-8792495c9018de2ceb447bcce0a99495.jpg"},671:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/controlnet-output2-ca89564f598070101fb713b4a79ebe22.png"}}]); \ No newline at end of file diff --git a/assets/js/main.0bb0ab8d.js b/assets/js/main.0bb0ab8d.js new file mode 100644 index 00000000..4d227812 --- /dev/null +++ b/assets/js/main.0bb0ab8d.js @@ -0,0 +1,2 @@ +/*! For license information please see main.0bb0ab8d.js.LICENSE.txt */ +(self.webpackChunkastria_docs_2=self.webpackChunkastria_docs_2||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"0036dbab":[()=>n.e(6688).then(n.bind(n,3213)),"@site/docs/features/styles.md",3213],"05fe89fc":[()=>n.e(3198).then(n.bind(n,4943)),"@site/docs/features/lcm.md",4943],"0770fcbe":[()=>Promise.all([n.e(532),n.e(293)]).then(n.bind(n,3973)),"@site/docs/api/3-like/0-create.md",3973],"084d163f":[()=>n.e(7721).then(n.bind(n,5227)),"@site/docs/use-cases/0-ai-photoshoot.md",5227],14200528:[()=>n.e(7018).then(n.t.bind(n,2063,19)),"~docs/default/tag-docs-tags-creative-upscaler-b29.json",2063],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,4228)),"@theme/DocCategoryGeneratedIndexPage",4228],17896441:[()=>Promise.all([n.e(532),n.e(9455),n.e(7918)]).then(n.bind(n,7372)),"@theme/DocItem",7372],"18678e9e":[()=>n.e(6667).then(n.bind(n,9313)),"@site/docs/use-cases/room-redesign.md",9313],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1dc92360":[()=>n.e(3469).then(n.t.bind(n,8059,19)),"~docs/default/tag-docs-tags-clarity-085.json",8059],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.bind(n,8391)),"@site/src/pages/index.tsx",8391],"1f391b9e":[()=>Promise.all([n.e(532),n.e(9455),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],"2052cc0c":[()=>n.e(1073).then(n.t.bind(n,9312,19)),"~docs/default/tag-docs-tags-virtual-influencers-a63.json",9312],"228c0e9a":[()=>n.e(2956).then(n.bind(n,7980)),"@site/docs/api/2-pack/0-pack.md",7980],"233522bf":[()=>n.e(1777).then(n.t.bind(n,7709,19)),"~docs/default/tag-docs-tags-lowpoly-a3d.json",7709],"2880056d":[()=>Promise.all([n.e(532),n.e(4071)]).then(n.bind(n,3432)),"@site/docs/api/3-like/1-delete.md",3432],"2ad457a3":[()=>n.e(4353).then(n.t.bind(n,2547,19)),"~docs/default/tag-docs-tags-ecommerce-b43.json",2547],"2c5729fd":[()=>n.e(4046).then(n.t.bind(n,7952,19)),"~docs/default/tag-docs-tags-neonpunk-400.json",7952],"318e8f3b":[()=>n.e(2912).then(n.t.bind(n,3769,19)),"/Users/burg/git/astria-docs2/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"351982cc":[()=>n.e(2923).then(n.t.bind(n,6834,19)),"~docs/default/tag-docs-tags-ai-headshots-a59.json",6834],"35a689f5":[()=>n.e(738).then(n.t.bind(n,5861,19)),"~docs/default/tag-docs-tags-product-photo-ac7.json",5861],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,9861)),"@theme/DocTagsListPage",9861],"38faaa9d":[()=>n.e(3443).then(n.t.bind(n,9302,19)),"~docs/default/tag-docs-tags-style-7b5.json",9302],"393be207":[()=>n.e(7414).then(n.bind(n,3123)),"@site/src/pages/markdown-page.md",3123],"397ab8ba":[()=>n.e(1929).then(n.bind(n,8723)),"@site/docs/use-cases/70-faq.md",8723],"3a5c991a":[()=>n.e(3186).then(n.t.bind(n,6594,19)),"~docs/default/tag-docs-tags-prompt-styles-1a8.json",6594],"3b57aab9":[()=>n.e(9410).then(n.bind(n,6286)),"@site/docs/api/0-tune/0-tune.md",6286],"3ee62890":[()=>n.e(2247).then(n.bind(n,1034)),"@site/docs/use-cases/05-finetuning-guide.md",1034],"41484b8f":[()=>n.e(2532).then(n.bind(n,1954)),"@site/docs/use-cases/60-video-generation.md",1954],"501cbb42":[()=>n.e(4930).then(n.t.bind(n,9492,19)),"~docs/default/tag-docs-tags-shopify-d9d.json",9492],"55960ee5":[()=>n.e(4121).then(n.t.bind(n,8070,19)),"~docs/default/tags-list-current-prop-15a.json",8070],"55d868c3":[()=>n.e(4786).then(n.t.bind(n,7214,19)),"~docs/default/tag-docs-tags-image-enhancement-cf2.json",7214],"57d2d9a8":[()=>n.e(3911).then(n.bind(n,1313)),"@site/docs/features/prompt-masking.md",1313],"5e544de0":[()=>n.e(1960).then(n.t.bind(n,821,19)),"~docs/default/tag-docs-tags-templates-218.json",821],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"61744cd4":[()=>n.e(492).then(n.bind(n,9511)),"@site/docs/features/lora.md",9511],"6540dd0c":[()=>Promise.all([n.e(532),n.e(9075)]).then(n.bind(n,4336)),"@site/docs/features/faceid.md",4336],"67a124c0":[()=>n.e(9743).then(n.t.bind(n,9040,19)),"~docs/default/tag-docs-tags-lineart-83f.json",9040],"6e98b2b4":[()=>n.e(3731).then(n.t.bind(n,5002,19)),"~docs/default/tag-docs-tags-fine-tuning-9b3.json",5002],"6f719c7f":[()=>n.e(9558).then(n.t.bind(n,4531,19)),"~docs/default/category-docs-tutorialsidebar-category-use-cases-1f0.json",4531],"6ff77412":[()=>Promise.all([n.e(532),n.e(674)]).then(n.bind(n,8987)),"@site/docs/api/0-tune/1-create.md",8987],"72ea4575":[()=>n.e(2499).then(n.t.bind(n,6292,19)),"~docs/default/tag-docs-tags-background-replacement-b86.json",6292],"73eac7f9":[()=>n.e(6158).then(n.t.bind(n,9076,19)),"~docs/default/tag-docs-tags-headshots-16b.json",9076],"76161ddb":[()=>n.e(1433).then(n.bind(n,7254)),"@site/docs/features/tiled-upscale.md",7254],"7b50a5fa":[()=>n.e(2831).then(n.t.bind(n,4318,19)),"~docs/default/tag-docs-tags-photographic-d5e.json",4318],"7c7bf7c7":[()=>n.e(2276).then(n.t.bind(n,3946,19)),"~docs/default/tag-docs-tags-avatars-1a3.json",3946],"7e146cad":[()=>n.e(6471).then(n.t.bind(n,765,19)),"~docs/default/category-docs-tutorialsidebar-category-likes-fdf.json",765],"7f726b58":[()=>n.e(2656).then(n.t.bind(n,8578,19)),"~docs/default/category-docs-tutorialsidebar-category-prompts-e72.json",8578],"85356aeb":[()=>n.e(111).then(n.t.bind(n,3942,19)),"~docs/default/tag-docs-tags-super-resolution-7b1.json",3942],"85848f58":[()=>n.e(53).then(n.bind(n,7877)),"@site/docs/api/1-prompt/0-prompt.md",7877],"85dffb37":[()=>n.e(6577).then(n.t.bind(n,8816,19)),"~docs/default/tag-docs-tags-noise-offset-e8c.json",8816],"874195bf":[()=>n.e(3358).then(n.t.bind(n,5775,19)),"~docs/default/category-docs-tutorialsidebar-category-pack-tunes-b69.json",5775],"91b5ff9c":[()=>n.e(8824).then(n.t.bind(n,4284,19)),"~docs/default/tag-docs-tags-oil-painting-a0e.json",4284],"935f2afb":[()=>n.e(2197).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"944a3ab9":[()=>n.e(4820).then(n.t.bind(n,1468,19)),"~docs/default/tag-docs-tags-ai-avatars-cd7.json",1468],"96713d40":[()=>Promise.all([n.e(532),n.e(4762)]).then(n.bind(n,6856)),"@site/docs/api/1-prompt/1-create.md",6856],"96b27e6a":[()=>Promise.all([n.e(532),n.e(9418)]).then(n.bind(n,4252)),"@site/docs/api/0-tune/2-retrieve.md",4252],"988781e2":[()=>n.e(9493).then(n.t.bind(n,6800,19)),"~docs/default/category-docs-tutorialsidebar-category-api-2c3.json",6800],"989eb559":[()=>Promise.all([n.e(532),n.e(6868)]).then(n.bind(n,2334)),"@site/docs/api/1-prompt/2-retrieve.md",2334],"9cceef76":[()=>n.e(6567).then(n.t.bind(n,7933,19)),"~docs/default/category-docs-tutorialsidebar-category-tunes-1e7.json",7933],"9ec5805d":[()=>Promise.all([n.e(532),n.e(6194)]).then(n.bind(n,5602)),"@site/docs/api/2-pack/1-list.md",5602],"9fda4f55":[()=>n.e(4868).then(n.bind(n,2713)),"@site/docs/0-changes.md",2713],a06d9ba5:[()=>n.e(4158).then(n.t.bind(n,7590,19)),"~docs/default/tag-docs-tags-products-166.json",7590],b2a96a7b:[()=>n.e(2747).then(n.t.bind(n,52,19)),"~docs/default/tag-docs-tags-social-profiles-450.json",52],b83527cb:[()=>n.e(2062).then(n.bind(n,7753)),"@site/docs/use-cases/10-sdxl-training.md",7753],b8f8227f:[()=>n.e(9706).then(n.t.bind(n,327,19)),"~docs/default/tag-docs-tags-animated-c7b.json",327],bb6383b9:[()=>n.e(6095).then(n.t.bind(n,5136,19)),"~docs/default/tag-docs-tags-comic-book-40a.json",5136],be959570:[()=>n.e(6547).then(n.t.bind(n,5583,19)),"~docs/default/tag-docs-tags-enhance-40f.json",5583],c231ecf4:[()=>n.e(1599).then(n.bind(n,7020)),"@site/docs/use-cases/50-toonify.md",7020],c438833c:[()=>n.e(7076).then(n.t.bind(n,7018,19)),"~docs/default/tag-docs-tags-ai-photoshoot-31d.json",7018],c6576fc4:[()=>n.e(6599).then(n.t.bind(n,4750,19)),"~docs/default/tag-docs-tags-magnific-6dc.json",4750],c97295c9:[()=>n.e(6708).then(n.t.bind(n,9866,19)),"~docs/default/tag-docs-tags-fantasy-art-cf7.json",9866],cfcbef4e:[()=>Promise.all([n.e(532),n.e(8500)]).then(n.bind(n,2948)),"@site/docs/api/2-pack/2-tunes/0-create.md",2948],d0ae32ce:[()=>n.e(8999).then(n.t.bind(n,8264,19)),"~docs/default/category-docs-tutorialsidebar-category-features-af9.json",8264],d1f3e2f8:[()=>n.e(1293).then(n.bind(n,6864)),"@site/docs/features/backend-v1.md",6864],d2543681:[()=>n.e(6346).then(n.t.bind(n,5209,19)),"~docs/default/tag-docs-tags-line-art-750.json",5209],d3225ce8:[()=>n.e(1124).then(n.bind(n,5050)),"@site/docs/use-cases/masked-portraits.md",5050],d351f0f4:[()=>n.e(9748).then(n.t.bind(n,5114,19)),"~docs/default/tag-docs-tags-upscaling-63d.json",5114],d361fb24:[()=>n.e(9694).then(n.t.bind(n,1700,19)),"~docs/default/tag-docs-tags-lo-ra-433.json",1700],d46b3c8b:[()=>n.e(1807).then(n.t.bind(n,4813,19)),"~docs/default/category-docs-tutorialsidebar-category-packs-15d.json",4813],d537b4da:[()=>n.e(2366).then(n.t.bind(n,5745,19)),"/Users/burg/git/astria-docs2/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],dae0e962:[()=>n.e(1213).then(n.bind(n,3150)),"@site/docs/use-cases/upscale.md",3150],dc0d6ca4:[()=>Promise.all([n.e(532),n.e(9611)]).then(n.bind(n,9919)),"@site/docs/api/1-prompt/4-list.md",9919],df203c0f:[()=>n.e(9924).then(n.bind(n,7068)),"@theme/DocTagDocListPage",7068],e0403869:[()=>n.e(6861).then(n.t.bind(n,2391,19)),"~docs/default/tag-docs-tags-photo-optimization-100.json",2391],e4fcfa79:[()=>n.e(8772).then(n.bind(n,2510)),"@site/docs/use-cases/40-product-shots.md",2510],e8766d5f:[()=>n.e(6450).then(n.bind(n,859)),"@site/docs/use-cases/30-inpainting-and-masking.md",859],eb3f1c80:[()=>n.e(7757).then(n.bind(n,5764)),"@site/docs/features/face-inpainting.md",5764],eeb7a3e9:[()=>n.e(6468).then(n.bind(n,3864)),"@site/docs/features/face-swap.md",3864],f2bb83c3:[()=>n.e(1716).then(n.bind(n,7428)),"@site/docs/use-cases/20-controlnet.md",7428],f994835d:[()=>n.e(6614).then(n.bind(n,480)),"@site/docs/api/0-overview.md",480],fac6c085:[()=>Promise.all([n.e(532),n.e(8154)]).then(n.bind(n,9894)),"@site/docs/api/0-tune/4-list.md",9894],fb723fd6:[()=>Promise.all([n.e(532),n.e(8946)]).then(n.bind(n,6440)),"@site/docs/api/20-sdxl-api.md",6440]};function c(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:c,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,u.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:c,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/docs/tags/",component:f("/docs/tags/","5fd"),exact:!0},{path:"/docs/tags/ai-avatars/",component:f("/docs/tags/ai-avatars/","b6a"),exact:!0},{path:"/docs/tags/ai-headshots/",component:f("/docs/tags/ai-headshots/","896"),exact:!0},{path:"/docs/tags/ai-photoshoot/",component:f("/docs/tags/ai-photoshoot/","069"),exact:!0},{path:"/docs/tags/animated/",component:f("/docs/tags/animated/","5bc"),exact:!0},{path:"/docs/tags/avatars/",component:f("/docs/tags/avatars/","01d"),exact:!0},{path:"/docs/tags/background-replacement/",component:f("/docs/tags/background-replacement/","b02"),exact:!0},{path:"/docs/tags/clarity/",component:f("/docs/tags/clarity/","109"),exact:!0},{path:"/docs/tags/comic-book/",component:f("/docs/tags/comic-book/","aec"),exact:!0},{path:"/docs/tags/creative-upscaler/",component:f("/docs/tags/creative-upscaler/","73f"),exact:!0},{path:"/docs/tags/ecommerce/",component:f("/docs/tags/ecommerce/","7bd"),exact:!0},{path:"/docs/tags/enhance/",component:f("/docs/tags/enhance/","77c"),exact:!0},{path:"/docs/tags/fantasy-art/",component:f("/docs/tags/fantasy-art/","621"),exact:!0},{path:"/docs/tags/fine-tuning/",component:f("/docs/tags/fine-tuning/","33a"),exact:!0},{path:"/docs/tags/headshots/",component:f("/docs/tags/headshots/","eae"),exact:!0},{path:"/docs/tags/image-enhancement/",component:f("/docs/tags/image-enhancement/","abd"),exact:!0},{path:"/docs/tags/line-art/",component:f("/docs/tags/line-art/","fd2"),exact:!0},{path:"/docs/tags/lineart/",component:f("/docs/tags/lineart/","fc8"),exact:!0},{path:"/docs/tags/lo-ra/",component:f("/docs/tags/lo-ra/","88d"),exact:!0},{path:"/docs/tags/lowpoly/",component:f("/docs/tags/lowpoly/","efb"),exact:!0},{path:"/docs/tags/magnific/",component:f("/docs/tags/magnific/","bbf"),exact:!0},{path:"/docs/tags/neonpunk/",component:f("/docs/tags/neonpunk/","512"),exact:!0},{path:"/docs/tags/noise-offset/",component:f("/docs/tags/noise-offset/","9c1"),exact:!0},{path:"/docs/tags/oil-painting/",component:f("/docs/tags/oil-painting/","8bc"),exact:!0},{path:"/docs/tags/photo-optimization/",component:f("/docs/tags/photo-optimization/","514"),exact:!0},{path:"/docs/tags/photographic/",component:f("/docs/tags/photographic/","876"),exact:!0},{path:"/docs/tags/product-photo/",component:f("/docs/tags/product-photo/","a8c"),exact:!0},{path:"/docs/tags/products/",component:f("/docs/tags/products/","397"),exact:!0},{path:"/docs/tags/prompt-styles/",component:f("/docs/tags/prompt-styles/","b46"),exact:!0},{path:"/docs/tags/shopify/",component:f("/docs/tags/shopify/","7dd"),exact:!0},{path:"/docs/tags/social-profiles/",component:f("/docs/tags/social-profiles/","60f"),exact:!0},{path:"/docs/tags/style/",component:f("/docs/tags/style/","b47"),exact:!0},{path:"/docs/tags/super-resolution/",component:f("/docs/tags/super-resolution/","c52"),exact:!0},{path:"/docs/tags/templates/",component:f("/docs/tags/templates/","737"),exact:!0},{path:"/docs/tags/upscaling/",component:f("/docs/tags/upscaling/","501"),exact:!0},{path:"/docs/tags/virtual-influencers/",component:f("/docs/tags/virtual-influencers/","ca5"),exact:!0},{path:"/markdown-page/",component:f("/markdown-page/","693"),exact:!0},{path:"/docs/",component:f("/docs/","2f5"),routes:[{path:"/docs/api/like/create/",component:f("/docs/api/like/create/","9bc"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/like/delete/",component:f("/docs/api/like/delete/","d1e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/overview/",component:f("/docs/api/overview/","e2d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/pack/list/",component:f("/docs/api/pack/list/","55c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/pack/pack/",component:f("/docs/api/pack/pack/","765"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/pack/tunes/create/",component:f("/docs/api/pack/tunes/create/","4dd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/prompt/create/",component:f("/docs/api/prompt/create/","919"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/prompt/list/",component:f("/docs/api/prompt/list/","eb3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/prompt/prompt/",component:f("/docs/api/prompt/prompt/","6e0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/prompt/retrieve/",component:f("/docs/api/prompt/retrieve/","603"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/sdxl-api/",component:f("/docs/api/sdxl-api/","054"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/tune/",component:f("/docs/api/tune/","e82"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/tune/create/",component:f("/docs/api/tune/create/","f94"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/tune/list/",component:f("/docs/api/tune/list/","724"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/api/tune/retrieve/",component:f("/docs/api/tune/retrieve/","b05"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/api/",component:f("/docs/category/api/","009"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/features/",component:f("/docs/category/features/","787"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/likes/",component:f("/docs/category/likes/","286"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/pack-tunes/",component:f("/docs/category/pack-tunes/","b98"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/packs/",component:f("/docs/category/packs/","f98"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/prompts/",component:f("/docs/category/prompts/","e9f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/tunes/",component:f("/docs/category/tunes/","954"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/use-cases/",component:f("/docs/category/use-cases/","285"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/changes/",component:f("/docs/changes/","6f9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/backend-v1/",component:f("/docs/features/backend-v1/","626"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/face-inpainting/",component:f("/docs/features/face-inpainting/","df1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/face-swap/",component:f("/docs/features/face-swap/","283"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/faceid/",component:f("/docs/features/faceid/","2f4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/lcm/",component:f("/docs/features/lcm/","b2b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/lora/",component:f("/docs/features/lora/","0c7"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/prompt-masking/",component:f("/docs/features/prompt-masking/","d75"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/styles/",component:f("/docs/features/styles/","577"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/features/tiled-upscale/",component:f("/docs/features/tiled-upscale/","359"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/ai-photoshoot/",component:f("/docs/use-cases/ai-photoshoot/","2bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/controlnet/",component:f("/docs/use-cases/controlnet/","211"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/faq/",component:f("/docs/use-cases/faq/","d58"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/finetuning-guide/",component:f("/docs/use-cases/finetuning-guide/","263"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/inpainting-and-masking/",component:f("/docs/use-cases/inpainting-and-masking/","bc4"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/masked-portraits/",component:f("/docs/use-cases/masked-portraits/","d48"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/product-shots/",component:f("/docs/use-cases/product-shots/","57e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/room-redesign/",component:f("/docs/use-cases/room-redesign/","9f8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/sdxl-training/",component:f("/docs/use-cases/sdxl-training/","d13"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/toonify/",component:f("/docs/use-cases/toonify/","7dd"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/upscale/",component:f("/docs/use-cases/upscale/","dda"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/use-cases/video-generation/",component:f("/docs/use-cases/video-generation/","9c7"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/",component:f("/","c50"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},7221:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(6657),n(2497),n(3310),n(8320),n(2295),n(8203)];var c=n(723),u=n(6550),d=n(8790);function f(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var p=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),k=n(3320),E=n(8780),S=n(197);function _(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.Z)(),{pathname:r}=(0,u.TH)();return e+(0,E.applyTrailingSlash)((0,h.Z)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function C(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(_,null),r.createElement(S.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var L=n(8934),O=n(8940);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const R=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:a}),P("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class I extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(R,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const D=I,M="__docusaurus-base-url-issue-banner-container",j="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${M}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[F]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,B(e))),r.createElement("div",{id:M}))}function $(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement(U,null):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var q=n(4763),G=n(2389);function Z(){const e=(0,G.Z)();return r.createElement(m.Z,null,r.createElement("html",{"data-has-hydrated":e}))}function V(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement(q.Z,null,r.createElement(O.M,null,r.createElement(L.t,null,r.createElement(f,null,r.createElement(H,null),r.createElement(C,null),r.createElement($,null),r.createElement(D,{location:A(t)},e)),r.createElement(Z,null))))}var W=n(6887);const Y=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(9670);const X=new Set,Q=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!Q.has(e)&&!X.has(e))(e))return!1;X.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Y(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!Q.has(e))(e)&&(Q.add(e),N(e))},te=Object.freeze(ee);if(l.Z.canUseDOM){window.docusaurus=te;const e=a.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(V,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-google-gtag":{"default":{"trackingID":["G-S3TGRCPBP8"],"anonymizeIP":false,"id":"default"}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"changes","docs":[{"id":"api/like/create","path":"/docs/api/like/create","sidebar":"tutorialSidebar"},{"id":"api/like/delete","path":"/docs/api/like/delete","sidebar":"tutorialSidebar"},{"id":"api/overview","path":"/docs/api/overview","sidebar":"tutorialSidebar"},{"id":"api/pack/list","path":"/docs/api/pack/list","sidebar":"tutorialSidebar"},{"id":"api/pack/pack","path":"/docs/api/pack/pack","sidebar":"tutorialSidebar"},{"id":"api/pack/tunes/create","path":"/docs/api/pack/tunes/create","sidebar":"tutorialSidebar"},{"id":"api/prompt/create","path":"/docs/api/prompt/create","sidebar":"tutorialSidebar"},{"id":"api/prompt/list","path":"/docs/api/prompt/list","sidebar":"tutorialSidebar"},{"id":"api/prompt/prompt","path":"/docs/api/prompt/prompt","sidebar":"tutorialSidebar"},{"id":"api/prompt/retrieve","path":"/docs/api/prompt/retrieve","sidebar":"tutorialSidebar"},{"id":"api/sdxl-api","path":"/docs/api/sdxl-api","sidebar":"tutorialSidebar"},{"id":"api/tune/create","path":"/docs/api/tune/create","sidebar":"tutorialSidebar"},{"id":"api/tune/list","path":"/docs/api/tune/list","sidebar":"tutorialSidebar"},{"id":"api/tune/retrieve","path":"/docs/api/tune/retrieve","sidebar":"tutorialSidebar"},{"id":"api/tune/tune","path":"/docs/api/tune/","sidebar":"tutorialSidebar"},{"id":"changes","path":"/docs/changes","sidebar":"tutorialSidebar"},{"id":"features/backend-v1","path":"/docs/features/backend-v1","sidebar":"tutorialSidebar"},{"id":"features/face-inpainting","path":"/docs/features/face-inpainting","sidebar":"tutorialSidebar"},{"id":"features/face-swap","path":"/docs/features/face-swap","sidebar":"tutorialSidebar"},{"id":"features/faceid","path":"/docs/features/faceid","sidebar":"tutorialSidebar"},{"id":"features/lcm","path":"/docs/features/lcm","sidebar":"tutorialSidebar"},{"id":"features/lora","path":"/docs/features/lora","sidebar":"tutorialSidebar"},{"id":"features/prompt-masking","path":"/docs/features/prompt-masking","sidebar":"tutorialSidebar"},{"id":"features/styles","path":"/docs/features/styles","sidebar":"tutorialSidebar"},{"id":"features/tiled-upscale","path":"/docs/features/tiled-upscale","sidebar":"tutorialSidebar"},{"id":"use-cases/ai-photoshoot","path":"/docs/use-cases/ai-photoshoot","sidebar":"tutorialSidebar"},{"id":"use-cases/controlnet","path":"/docs/use-cases/controlnet","sidebar":"tutorialSidebar"},{"id":"use-cases/faq","path":"/docs/use-cases/faq","sidebar":"tutorialSidebar"},{"id":"use-cases/finetuning-guide","path":"/docs/use-cases/finetuning-guide","sidebar":"tutorialSidebar"},{"id":"use-cases/inpainting-and-masking","path":"/docs/use-cases/inpainting-and-masking","sidebar":"tutorialSidebar"},{"id":"use-cases/masked-portraits","path":"/docs/use-cases/masked-portraits","sidebar":"tutorialSidebar"},{"id":"use-cases/product-shots","path":"/docs/use-cases/product-shots","sidebar":"tutorialSidebar"},{"id":"use-cases/room-redesign","path":"/docs/use-cases/room-redesign","sidebar":"tutorialSidebar"},{"id":"use-cases/sdxl-training","path":"/docs/use-cases/sdxl-training","sidebar":"tutorialSidebar"},{"id":"use-cases/toonify","path":"/docs/use-cases/toonify","sidebar":"tutorialSidebar"},{"id":"use-cases/upscale","path":"/docs/use-cases/upscale","sidebar":"tutorialSidebar"},{"id":"use-cases/video-generation","path":"/docs/use-cases/video-generation","sidebar":"tutorialSidebar"},{"id":"/category/use-cases","path":"/docs/category/use-cases","sidebar":"tutorialSidebar"},{"id":"/category/features","path":"/docs/category/features","sidebar":"tutorialSidebar"},{"id":"/category/api","path":"/docs/category/api","sidebar":"tutorialSidebar"},{"id":"/category/tunes","path":"/docs/category/tunes","sidebar":"tutorialSidebar"},{"id":"/category/prompts","path":"/docs/category/prompts","sidebar":"tutorialSidebar"},{"id":"/category/packs","path":"/docs/category/packs","sidebar":"tutorialSidebar"},{"id":"/category/pack-tunes","path":"/docs/category/pack-tunes","sidebar":"tutorialSidebar"},{"id":"/category/likes","path":"/docs/category/likes","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/changes","label":"changes"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.4.3","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.3"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.3"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.3"},"docusaurus-plugin-google-gtag":{"type":"package","name":"@docusaurus/plugin-google-gtag","version":"2.4.3"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.3"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.3"},"docusaurus-plugin-image-zoom":{"type":"package","name":"docusaurus-plugin-image-zoom","version":"1.0.1"}}}'),c={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(412),o=n(5742),i=n(8780),l=n(7961);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(c,{error:t}))}function c(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function u(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.Z,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(u,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),c=n(412);const u=a.createContext({collectLink:()=>{}});var d=n(4996);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:k}=(0,d.C)(),E=(0,a.useContext)(u),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const _=f||p;const x=(0,s.Z)(_),C=_?.replace("pathname://","");let T=void 0!==C?(A=C,b&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;T&&x&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const L=(0,a.useRef)(!1),O=n?o.OL:o.rU,P=c.Z.canUseIntersectionObserver,R=(0,a.useRef)(),N=()=>{L.current||null==T||(window.docusaurus.preload(T),L.current=!0)};(0,a.useEffect)((()=>(!P&&x&&null!=T&&window.docusaurus.prefetch(T),()=>{P&&R.current&&R.current.disconnect()})),[R,T,P,x]);const I=T?.startsWith("#")??!1,D=!T||!x||I;return D||h||E.collectLink(T),D?a.createElement("a",(0,r.Z)({ref:S,href:T},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(O,(0,r.Z)({},v,{onMouseEnter:N,onTouchStart:N,innerRef:e=>{S.current=e,P&&e&&x&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),R.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const p=a.forwardRef(f)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>l});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const l=a?`${a}.${o}`:o;r(i)?e(i,l):t[l]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>f,_r:()=>u,Jo:()=>h,zh:()=>d,yW:()=>m,gB:()=>p});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function p(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},6657:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={onRouteDidUpdate(e){let{location:t,previousLocation:n}=e;!n||t.pathname===n.pathname&&t.search===n.search&&t.hash===n.hash||setTimeout((()=>{window.gtag("event","page_view",{page_title:document.title,page_location:window.location.href,page_path:t.pathname+t.search+t.hash})}))}}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a={iconExternalLink:"iconExternalLink_nPIU"};function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},7961:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(7462),s=n(6550),c=n(5999),u=n(5936);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&f(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:a}=p();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var h=n(5281),b=n(9727);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(g,{className:v.skipToContent})}var w=n(6668),k=n(9689);function E(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S.closeButton,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:T.announcementBarPlaceholder}),r.createElement(C,{className:T.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:T.announcementBarClose}))}var L=n(3163),O=n(2466);var P=n(902),R=n(3102);const N=r.createContext(null);function I(e){let{children:t}=e;const n=function(){const e=(0,L.e)(),t=(0,R.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,P.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(N.Provider,{value:n},t)}function D(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function M(){const e=(0,r.useContext)(N);if(!e)throw new P.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,R.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:D(o)})),[a,o,t])}function j(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=M();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var z=n(2949),F=n(2389);function B(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function H(e){let{className:t,buttonClassName:n,value:o,onChange:i}=e;const l=(0,F.Z)(),s=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===o?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)($.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",$.toggleButton,!l&&$.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===o?"light":"dark"),disabled:!l,title:s,"aria-label":s,"aria-live":"polite"},r.createElement(B,{className:(0,a.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(U,{className:(0,a.Z)($.toggleIcon,$.darkToggleIcon)})))}const q=r.memo(H),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Z(e){let{className:t}=e;const n=(0,w.L)().navbar.style,a=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:i}=(0,z.I)();return a?null:r.createElement(q,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:o,onChange:i})}var V=n(1327);function W(){return r.createElement(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Y(){const e=(0,L.e)();return r.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(W,null),r.createElement(Z,{className:"margin-right--md"}),r.createElement(Y,null))}var X=n(9960),Q=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const f=(0,Q.Z)(a),p=(0,Q.Z)(t),m=(0,Q.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,J.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(te.Z,c&&{width:12,height:12}))};return o?r.createElement(X.Z,(0,l.Z)({href:u?m:o},d,h)):r.createElement(X.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},d,h))}function re(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ne,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ae(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function oe(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ae:re;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(6043),le=n(8596),se=n(2263);function ce(e,t){return e.some((e=>function(e,t){return!!(0,le.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[c]),r.createElement("div",{ref:c,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(ne,(0,l.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(_e,(0,l.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:o,onClick:i,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ne,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),p()}}),c.children??c.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(_e,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function fe(e){let{mobile:t=!1,...n}=e;const a=t?de:ue;return r.createElement(a,n)}var pe=n(4711);function me(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ge="iconLanguage_nlXk";var he=n(1875);const be={searchBox:"searchBox_ZlJk"};function ve(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,be.searchBox)},t)}var ye=n(143),we=n(3438);var ke=n(373);const Ee=e=>e.docs.find((t=>t.id===e.mainDocId));const Se={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,se.Z)(),f=(0,pe.l)(),{search:p,hash:m}=(0,s.TH)(),g=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(fe,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:ge}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ve,{className:n},r.createElement(he.Z,null))},dropdown:fe,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.vY)(t,a);return null===s?null:r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ye.Iw)(a),s=(0,we.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(oe,(0,l.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,we.lO)(a)[0],s=t??i.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(oe,(0,l.Z)({},o,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...u}=e;const{search:d,hash:f}=(0,s.TH)(),p=(0,ye.Iw)(n),m=(0,ye.gB)(n),{savePreferredVersionName:g}=(0,ke.J)(n),h=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??Ee(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...i],b=(0,we.lO)(n)[0],v=t&&h.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:Ee(b).path;return h.length<=1?r.createElement(oe,(0,l.Z)({},u,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(fe,(0,l.Z)({},u,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function _e(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Se[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function xe(){const e=(0,L.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(_e,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ce(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Te(){const e=0===(0,w.L)().navbar.items.length,t=M();return r.createElement(r.Fragment,null,!e&&r.createElement(Ce,{onClick:()=>t.hide()}),t.content)}function Ae(){const e=(0,L.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(j,{header:r.createElement(K,null),primaryMenu:r.createElement(xe,null),secondaryMenu:r.createElement(Te,null)}):null}const Le={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Oe(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Pe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,L.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,O.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,"aria-label":(0,c.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Le.navbarHideable,!s&&Le.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Oe,{onClick:i.toggle}),r.createElement(Ae,null))}var Re=n(8780);const Ne={errorBoundaryError:"errorBoundaryError_a6uf"};function Ie(e){return r.createElement("button",(0,l.Z)({type:"button"},e),r.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function De(e){let{error:t}=e;const n=(0,Re.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Ne.errorBoundaryError},n)}class Me extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const je="right";function ze(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Fe(){const{toggle:e,shown:t}=(0,L.e)();return r.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(ze,null))}const Be={colorModeToggle:"colorModeToggle_DEke"};function Ue(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Me,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(_e,e)))))}function $e(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function He(){const e=(0,L.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??je)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement($e,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Fe,null),r.createElement(W,null),r.createElement(Ue,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Ue,{items:a}),r.createElement(Z,{className:Be.colorModeToggle}),!o&&r.createElement(ve,null,r.createElement(he.Z,null)))})}function qe(){return r.createElement(Pe,null,r.createElement(He,null))}function Ge(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,c=(0,Q.Z)(n),u=(0,Q.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(X.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?u:a}:{to:c},s),o,a&&!(0,J.Z)(a)&&r.createElement(te.Z,null))}function Ze(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ge,{item:t}))}function Ve(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ze,{key:t,item:e})))))}function We(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Ve,{key:t,column:e}))))}function Ye(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ke(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ge,{item:t})}function Xe(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ke,{item:e}),t.length!==n+1&&r.createElement(Ye,null))))))}function Qe(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(We,{columns:t}):r.createElement(Xe,{links:t})}var Je=n(941);const et={footerLogoLink:"footerLogoLink_BH7S"};function tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,Q.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Je.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function nt(e){let{logo:t}=e;return t.href?r.createElement(X.Z,{href:t.href,className:et.footerLogoLink,target:t.target},r.createElement(tt,{logo:t})):r.createElement(tt,{logo:t})}function rt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function at(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function ot(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(at,{style:o,links:n&&n.length>0&&r.createElement(Qe,{links:n}),logo:a&&r.createElement(nt,{logo:a}),copyright:t&&r.createElement(rt,{copyright:t})})}const it=r.memo(ot),lt=(0,P.Qc)([z.S,k.pl,O.OC,ke.L5,i.VC,function(e){let{children:t}=e;return r.createElement(R.n2,null,r.createElement(L.M,null,r.createElement(I,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ct(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Ie,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(De,{error:t})))))}const ut={mainWrapper:"mainWrapper_z2l0"};function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:c}=e;return(0,b.t)(),r.createElement(st,null,r.createElement(i.d,{title:s,description:c}),r.createElement(y,null),r.createElement(A,null),r.createElement(qe,null),r.createElement("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,ut.mainWrapper,l)},r.createElement(o.Z,{fallback:e=>r.createElement(ct,e)},t)),!n&&r.createElement(it,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),c=n(941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(c.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:c}}=(0,s.L)(),{imageClassName:d,titleClassName:f,...p}=e,m=(0,i.Z)(c?.href||"/"),g=n?"":t,h=c?.alt??g;return a.createElement(o.Z,(0,r.Z)({to:m},p,c?.target&&{target:c.target}),c&&a.createElement(u,{logo:c,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:f},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:c,className:u,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],u)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>s,z:()=>h});var r=n(7462),a=n(7294),o=n(412),i=n(1442);const l="ease-in-out";function s(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?c:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??l}`,height:`${t}px`}}function s(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return d(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function p(e){if(!o.Z.canUseDOM)return e?c:u}function m(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const c=(0,a.useRef)(null);return f({collapsibleRef:c,collapsed:n,animation:o}),a.createElement(t,{ref:c,style:s?void 0:p(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(c.current,n),i?.(n))},className:l},r)}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(m,(0,r.Z)({},n,{collapsed:l})):null}function h(e){let{lazy:t,...n}=e;const r=t?g:m;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>p});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.WA)("docusaurus.announcement.dismiss"),c=(0,o.WA)("docusaurus.announcement.id"),u=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{o(u())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),c="theme",u=(0,i.WA)(c),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{u.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||s.current?s.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>h});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(3438),s=n(902),c=n(12);const u=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,c.WA)(u(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(u(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(u(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const p=r.createContext(null);function m(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(p.Provider,{value:n},t)}function h(e){let{children:t}=e;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(p);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(null===e)throw new a.i6("DocsVersionProvider");return e}},3163:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(7294),a=n(3102),o=n(7524),i=n(1980),l=n(6668),s=n(902);const c=r.createContext(void 0);function u(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[s,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:s})),[e,n,u,s])}function d(e){let{children:t}=e;const n=u();return r.createElement(c.Provider,{value:n},t)}function f(){const e=r.useContext(c);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function c(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},3438:(e,t,n)=>{"use strict";n.d(t,{MN:()=>x,Wl:()=>m,_F:()=>v,cE:()=>f,hI:()=>_,jA:()=>g,lO:()=>k,oz:()=>E,s1:()=>w,vY:()=>S,xz:()=>p});var r=n(7294),a=n(6550),o=n(8790),i=n(143),l=n(373),s=n(4477),c=n(1116),u=n(7392),d=n(8596);const f=!!i._r;function p(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function g(){const{pathname:e}=(0,a.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>v(e,t)));function v(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||b(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function w(){const e=(0,c.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function E(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,c=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:c}}function x(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},1980:(e,t,n)=>{"use strict";n.d(t,{Rb:()=>l,_X:()=>s});var r=n(7294),a=n(6550),o=n(1688),i=n(902);function l(e){!function(e){const t=(0,a.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,a.k6)();return(0,o.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}},7392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>u,VC:()=>p});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),c=n(2263);function u(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const u=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>c,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(u()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function f(){const e=c(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function p(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>u});var r=n(7294),a=n(1688);const o="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function l(e){if(void 0===e&&(e=o),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const c={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(t?.persistence);return null===n?c:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?c:u(e,t))).current(),o=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,a.useSyncExternalStore)(o,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(2263),a=n(6550),o=n(8780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:l}}=(0,r.Z)(),{pathname:s}=(0,a.TH)(),c=(0,o.applyTrailingSlash)(s,{trailingSlash:n,baseUrl:e}),u=l===i?e:e.replace(`/${l}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},8203:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(7582),a=r.__importDefault(n(6809)),o=r.__importDefault(n(2557)),{themeConfig:i}=a.default;function l(e){var t,n;return document.querySelector('html[data-theme="dark"]')?(null===(t=e.background)||void 0===t?void 0:t.dark)||"rgb(50, 50, 50)":(null===(n=e.background)||void 0===n?void 0:n.light)||"rgb(255, 255, 255)"}t.default=function(){if("undefined"==typeof window)return null;let e;const{zoom:t}=i,{selector:n=".markdown img",config:r={}}=t||{};if(!t)return null;r.background=l(t);var a=new MutationObserver((function(){e&&e.update({background:l(t)})}));const s=document.querySelector("html");return a.observe(s,{attributes:!0,attributeFilter:["data-theme"]}),setTimeout((()=>{e&&e.detach(),e=(0,o.default)(n,r)}),1e3),{onRouteUpdate(){setTimeout((()=>{e&&e.detach(),e=(0,o.default)(n,r)}),1e3)}}}()},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>S,q_:()=>L,ob:()=>g,PP:()=>P,Ep:()=>m,Hp:()=>h});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function l(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const s=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=l(t),a=l(n);return r!==t||a!==n?e(r,a):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var c=n(8776);function u(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function g(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function h(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&s(e.state,t.state)}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=g(e,t,f(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,l],u=0;(s=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2557:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>c});var r=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},a=window.Promise||function(e){function t(){}e(t,t)},c=function(){for(var e=arguments.length,t=Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:{}).target,t=function(){var e={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},t=void 0,n=void 0;if(b.container)if(b.container instanceof Object)t=(e=r({},e,b.container)).width-e.left-e.right-2*b.margin,n=e.height-e.top-e.bottom-2*b.margin;else{var a=(o(b.container)?b.container:document.querySelector(b.container)).getBoundingClientRect(),l=a.width,s=a.height,c=a.left,u=a.top;e=r({},e,{width:l,height:s,left:c,top:u})}t=t||e.width-2*b.margin,n=n||e.height-2*b.margin;var d=v.zoomedHd||v.original,f=i(d)?t:d.naturalWidth||t,p=i(d)?n:d.naturalHeight||n,m=d.getBoundingClientRect(),g=m.top,h=m.left,y=m.width,w=m.height,k=Math.min(Math.max(y,f),t)/y,E=Math.min(Math.max(w,p),n)/w,S=Math.min(k,E),_="scale("+S+") translate3d("+((t-y)/2-h+b.margin+e.left)/S+"px, "+((n-w)/2-g+b.margin+e.top)/S+"px, 0)";v.zoomed.style.transform=_,v.zoomedHd&&(v.zoomedHd.style.transform=_)};return new a((function(n){if(e&&-1===p.indexOf(e))n(w);else{if(v.zoomed)n(w);else{if(e)v.original=e;else{if(!(p.length>0))return void n(w);var r=p;v.original=r[0]}if(v.original.dispatchEvent(s("medium-zoom:open",{detail:{zoom:w}})),h=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,g=!0,v.zoomed=function(e){var t=e.getBoundingClientRect(),n=t.top,r=t.left,a=t.width,o=t.height,i=e.cloneNode(),l=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,s=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;return i.removeAttribute("id"),i.style.position="absolute",i.style.top=n+l+"px",i.style.left=r+s+"px",i.style.width=a+"px",i.style.height=o+"px",i.style.transform="",i}(v.original),document.body.appendChild(y),b.template){var a=o(b.template)?b.template:document.querySelector(b.template);v.template=document.createElement("div"),v.template.appendChild(a.content.cloneNode(!0)),document.body.appendChild(v.template)}if(v.original.parentElement&&"PICTURE"===v.original.parentElement.tagName&&v.original.currentSrc&&(v.zoomed.src=v.original.currentSrc),document.body.appendChild(v.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),v.original.classList.add("medium-zoom-image--hidden"),v.zoomed.classList.add("medium-zoom-image--opened"),v.zoomed.addEventListener("click",d),v.zoomed.addEventListener("transitionend",(function e(){g=!1,v.zoomed.removeEventListener("transitionend",e),v.original.dispatchEvent(s("medium-zoom:opened",{detail:{zoom:w}})),n(w)})),v.original.getAttribute("data-zoom-src")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("srcset"),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.removeAttribute("loading"),v.zoomedHd.src=v.zoomed.getAttribute("data-zoom-src"),v.zoomedHd.onerror=function(){clearInterval(i),console.warn("Unable to reach the zoom image target "+v.zoomedHd.src),v.zoomedHd=null,t()};var i=setInterval((function(){v.zoomedHd.complete&&(clearInterval(i),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",d),document.body.appendChild(v.zoomedHd),t())}),10)}else if(v.original.hasAttribute("srcset")){v.zoomedHd=v.zoomed.cloneNode(),v.zoomedHd.removeAttribute("sizes"),v.zoomedHd.removeAttribute("loading");var l=v.zoomedHd.addEventListener("load",(function(){v.zoomedHd.removeEventListener("load",l),v.zoomedHd.classList.add("medium-zoom-image--opened"),v.zoomedHd.addEventListener("click",d),document.body.appendChild(v.zoomedHd),t()}))}else t()}}}))},d=function(){return new a((function(e){if(!g&&v.original){g=!0,document.body.classList.remove("medium-zoom--opened"),v.zoomed.style.transform="",v.zoomedHd&&(v.zoomedHd.style.transform=""),v.template&&(v.template.style.transition="opacity 150ms",v.template.style.opacity=0),v.original.dispatchEvent(s("medium-zoom:close",{detail:{zoom:w}})),v.zoomed.addEventListener("transitionend",(function t(){v.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(v.zoomed),v.zoomedHd&&document.body.removeChild(v.zoomedHd),document.body.removeChild(y),v.zoomed.classList.remove("medium-zoom-image--opened"),v.template&&document.body.removeChild(v.template),g=!1,v.zoomed.removeEventListener("transitionend",t),v.original.dispatchEvent(s("medium-zoom:closed",{detail:{zoom:w}})),v.original=null,v.zoomed=null,v.zoomedHd=null,v.template=null,e(w)}))}else e(w)}))},f=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).target;return v.original?d():u({target:e})},p=[],m=[],g=!1,h=0,b=n,v={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(t)?b=t:(t||"string"==typeof t)&&c(t);var y=function(e){var t=document.createElement("div");return t.classList.add("medium-zoom-overlay"),t.style.background=e,t}((b=r({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},b)).background);document.addEventListener("click",(function(e){var t=e.target;t!==y?-1!==p.indexOf(t)&&f({target:t}):d()})),document.addEventListener("keyup",(function(e){var t=e.key||e.keyCode;"Escape"!==t&&"Esc"!==t&&27!==t||d()})),document.addEventListener("scroll",(function(){if(!g&&v.original){var e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(h-e)>b.scrollOffset&&setTimeout(d,150)}})),window.addEventListener("resize",d);var w={open:u,close:d,toggle:f,update:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e;if(e.background&&(y.style.background=e.background),e.container&&e.container instanceof Object&&(t.container=r({},b.container,e.container)),e.template){var n=o(e.template)?e.template:document.querySelector(e.template);t.template=n}return b=r({},b,t),p.forEach((function(e){e.dispatchEvent(s("medium-zoom:update",{detail:{zoom:w}}))})),w},clone:function(){return e(r({},b,arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}))},attach:c,detach:function(){for(var e=arguments.length,t=Array(e),n=0;n0?t.reduce((function(e,t){return[].concat(e,l(t))}),[]):p;return r.forEach((function(e){e.classList.remove("medium-zoom-image"),e.dispatchEvent(s("medium-zoom:detach",{detail:{zoom:w}}))})),p=p.filter((function(e){return-1===r.indexOf(e)})),w},on:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return p.forEach((function(r){r.addEventListener("medium-zoom:"+e,t,n)})),m.push({type:"medium-zoom:"+e,listener:t,options:n}),w},off:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return p.forEach((function(r){r.removeEventListener("medium-zoom:"+e,t,n)})),m=m.filter((function(n){return!(n.type==="medium-zoom:"+e&&n.listener.toString()===t.toString())})),w},getOptions:function(){return b},getImages:function(){return p},getZoomedImage:function(){return v.original}};return w}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,i(e,u,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=f(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=E.value.length,E=E.next){var _=E.value;if(t.length>e.length)return;if(!(_ instanceof a)){var x,C=1;if(v){if(!(x=o(k,S,e,b))||x.index>=e.length)break;var T=x.index,A=x.index+x[0].length,L=S;for(L+=E.value.length;T>=L;)L+=(E=E.next).value.length;if(S=L-=E.value.length,E.value instanceof a)continue;for(var O=E;O!==t.tail&&(Ld.reach&&(d.reach=I);var D=E.prev;if(R&&(D=s(t,D,R),S+=R.length),c(t,D,C),E=s(t,D,new a(f,h?r.tokenize(P,h):P,y,P)),N&&s(t,E,N),C>1){var M={cause:f+","+m,reach:I};i(e,t,n,E.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function c(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function u(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,u={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return u[n]=a,n})).join(""),n,r),f=Object.keys(u);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=c(u[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],f="string"==typeof c?c:c.content,p=t(r,u),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof c?l.splice.apply(l,[s,1].concat(v)):c.content=v}}else c.content&&i(c.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),a=n(9642),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),o.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6726},6500:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,c),t(s.optional,c),t(s.modify,c)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(s);i=i.map(c),l=(l||[]).map(c);var u=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var f,p=r(s),m=u;a(m);){for(var g in f={},m){var h=s[g];t(h&&h.modify,(function(e){e in d&&(f[e]=!0)}))}for(var b in d)if(!(b in u))for(var v in p(b))if(v in u){f[b]=!0;break}for(var y in m=f)u[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,l={},s={};function c(e){if(e in l)return l[e];s[e]=!0;var a,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)a=r(e);else{var f=i(u.map((function(e){var t=c(e);return delete s[e],t})));o?a=o(f,(function(){return r(e)})):r(e)}return l[e]=a}for(var u in n)c(u);var d=[];for(var f in s)d.push(l[f]);return i(d)}(p,u,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n