Learn how lazy evaluation works in ComfyUI (v0.2.0+). Discover how to defer input evaluation, optimize VRAM usage, and implement lazy: True in custom nodes.
By default, all required and optional inputs are evaluated before a node can be run. Sometimes, however, an
input won’t necessarily be used and evaluating it would result in unnecessary processing. Here are some examples
of nodes where lazy evaluation may be beneficial:
A ModelMergeSimple node where the ratio is either 0.0 (in which case the first model doesn’t need to be loaded)
or 1.0 (in which case the second model doesn’t need to be loaded).
Interpolation between two images where the ratio (or mask) is either entirely 0.0 or entirely 1.0.
A Switch node where one input determines which of the other inputs will be passed through.
There is very little cost in making an input lazy. If it’s something you can do, you generally should.
There are two steps to making an input a “lazy” input. They are:
Mark the input as lazy in the dictionary returned by INPUT_TYPES
Define a method named check_lazy_status (note: not a class method) that will be called prior to evaluation to determine if any more inputs are necessary.
To demonstrate these, we’ll make a “MixImages” node that interpolates between two images according to a mask. If the entire mask is 0.0, we don’t need to evaluate any part of the tree leading up to the second image. If the entire mask is 1.0, we can skip evaluating the first image.
A check_lazy_status method is called if there are one or more lazy inputs that are not yet available. This method receives the same arguments as the standard execution function. All available inputs are passed in with their final values while unavailable lazy inputs have a value of None.The responsibility of the check_lazy_status function is to return a list of the names of any lazy inputs that are needed to proceed. If all lazy inputs are available, the function should return an empty list.Note that check_lazy_status may be called multiple times. (For example, you might find after evaluating one lazy input that you need to evaluate another.)
Note that because the function uses actual input values, it is not a class method.
def check_lazy_status(self, mask, image1, image2): mask_min = mask.min() mask_max = mask.max() needed = [] if image1 is None and (mask_min != 1.0 or mask_max != 1.0): needed.append("image1") if image2 is None and (mask_min != 0.0 or mask_max != 0.0): needed.append("image2") return needed
While Lazy Evaluation is the recommended way to “disable” part of a graph, there are times when you want to disable an OUTPUT node that doesn’t implement lazy evaluation itself. If it’s an output node that you developed yourself, you should just add lazy evaluation as follows:
Add a required (if this is a new node) or optional (if you care about backward compatibility) input for enabled that defaults to True
Make all other inputs lazy inputs
Only evaluate the other inputs if enabled is True
If it’s not a node you control, you can make use of a comfy_execution.graph.ExecutionBlocker. This special object can be returned as an output from any socket. Any nodes which receive an ExecutionBlocker as input will skip execution and return that ExecutionBlocker for any outputs.
There is intentionally no way to stop an ExecutionBlocker from propagating forward. If you think you want this, you should really be using Lazy Evaluation.
There are two ways to construct and use an ExecutionBlocker
Pass None into the constructor to silently block execution. This is useful for cases where blocking execution is part of a successful run — like disabling an output.
Pass a string into the constructor to display an error message when a node is blocked due to receiving the object. This can be useful if you want to display a meaningful error message if someone uses a meaningless output — for example, the VAE output when loading a model that doesn’t contain VAEs.
def load_checkpoint(self, ckpt_name): ckpt_path = folder_paths.get_full_path("checkpoints", ckpt_name) model, clip, vae = load_checkpoint(ckpt_path) if vae is None: # This error is more useful than a "'NoneType' has no attribute" error # in a later node vae = ExecutionBlocker(f"No VAE contained in the loaded model {ckpt_name}") return (model, clip, vae)
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ComfyUI","colors":{"primary":"#49378B","light":"#F2FF59","dark":"#F2FF59"},"logo":{"light":"https://mintcdn.com/dripart/WCFdTagRdhtvk9-o/logo/light.svg?fit=max\u0026auto=format\u0026n=WCFdTagRdhtvk9-o\u0026q=85\u0026s=ec112de87239058f5a931a7e4b594965","dark":"https://mintcdn.com/dripart/QzWbjSCBG7w61rR3/logo/dark.svg?fit=max\u0026auto=format\u0026n=QzWbjSCBG7w61rR3\u0026q=85\u0026s=62b4d879fb3aadbd7a468d1539032d6f","href":"/"},"favicon":"https://mintcdn.com/dripart/maKDA164-rrTfyxY/favicon.ico?fit=max\u0026auto=format\u0026n=maKDA164-rrTfyxY\u0026q=85\u0026s=94f3a697cf4c9a1ee3961b69219d0942","appearance":{"default":"dark"},"navbar":{"links":[{"href":"https://blog.comfy.org/?utm_source=docs","label":"Blog"},{"href":"/tutorials/partner-nodes/pricing","label":"Pricing"},{"href":"https://platform.comfy.org/?utm_source=docs","label":"Platform"},{"href":"https://comfy.org/download?utm_source=docs","label":"Download"}],"primary":{"type":"button","label":"Comfy Cloud","href":"https://comfy.org/cloud?utm_source=docs"}},"footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"Resources","items":[{"label":"installation","href":"/installation/system_requirements"},{"label":"Tutorials","href":"/tutorials/basic/text-to-image"},{"label":"Development","href":"/development/overview"}]},{"header":"Products","items":[{"label":"Features","href":"https://www.comfy.org/?utm_source=docs"},{"label":"Gallery","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"Download","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"Company","items":[{"label":"About","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"Careers","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"Terms of Service","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"Privacy Policy","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"search":{"prompt":"Search Comfy documentation..."},"seo":{"metatags":{"googlebot":"max-video-preview:0"}},"icons":{"library":"fontawesome"},"integrations":{"ga4":{"measurementId":"G-MXC01ZDDHQ"},"posthog":{"apiKey":"phc_iKfK86id4xVYws9LybMje0h44eGtfwFgRPIBehmy8rO"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"languages":[{"language":"en","href":""},{"language":"zh","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"资源","items":[{"label":"安装","href":"/zh/installation/system_requirements"},{"label":"教程","href":"/zh/tutorials/basic/text-to-image"},{"label":"开发","href":"/zh/development/overview"}]},{"header":"产品","items":[{"label":"功能","href":"https://www.comfy.org/?utm_source=docs"},{"label":"画廊","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"下载","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"公司","items":[{"label":"关于","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"招聘","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"服务条款","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"隐私政策","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"href":"zh"},{"language":"ja","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"リソース","items":[{"label":"インストール","href":"/ja/installation/system_requirements"},{"label":"チュートリアル","href":"/ja/tutorials/basic/text-to-image"},{"label":"開発","href":"/ja/development/overview"}]},{"header":"プロダクト","items":[{"label":"機能","href":"https://www.comfy.org/?utm_source=docs"},{"label":"ギャラリー","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"ダウンロード","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"会社情報","items":[{"label":"概要","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"採用情報","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"利用規約","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"プライバシーポリシー","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"navbar":{"links":[{"href":"/ja/tutorials/partner-nodes/pricing","label":"料金"},{"href":"https://comfy.org/download?utm_source=docs","label":"ダウンロード"}],"primary":{"type":"button","label":"Comfy Cloud","href":"https://comfy.org/cloud?utm_source=docs"}},"href":"ja"},{"language":"ko","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"리소스","items":[{"label":"설치","href":"/ko/installation/system_requirements"},{"label":"튜토리얼","href":"/ko/tutorials/basic/text-to-image"},{"label":"개발","href":"/ko/development/overview"}]},{"header":"제품","items":[{"label":"기능","href":"https://www.comfy.org/?utm_source=docs"},{"label":"갤러리","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"다운로드","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"회사 정보","items":[{"label":"소개","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"채용","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"이용약관","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"개인정보 처리방침","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"navbar":{"links":[{"href":"/ko/tutorials/partner-nodes/pricing","label":"가격 정책"},{"href":"https://comfy.org/download?utm_source=docs","label":"다운로드"}],"primary":{"type":"button","label":"Comfy Cloud","href":"https://comfy.org/cloud?utm_source=docs"}},"href":"ko"},{"language":"es","href":"es"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dripart","hasAudioNarration":false,"actualSubdomain":"dripart","customDomains":["docs.comfy.org"],"gitSource":{"type":"github","owner":"comfy-org","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae6e8231da8d7d6e777b709","collectionId":"f86e91ee-3193-4a9b-a51b-52273820ddac","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae6e8231da8d7d6e777b709"},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ae6e8231da8d7d6e777b709","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"en","tag":"Built-in Nodes","count":1133},{"language":"ja","tag":"組み込みノード","count":1133},{"language":"zh","tag":"内置节点","count":1133},{"language":"en","tag":"Nodes","count":1132},{"language":"ja","tag":"ノード","count":1132},{"language":"zh","tag":"节点","count":1132},{"language":"ko","tag":"내장 노드 (Built-in Nodes)","count":1091},{"language":"ko","tag":"노드","count":1090},{"language":"es","tag":"Nodos integrados","count":1025},{"language":"es","tag":"Nodos","count":1024},{"language":"en","tag":"Tutorials","count":406},{"language":"es","tag":"Tutoriales","count":401},{"language":"en","tag":"Model","count":377},{"language":"es","tag":"Modelo","count":377},{"language":"ja","tag":"Model","count":377},{"language":"ko","tag":"Model","count":377},{"language":"zh","tag":"Model","count":377},{"language":"en","tag":"Image","count":347},{"language":"en","tag":"Partner","count":322},{"language":"ja","tag":"Partner","count":322},{"language":"ko","tag":"Partner","count":322},{"language":"zh","tag":"Partner","count":322},{"language":"es","tag":"Partner","count":320},{"language":"es","tag":"Imagen","count":314},{"language":"ja","tag":"はじめに","count":301},{"language":"ko","tag":"시작하기","count":301},{"language":"zh","tag":"开始使用","count":301},{"language":"ja","tag":"API 開発","count":294},{"language":"ko","tag":"API 개발","count":294},{"language":"zh","tag":"API 开发","count":294},{"language":"en","tag":"Video","count":271},{"language":"es","tag":"Comfy Router","count":267},{"language":"ja","tag":"Comfy Router","count":257},{"language":"ko","tag":"Comfy Router","count":257},{"language":"zh","tag":"Comfy Router","count":257},{"language":"en","tag":"Comfy Router","count":252},{"language":"es","tag":"Video","count":246},{"language":"es","tag":"Models","count":230},{"language":"ja","tag":"Models","count":229},{"language":"ko","tag":"Models","count":229},{"language":"zh","tag":"Models","count":229},{"language":"es","tag":"All Models","count":227},{"language":"en","tag":"Models","count":223},{"language":"en","tag":"All Models","count":220},{"language":"ja","tag":"画像","count":202},{"language":"ko","tag":"이미지","count":202},{"language":"zh","tag":"图像","count":202},{"language":"ja","tag":"Video","count":177},{"language":"zh","tag":"Video","count":177},{"language":"ko","tag":"Video","count":160}],"searchSettings":{"maxResults":10}},"assistantConfig":{"enableStarterQuestions":false},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":":root{--ink-900:#151417;--hub-shell-light:#f7f6f9;--accent-purple:#49378b;--accent-yellow:#f2ff59;--primary:73 55 139!important;--primary-light:242 255 89!important;--primary-dark:242 255 89!important}html.dark{--primary:242 255 89!important;--background-dark:14 14 13!important}html.dark body{background-color:#0e0e0d!important}html.dark #navbar,html.dark #navbar-transition{background-color:var(--ink-900)!important}html.dark #sidebar,html.dark #sidebar-content{background-color:rgb(var(--background-dark))!important}html.dark #navbar,html.dark #navbar-transition{box-shadow:none!important;filter:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}html.dark #navbar-transition{border-bottom:1px solid rgba(255,255,255,.08)!important;opacity:1!important}html.dark img.nav-logo{filter:none}html.dark #sidebar-content a:not([aria-current=page]){color:rgba(255,255,255,.72)!important}html.dark #sidebar-content a:not([aria-current=page]) *{color:inherit!important}html.dark #sidebar-content a[aria-current=page]{color:var(--accent-yellow)!important;background-color:rgba(242,255,89,.1)!important}html.dark #sidebar-content a[aria-current=page] *{color:inherit!important}html.dark .nav-tabs-item[data-active],html.dark mobile-nav-tabs-item[data-active]{color:var(--accent-yellow)!important}html.dark #navbar a[href*=\"comfy.org/cloud\"] span.absolute{background-color:var(--accent-yellow)!important}html.dark #navbar a[href*=\"comfy.org/cloud\"] span.text-white{color:#151417!important}html:not(.dark) #background-color,html:not(.dark) #navbar,html:not(.dark) #navbar-transition,html:not(.dark) #sidebar,html:not(.dark) #sidebar-content{background-color:var(--hub-shell-light)!important}html:not(.dark) .nav-tabs-item[data-active],html:not(.dark) mobile-nav-tabs-item[data-active],html:not(.dark) nav-dropdown-item[data-active]{background-color:transparent!important;box-shadow:none!important;color:var(--accent-purple)!important;font-weight:600!important}html:not(.dark) #navbar a[href*=\"comfy.org/cloud\"] *,html:not(.dark) #sidebar-content a[aria-current=page] *,html:not(.dark) .nav-tabs-item[data-active] *,html:not(.dark) mobile-nav-tabs-item[data-active] *,html:not(.dark) nav-dropdown-item[data-active] *{color:inherit!important}html:not(.dark) #sidebar-content li:has(>a[aria-current=page]){background-color:transparent!important;box-shadow:none!important}html:not(.dark) #sidebar-content a[aria-current=page]{color:var(--accent-purple)!important;background-color:rgba(73,55,139,.1)!important;font-weight:600!important}html:not(.dark) toc-item[data-active-deepest],html:not(.dark) toc-item[data-active-deepest] a,html:not(.dark) toc-item[data-active],html:not(.dark) toc-item[data-active] a{background-color:transparent!important;color:var(--accent-purple)!important;font-weight:600!important}html:not(.dark) #content-area :where(h1, h2, h3, h4, h5, h6),html:not(.dark) #header :where(h1, h2, h3, h4, h5, h6){color:#151417!important}html:not(.dark) #navbar a[href*=\"comfy.org/cloud\"]{background-color:transparent!important;color:var(--accent-purple)!important;border-radius:.75rem;box-shadow:inset 0 0 0 1px var(--accent-purple)!important}html:not(.dark) #navbar a[href*=\"comfy.org/cloud\"] span.absolute{background-color:transparent!important}#sidebar .sticky.top-0.pointer-events-none.bg-linear-to-b{background-image:none!important}@media (min-width:1024px){#navbar.is-not-custom.is-not-center+div:has(>#sidebar),.max-w-8xl.mx-auto,.max-w-8xl.mx-auto.relative{max-width:none!important;width:100%!important;margin-left:0!important;margin-right:0!important;padding-left:0!important;padding-right:0!important}#navbar [class*=mx-4],#navbar [class*=px-12]{padding-left:0!important;padding-right:1.5rem!important;margin-left:0!important;margin-right:0!important}#navbar .nav-logo,#navbar a.select-none{margin-left:1rem!important}#navbar .nav-tabs{padding-left:2rem!important}#sidebar{left:0!important;margin-left:0!important;box-shadow:none!important}#sidebar-content{margin-left:0!important;padding-left:1rem!important;box-sizing:border-box!important}#navbar,#navbar-transition{left:0!important;right:0!important;width:100%!important;max-width:none!important}#content-area{margin-left:0!important;padding-left:18rem!important}#sidebar.sticky~#content-container #content-area{padding-left:2rem!important;padding-right:2rem!important}#body-content,#content-area,#content-container{max-width:none!important;width:100%!important}:root{--content-width:100%;--sidebar-width:18rem}#sidebar[style],nav#sidebar{left:0!important;right:auto!important;margin-left:0!important;transform:none!important}#navbar li.navbar-link:has(a[href*=\"comfy.org/download\"]){margin-right:0!important}#navbar a[href*=\"comfy.org/download\"]{box-sizing:border-box;border:1px solid rgb(255 255 255/.22);border-radius:.75rem;padding:7px .875rem!important;color:#fff!important;font-size:.875rem;line-height:1.25rem}html:not(.dark) #navbar a[href*=\"comfy.org/download\"]{border-color:rgb(0 0 0/.16);color:#151417!important}#navbar a[href*=\"comfy.org/download\"]:hover{background:rgb(255 255 255/.06)}html:not(.dark) #navbar a[href*=\"comfy.org/download\"]:hover{background:rgb(0 0 0/.04)}#navbar .flex.space-x-6>.whitespace-nowrap.hidden,#navbar li.navbar-link:has(a[href*=\"comfy.org/download\"])+.whitespace-nowrap{margin-left:.5rem!important}}body:has(.router-api-reference-marker) #content,body:has(.router-api-reference-marker) #header{max-width:48rem}body:has(.router-api-reference-marker) #content-area table,body:has(.router-provider-coverage-marker) #content-area table{width:100%;table-layout:auto}body:has(.router-api-reference-marker) #content-area td,body:has(.router-api-reference-marker) #content-area th{min-width:4rem!important;overflow-wrap:anywhere}body:has(.router-api-reference-marker) #content-area table:has(th:nth-child(6)) td:nth-child(3),body:has(.router-api-reference-marker) #content-area table:has(th:nth-child(6)) th:nth-child(3){min-width:5rem!important}@media (max-width:1535px){body:has(.router-api-reference-marker) #content-side-layout{display:none!important}}body:has(.router-provider-coverage-marker) #content,body:has(.router-provider-coverage-marker) #header{max-width:64rem}body:has(.router-provider-coverage-marker) #content-area td,body:has(.router-provider-coverage-marker) #content-area th{min-width:5rem!important;overflow-wrap:anywhere}body:has(.router-provider-coverage-marker) #content-area td:first-child,body:has(.router-provider-coverage-marker) #content-area th:first-child{min-width:12rem!important}body:has(.router-quickstart-marker) [data-component-part=card-content] [data-component-part=code-block-root][style*=\"height: 190px\"],body:has(.router-quickstart-marker) [data-component-part=card-content] [data-component-part=code-block-root][style*=\"height:190px\"]{height:86px!important}"},{"filePath":"samples-cards.css","content":".sample-card-grid{display:grid;gap:20px;grid-template-columns:repeat(2,minmax(0,1fr));margin-top:28px}.sample-card{min-width:0;perspective:1200px}.sample-card-inner{height:565px;position:relative;transform-style:preserve-3d;transition:transform 560ms cubic-bezier(.2,.75,.3,1)}.sample-card[data-flipped=true] .sample-card-inner{transform:rotateY(180deg)}.sample-card-face{backface-visibility:hidden;background:#fff;border:1px solid #e5e1eb;border-radius:12px;box-sizing:border-box;height:100%;inset:0;overflow:hidden;position:absolute;width:100%}.sample-card-front{display:flex;flex-direction:column}.sample-card-back{opacity:0;pointer-events:none;transform:rotateY(180deg);visibility:hidden}.sample-card[data-flipped=true] .sample-card-front{pointer-events:none;transition:visibility 0s linear 280ms;visibility:hidden}.sample-card[data-flipped=true][data-active-path=api] .sample-card-back[data-sample-path=api],.sample-card[data-flipped=true][data-active-path=endpoint] .sample-card-back[data-sample-path=endpoint]{opacity:1;pointer-events:auto;visibility:visible}.sample-card-preview{border-bottom:1px solid #e5e1eb;cursor:pointer;display:block;width:100%}.sample-card-body{display:flex;flex:1;flex-direction:column;padding:20px}.sample-card-body h2,.sample-path-body h2{color:#49378b;font-size:18px;font-weight:700;letter-spacing:-.02em;margin:0 0 8px}.sample-path-body h2{text-align:center}.sample-card-body>p{color:#5f5966;font-size:14px;line-height:1.55;margin:0;min-height:66px}.sample-card-actions,.sample-card-links{display:flex;gap:8px;margin-top:20px}.sample-card-actions button{background:#fff;border:1px solid #cfc8de;border-radius:6px;color:#49378b;cursor:pointer;flex:1;font-size:13px;font-weight:700;padding:10px 12px}.sample-card-links{border-top:1px solid #eeeaf1;margin-top:16px;padding-top:12px}.sample-card-links a{color:#625b6c;font-size:12px;font-weight:650;text-decoration:none}.sample-card-links span{color:#b3adba}.sample-path-body{padding:20px}.sample-path-body>button{background:0 0;border:0;color:#625b6c;cursor:pointer;font-size:12px;font-weight:700;padding:0}.sample-path-eyebrow{color:#857a9e;font-size:10px;font-weight:700;letter-spacing:.08em;margin:19px 0 5px;text-align:center;text-transform:uppercase}.sample-path-body>p:not(.sample-path-eyebrow){color:#5f5966;font-size:12px;line-height:1.5;margin:0 0 15px}.sample-path-steps{display:grid;gap:8px}.sample-path-step{align-items:center;background:#faf9fc;border:1px solid #e5e1ea;border-radius:8px;display:flex;gap:10px;padding:10px 11px}.sample-path-number{align-items:center;background:#49378b;border-radius:999px;color:#fff;display:inline-flex;flex:0 0 21px;font-size:11px;font-weight:700;height:21px;justify-content:center}.sample-path-copy{flex:1;min-width:0}.sample-path-copy strong{color:#312c36;display:block;font-size:12px}.sample-path-copy span{color:#706a75;display:block;font-size:11px;line-height:1.35;margin-top:2px}.sample-path-step a{color:#49378b;flex:0 0 auto;font-size:11px;font-weight:700;text-decoration:none}@media (max-width:768px){.sample-card-grid{grid-template-columns:1fr}.sample-card-inner{height:clamp(620px,180vw,760px)}}"}],"page":{"pagePath":"custom-nodes/backend/lazy_evaluation","slug":"/custom-nodes/backend/lazy_evaluation","pageMetadata":{"title":"Lazy Evaluation","description":"Learn how lazy evaluation works in ComfyUI (v0.2.0+). Discover how to defer input evaluation, optimize VRAM usage, and implement lazy: True in custom nodes.","href":"/custom-nodes/backend/lazy_evaluation"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how lazy evaluation works in ComfyUI (v0.2.0+). Discover how to defer input evaluation, optimize VRAM usage, and implement lazy: True in custom nodes.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,em:`em`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`lazy-evaluation`,children:`Lazy Evaluation`}),`\n`,_jsxs(_components.p,{children:[`By default, all `,_jsx(_components.code,{children:`required`}),` and `,_jsx(_components.code,{children:`optional`}),` inputs are evaluated before a node can be run. Sometimes, however, an\ninput won’t necessarily be used and evaluating it would result in unnecessary processing. Here are some examples\nof nodes where lazy evaluation may be beneficial:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`A `,_jsx(_components.code,{children:`ModelMergeSimple`}),` node where the ratio is either `,_jsx(_components.code,{children:`0.0`}),` (in which case the first model doesn’t need to be loaded)\nor `,_jsx(_components.code,{children:`1.0`}),` (in which case the second model doesn’t need to be loaded).`]}),`\n`,_jsxs(_components.li,{children:[`Interpolation between two images where the ratio (or mask) is either entirely `,_jsx(_components.code,{children:`0.0`}),` or entirely `,_jsx(_components.code,{children:`1.0`}),`.`]}),`\n`,_jsx(_components.li,{children:`A Switch node where one input determines which of the other inputs will be passed through.`}),`\n`]}),`\n`,_jsx(Tip,{children:`There is very little cost in making an input lazy. If it’s something you can do, you generally should.`}),`\n`,_jsx(Heading,{level:`3`,id:`creating-lazy-inputs`,children:`Creating Lazy Inputs`}),`\n`,_jsx(_components.p,{children:`There are two steps to making an input a “lazy” input. They are:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Mark the input as lazy in the dictionary returned by `,_jsx(_components.code,{children:`INPUT_TYPES`})]}),`\n`,_jsxs(_components.li,{children:[`Define a method named `,_jsx(_components.code,{children:`check_lazy_status`}),` (note: `,_jsx(_components.em,{children:`not`}),` a class method) that will be called prior to evaluation to determine if any more inputs are necessary.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`To demonstrate these, we’ll make a “MixImages” node that interpolates between two images according to a mask. If the entire mask is `,_jsx(_components.code,{children:`0.0`}),`, we don’t need to evaluate any part of the tree leading up to the second image. If the entire mask is `,_jsx(_components.code,{children:`1.0`}),`, we can skip evaluating the first image.`]}),`\n`,_jsxs(Heading,{level:`4`,id:`defining-input_types`,children:[`Defining `,_jsx(_components.code,{children:`INPUT_TYPES`})]}),`\n`,_jsxs(_components.p,{children:[`Declaring that an input is lazy is as simple as adding a `,_jsx(_components.code,{children:`lazy: True`}),` key-value pair to the input’s options dictionary.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`@`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`classmethod`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` INPUT_TYPES`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`cls`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"required\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"image1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: (`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"IMAGE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"lazy\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"image2\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: (`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"IMAGE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"lazy\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"mask\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: (`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"MASK\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`In this example, `,_jsx(_components.code,{children:`image1`}),` and `,_jsx(_components.code,{children:`image2`}),` are both marked as lazy inputs, but `,_jsx(_components.code,{children:`mask`}),` will always be evaluated.`]}),`\n`,_jsxs(Heading,{level:`4`,id:`defining-check_lazy_status`,children:[`Defining `,_jsx(_components.code,{children:`check_lazy_status`})]}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.code,{children:`check_lazy_status`}),` method is called if there are one or more lazy inputs that are not yet available. This method receives the same arguments as the standard execution function. All available inputs are passed in with their final values while unavailable lazy inputs have a value of `,_jsx(_components.code,{children:`None`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`The responsibility of the `,_jsx(_components.code,{children:`check_lazy_status`}),` function is to return a list of the names of any lazy inputs that are needed to proceed. If all lazy inputs are available, the function should return an empty list.`]}),`\n`,_jsxs(_components.p,{children:[`Note that `,_jsx(_components.code,{children:`check_lazy_status`}),` may be called multiple times. (For example, you might find after evaluating one lazy input that you need to evaluate another.)`]}),`\n`,_jsxs(Tip,{children:[`Note that because the function uses actual input values, it is `,_jsx(_components.em,{children:`not`}),` a class method.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` check_lazy_status`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`mask`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`image1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`image2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_min `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask.min()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_max `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask.max()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` needed `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` []`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` image1 `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`is`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` and`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (mask_min `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1.0`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` or`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_max `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` needed.append(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"image1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` image2 `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`is`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` and`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (mask_min `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.0`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` or`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_max `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` needed.append(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"image2\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` needed`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`full-example`,children:`Full Example`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`37`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`37`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`class`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` LazyMixImages`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` @`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:`classmethod`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` INPUT_TYPES`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`cls`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"required\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"image1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: (`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"IMAGE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"lazy\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"image2\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: (`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"IMAGE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"lazy\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`True`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}),`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"mask\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: (`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"MASK\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` RETURN_TYPES`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"IMAGE\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` FUNCTION`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"mix\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:` CATEGORY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Examples\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` check_lazy_status`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`mask`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`image1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`image2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_min `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask.min()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_max `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask.max()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` needed `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` []`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` image1 `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`is`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` and`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (mask_min `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1.0`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` or`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_max `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` needed.append(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"image1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` image2 `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`is`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` and`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (mask_min `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.0`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` or`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_max `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` needed.append(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"image2\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` needed`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Not trying to handle different batch sizes here just to keep the demo simple`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` mix`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`mask`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`image1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`image2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_min `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask.min()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_max `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask.max()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_min `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`==`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.0`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` and`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_max `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`==`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (image1,)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` elif`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_min `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`==`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1.0`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` and`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask_max `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`==`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (image2,)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` result `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` image1 `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`. `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`-`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`+`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` image2 `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` mask,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (result[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],)`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`execution-blocking`,children:`Execution Blocking`}),`\n`,_jsxs(_components.p,{children:[`While Lazy Evaluation is the recommended way to “disable” part of a graph, there are times when you want to disable an `,_jsx(_components.code,{children:`OUTPUT`}),` node that doesn’t implement lazy evaluation itself. If it’s an output node that you developed yourself, you should just add lazy evaluation as follows:`]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Add a required (if this is a new node) or optional (if you care about backward compatibility) input for `,_jsx(_components.code,{children:`enabled`}),` that defaults to `,_jsx(_components.code,{children:`True`})]}),`\n`,_jsxs(_components.li,{children:[`Make all other inputs `,_jsx(_components.code,{children:`lazy`}),` inputs`]}),`\n`,_jsxs(_components.li,{children:[`Only evaluate the other inputs if `,_jsx(_components.code,{children:`enabled`}),` is `,_jsx(_components.code,{children:`True`})]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`If it’s not a node you control, you can make use of a `,_jsx(_components.code,{children:`comfy_execution.graph.ExecutionBlocker`}),`. This special object can be returned as an output from any socket. Any nodes which receive an `,_jsx(_components.code,{children:`ExecutionBlocker`}),` as input will skip execution and return that `,_jsx(_components.code,{children:`ExecutionBlocker`}),` for any outputs.`]}),`\n`,_jsxs(Tip,{children:[_jsx(_components.strong,{children:`There is intentionally no way to stop an ExecutionBlocker from propagating forward.`}),` If you think you want this, you should really be using Lazy Evaluation.`]}),`\n`,_jsx(Heading,{level:`3`,id:`usage`,children:`Usage`}),`\n`,_jsxs(_components.p,{children:[`There are two ways to construct and use an `,_jsx(_components.code,{children:`ExecutionBlocker`})]}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Pass `,_jsx(_components.code,{children:`None`}),` into the constructor to silently block execution. This is useful for cases where blocking execution is part of a successful run — like disabling an output.`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` silent_passthrough`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`passthrough`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`blocked`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` blocked:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (ExecutionBlocker(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` else`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (passthrough,)`})]}),`\n`]})})}),`\n`,_jsxs(_components.ol,{start:`2`,children:[`\n`,_jsxs(_components.li,{children:[`Pass a string into the constructor to display an error message when a node is blocked due to receiving the object. This can be useful if you want to display a meaningful error message if someone uses a meaningless output — for example, the `,_jsx(_components.code,{children:`VAE`}),` output when loading a model that doesn’t contain VAEs.`]}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`def`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` load_checkpoint`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`self`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ckpt_name`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`):`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ckpt_path `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` folder_paths.get_full_path(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"checkpoints\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, ckpt_name)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` model, clip, vae `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` load_checkpoint(ckpt_path)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` vae `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`is`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` None`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # This error is more useful than a \"'NoneType' has no attribute\" error`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # in a later node`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` vae `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ExecutionBlocker(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"No VAE contained in the loaded model `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`ckpt_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` return`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (model, clip, vae)`})]}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Lazy Evaluation","description":"Learn how lazy evaluation works in ComfyUI (v0.2.0+). Discover how to defer input evaluation, optimize VRAM usage, and implement lazy: True in custom nodes.","href":"/custom-nodes/backend/lazy_evaluation"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Lazy Evaluation","slug":"lazy-evaluation","depth":2,"children":[{"title":"Creating Lazy Inputs","slug":"creating-lazy-inputs","depth":3,"children":[]},{"title":"Defining INPUT_TYPES","slug":"defining-input_types","depth":4,"children":[]},{"title":"Defining check_lazy_status","slug":"defining-check_lazy_status","depth":4,"children":[]},{"title":"Full Example","slug":"full-example","depth":3,"children":[]}]},{"title":"Execution Blocking","slug":"execution-blocking","depth":2,"children":[{"title":"Usage","slug":"usage","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/dripart/9d6bf2b2531e904c/giscus-comments.js","/_mintlify/custom/dripart/bd0341946f3c75a6/syft.js","/_mintlify/custom/dripart/042392a43b5e681e/samples-cards.js"],"subdomain":"dripart","siteName":"ComfyUI","title":"Lazy Evaluation - ComfyUI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/custom-nodes/backend/lazy_evaluation","matchLevel":0},"zh":{"href":"/zh/custom-nodes/backend/lazy_evaluation","matchLevel":1},"ja":{"href":"/ja/custom-nodes/backend/lazy_evaluation","matchLevel":1},"ko":{"href":"/ko/custom-nodes/backend/lazy_evaluation","matchLevel":1},"es":{"href":"/es/custom-nodes/backend/lazy_evaluation","matchLevel":1}}},"lastModified":"2026-08-13T17:33:04.002Z","originalFileLocation":"custom-nodes/backend/lazy_evaluation.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how lazy evaluation works in ComfyUI (v0.2.0+). Discover how to defer input evaluation, optimize VRAM usage, and implement lazy: True in custom nodes.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ComfyUI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Lazy Evaluation - ComfyUI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how lazy evaluation works in ComfyUI (v0.2.0+). Discover how to defer input evaluation, optimize VRAM usage, and implement lazy: True in custom nodes.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ComfyUI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dripart.mintlify.app/_mintlify/api/og/v2?division=Python+%28Backend%29\u0026amp;title=Lazy+Evaluation\u0026amp;description=Learn+how+lazy+evaluation+works+in+ComfyUI+%28v0.2.0%2B%29.+Discover+how+to+defer+input+evaluation%2C+optimize+VRAM+usage%2C+and+implement+lazy%3A+True+in+custom+nodes.\u0026amp;theme=a03fed56f9a178c9b893031e\u0026amp;signature=6a76e601a767711e18ea697a4fafd1f814830d92b4e02ff4758df943a897ec96\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Lazy Evaluation - ComfyUI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how lazy evaluation works in ComfyUI (v0.2.0+). Discover how to defer input evaluation, optimize VRAM usage, and implement lazy: True in custom nodes.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dripart.mintlify.app/_mintlify/api/og/v2?division=Python+%28Backend%29\u0026amp;title=Lazy+Evaluation\u0026amp;description=Learn+how+lazy+evaluation+works+in+ComfyUI+%28v0.2.0%2B%29.+Discover+how+to+defer+input+evaluation%2C+optimize+VRAM+usage%2C+and+implement+lazy%3A+True+in+custom+nodes.\u0026amp;theme=a03fed56f9a178c9b893031e\u0026amp;signature=6a76e601a767711e18ea697a4fafd1f814830d92b4e02ff4758df943a897ec96\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dripart/lS3H5I41bE6LSXEf/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ComfyUI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#49378B\">\u003cmeta data-mint-head name=\"googlebot\" content=\"max-video-preview:0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/custom-nodes/backend/lazy_evaluation.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"zh\" href=\"https://docs.comfy.org/zh/custom-nodes/backend/lazy_evaluation\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ja\" href=\"https://docs.comfy.org/ja/custom-nodes/backend/lazy_evaluation\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"ko\" href=\"https://docs.comfy.org/ko/custom-nodes/backend/lazy_evaluation\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.comfy.org/es/custom-nodes/backend/lazy_evaluation\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.comfy.org/#organization\",\"name\":\"ComfyUI\",\"url\":\"https://docs.comfy.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dripart/WCFdTagRdhtvk9-o/logo/light.svg?fit=max\u0026auto=format\u0026n=WCFdTagRdhtvk9-o\u0026q=85\u0026s=ec112de87239058f5a931a7e4b594965\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.comfy.org#website\",\"name\":\"ComfyUI\",\"url\":\"https://docs.comfy.org\",\"publisher\":{\"@id\":\"https://docs.comfy.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation#webpage\",\"url\":\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation\",\"name\":\"Lazy Evaluation\",\"description\":\"Learn how lazy evaluation works in ComfyUI (v0.2.0+). Discover how to defer input evaluation, optimize VRAM usage, and implement lazy: True in custom nodes.\",\"dateModified\":\"2026-08-13T17:33:04.002Z\",\"isPartOf\":{\"@id\":\"https://docs.comfy.org#website\"},\"breadcrumb\":{\"@id\":\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Custom Nodes\",\"item\":\"https://docs.comfy.org/custom-nodes/intro\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Build Custom Nodes\",\"item\":\"https://docs.comfy.org/custom-nodes/overview\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Python (Backend)\",\"item\":\"https://docs.comfy.org/custom-nodes/backend/server_overview\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Lazy Evaluation\",\"item\":\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation#article\",\"headline\":\"Lazy Evaluation\",\"name\":\"Lazy Evaluation\",\"description\":\"Learn how lazy evaluation works in ComfyUI (v0.2.0+). Discover how to defer input evaluation, optimize VRAM usage, and implement lazy: True in custom nodes.\",\"url\":\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation\",\"mainEntityOfPage\":{\"@id\":\"https://docs.comfy.org/custom-nodes/backend/lazy_evaluation#webpage\"},\"dateModified\":\"2026-08-13T17:33:04.002Z\",\"publisher\":{\"@id\":\"https://docs.comfy.org/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.comfy.org#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ComfyUI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ComfyUI","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Getting started","pages":[{"title":"Getting started","href":""}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/basic-concepts/workflow"}]},{"tab":"Comfy Router","pages":[{"title":"Comfy Router","href":"/development/comfy-router/quickstart"}]},{"tab":"Agent tools","pages":[{"title":"Agent tools","href":"/agent-tools"}]},{"tab":"Built-in Nodes","pages":[{"title":"Built-in Nodes","href":"/built-in-nodes/overview"}]},{"tab":"Developer","pages":[{"group":"Develop with Comfy","pages":[{"title":"ComfyUI for Developers: SDKs, Server API, and Cloud","sidebarTitle":"Developer overview","href":"/development/overview"},{"title":"Getting an API Key","sidebarTitle":"API keys","icon":"key","href":"/development/api-development/getting-an-api-key"},{"title":"Comfy API and Router examples","sidebarTitle":"Examples","icon":"code","mode":"wide","href":"/development/examples"}]},{"group":"Deploy ComfyUI","pages":[{"title":"Deploying ComfyUI","sidebarTitle":"Overview","icon":"map","href":"/development/deploy/overview"},{"group":"Comfy API","pages":[{"title":"Comfy API Quickstart","sidebarTitle":"Quickstart","icon":"cloud-arrow-up","href":"/development/serverless/quickstart"},{"title":"Other Ways to Create a Comfy API Build","sidebarTitle":"Build Sources","icon":"layer-group","href":"/development/serverless/build-sources"},{"title":"Comfy API Deployment Guide","sidebarTitle":"Deployment Guide","icon":"cloud-arrow-up","href":"/development/serverless/overview"}]},{"group":"Comfy Cloud","pages":[{"title":"Comfy Cloud Quickstart","sidebarTitle":"Quickstart","icon":"cloud","href":"/development/deploy/cloud"},{"title":"Usage and Limits","sidebarTitle":"Usage and Limits","icon":"gauge","href":"/development/deploy/cloud-usage"}]},{"group":"Self-Hosting Options","pages":[{"title":"Self-Hosting Options","sidebarTitle":"Hosting options","icon":"server","href":"/development/deploy/self-hosting"},{"group":"Self-Hosted Server API","pages":[{"title":"Server Overview","sidebarTitle":"Server overview","href":"/development/comfyui-server/comms_overview"},{"title":"API Examples","href":"/development/comfyui-server/api-examples"},{"title":"ComfyUI Server Routes (HTTP and WebSocket API)","sidebarTitle":"HTTP \u0026 WebSocket routes","icon":"route","href":"/development/comfyui-server/comms_routes"},{"title":"ComfyUI Server Messages (WebSocket API)","sidebarTitle":"WebSocket messages","icon":"comment","href":"/development/comfyui-server/comms_messages"},{"title":"Startup Flags","sidebarTitle":"Startup Flags","icon":"terminal","href":"/development/comfyui-server/startup-flags"},{"title":"ComfyUI Account API Key Integration","sidebarTitle":"API Key Integration","icon":"puzzle-piece","href":"/development/comfyui-server/api-key-integration"}]}]},{"group":"Run Workflows","pages":[{"title":"Running Workflows","sidebarTitle":"Overview","icon":"play","href":"/development/run-workflows/overview"},{"title":"Run your first workflow","sidebarTitle":"First workflow","href":"/development/api-development/quickstart"},{"title":"Comfy SDKs: Python and TypeScript Clients for ComfyUI","sidebarTitle":"SDKs","icon":"code","href":"/development/api-development/sdks"},{"title":"API Proxy for Self-Hosted ComfyUI","sidebarTitle":"API Proxy","icon":"plug","href":"/development/comfyui-server/api-proxy"},{"title":"Workflow API Format","icon":"file-code","href":"/development/api-development/workflow-api-format"},{"title":"Workflow Metadata","icon":"file-code","href":"/development/api-development/workflow-metadata"},{"group":"Comfy API Reference","boost":10,"pages":[{"title":"Comfy API Versions: v2 and the Deprecated v1 Cloud API","sidebarTitle":"Overview","href":"/development/comfy-api/overview"},{"group":"v2","pages":[{"title":"Comfy API v2 Overview","sidebarTitle":"Overview","href":"/api-reference/v2/overview"},{"title":"Design Notes","sidebarTitle":"Design Notes","icon":"compass","href":"/development/api-development/sdks-design"},{"group":"API Reference","pages":[{"group":"assets","pages":[{"title":"Upload an asset (single-call multipart)","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml post /api/v2/assets","href":"/api-reference/v2/assets/upload-an-asset-single-call-multipart"},{"title":"Mint an asset over existing bytes (dedup fast-path)","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml post /api/v2/assets/from-hash","href":"/api-reference/v2/assets/mint-an-asset-over-existing-bytes-dedup-fast-path"},{"title":"Existence check for a blob by blake3 hash","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml head /api/v2/assets/by-hash/{hash}","href":"/api-reference/v2/assets/existence-check-for-a-blob-by-blake3-hash"},{"title":"Asset metadata","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/assets/{id}","href":"/api-reference/v2/assets/asset-metadata"},{"title":"Delete an asset record","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml delete /api/v2/assets/{id}","href":"/api-reference/v2/assets/delete-an-asset-record"},{"title":"Asset bytes","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/assets/{id}/content","href":"/api-reference/v2/assets/asset-bytes"}]},{"group":"jobs","pages":[{"title":"List jobs, newest first","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/jobs","href":"/api-reference/v2/jobs/list-jobs-newest-first"},{"title":"Submit a workflow for execution","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml post /api/v2/jobs","href":"/api-reference/v2/jobs/submit-a-workflow-for-execution"},{"title":"Job status (the polling workhorse)","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/jobs/{id}","href":"/api-reference/v2/jobs/job-status-the-polling-workhorse"},{"title":"The workflow behind a job — authoring version if pinned, executed graph otherwise","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/jobs/{id}/workflow","href":"/api-reference/v2/jobs/the-workflow-behind-a-job-—-authoring-version-if-pinned-executed-graph-otherwise"},{"title":"What the run printed","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/jobs/{id}/logs","href":"/api-reference/v2/jobs/what-the-run-printed"},{"title":"Live event stream (SSE)","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml get /api/v2/jobs/{id}/events","href":"/api-reference/v2/jobs/live-event-stream-sse"},{"title":"Request cancellation","deprecated":null,"version":null,"openapi":"/openapi-v2.yaml post /api/v2/jobs/{id}/cancel","href":"/api-reference/v2/jobs/request-cancellation"}]}]}]},{"group":"v1 Cloud API (deprecated)","pages":[{"title":"v1 Cloud API Overview","sidebarTitle":"Overview","href":"/development/cloud/overview"},{"title":"Cloud API Reference","sidebarTitle":"Code Examples","icon":"book-open","href":"/development/cloud/api-reference"},{"title":"OpenAPI Specification","icon":"file-lines","openapi":"/openapi-cloud.yaml","href":"/development/cloud/openapi"},{"group":"Cloud API Reference","pages":[{"group":"workflow","pages":[{"title":"Get information about current prompt executions","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/prompt","href":"/api-reference/cloud/workflow/get-information-about-current-prompt-executions"},{"title":"Submit a workflow for execution","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/prompt","href":"/api-reference/cloud/workflow/submit-a-workflow-for-execution"},{"title":"Get available workflow templates","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/workflow_templates","href":"/api-reference/cloud/workflow/get-available-workflow-templates"},{"title":"Get available subgraph blueprints","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/global_subgraphs","href":"/api-reference/cloud/workflow/get-available-subgraph-blueprints"},{"title":"Get a specific subgraph blueprint","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/global_subgraphs/{id}","href":"/api-reference/cloud/workflow/get-a-specific-subgraph-blueprint"}]},{"group":"node","pages":[{"title":"Get all node information","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/object_info","href":"/api-reference/cloud/node/get-all-node-information"},{"title":"Get server feature flags","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/features","href":"/api-reference/cloud/node/get-server-feature-flags"}]},{"group":"model","pages":[{"title":"Get available model folders","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/experiment/models","href":"/api-reference/cloud/model/get-available-model-folders"},{"title":"Get models in a specific folder","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/experiment/models/{folder}","href":"/api-reference/cloud/model/get-models-in-a-specific-folder"},{"title":"Get model preview image","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/experiment/models/preview/{folder}/{path_index}/{filename}","href":"/api-reference/cloud/model/get-model-preview-image"}]},{"group":"job","pages":[{"title":"Manage execution history","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/history","href":"/api-reference/cloud/job/manage-execution-history"},{"title":"Get execution history (v2)","deprecated":true,"version":null,"openapi":"/openapi-cloud.yaml get /api/history_v2","href":"/api-reference/cloud/job/get-execution-history-v2"},{"title":"Get history for specific prompt","deprecated":true,"version":null,"openapi":"/openapi-cloud.yaml get /api/history_v2/{prompt_id}","href":"/api-reference/cloud/job/get-history-for-specific-prompt"},{"title":"List jobs with pagination and filtering","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/jobs","href":"/api-reference/cloud/job/list-jobs-with-pagination-and-filtering"},{"title":"Get full job details","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/jobs/{job_id}","href":"/api-reference/cloud/job/get-full-job-details"},{"title":"Get queue information","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/queue","href":"/api-reference/cloud/job/get-queue-information"},{"title":"Manage queue operations","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/queue","href":"/api-reference/cloud/job/manage-queue-operations"},{"title":"Interrupt currently running jobs","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/interrupt","href":"/api-reference/cloud/job/interrupt-currently-running-jobs"},{"title":"Get job status","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/job/{job_id}/status","href":"/api-reference/cloud/job/get-job-status"}]},{"group":"file","pages":[{"title":"View a file","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/view","href":"/api-reference/cloud/file/view-a-file"},{"title":"Get related mask layer files","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/files/mask-layers","href":"/api-reference/cloud/file/get-related-mask-layer-files"},{"title":"Upload an image file","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/upload/image","href":"/api-reference/cloud/file/upload-an-image-file"},{"title":"Upload a mask image","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/upload/mask","href":"/api-reference/cloud/file/upload-a-mask-image"}]},{"group":"asset","pages":[{"title":"List user assets","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/assets","href":"/api-reference/cloud/asset/list-user-assets"},{"title":"Upload a new asset","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/assets","href":"/api-reference/cloud/asset/upload-a-new-asset"},{"title":"Create asset reference from existing hash","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/assets/from-hash","href":"/api-reference/cloud/asset/create-asset-reference-from-existing-hash"},{"title":"Get asset metadata from remote URL","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/assets/remote-metadata","href":"/api-reference/cloud/asset/get-asset-metadata-from-remote-url"},{"title":"Initiate background download for large files","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/assets/download","href":"/api-reference/cloud/asset/initiate-background-download-for-large-files"},{"title":"Get asset details","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/assets/{id}","href":"/api-reference/cloud/asset/get-asset-details"},{"title":"Update asset metadata","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml put /api/assets/{id}","href":"/api-reference/cloud/asset/update-asset-metadata"},{"title":"Delete asset","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml delete /api/assets/{id}","href":"/api-reference/cloud/asset/delete-asset"},{"title":"Add tags to asset","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/assets/{id}/tags","href":"/api-reference/cloud/asset/add-tags-to-asset"},{"title":"Remove tags from asset","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml delete /api/assets/{id}/tags","href":"/api-reference/cloud/asset/remove-tags-from-asset"},{"title":"List all tags","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/tags","href":"/api-reference/cloud/asset/list-all-tags"},{"title":"Get tag histogram for filtered assets","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/assets/tags/refine","href":"/api-reference/cloud/asset/get-tag-histogram-for-filtered-assets"},{"title":"Check if asset exists by hash","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml head /api/assets/hash/{hash}","href":"/api-reference/cloud/asset/check-if-asset-exists-by-hash"}]},{"group":"user","pages":[{"title":"List user data files","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/userdata","href":"/api-reference/cloud/user/list-user-data-files"},{"title":"Get user data file","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/userdata/{file}","href":"/api-reference/cloud/user/get-user-data-file"},{"title":"Upload or update a user data file","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml post /api/userdata/{file}","href":"/api-reference/cloud/user/upload-or-update-a-user-data-file"},{"title":"Delete a user data file","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml delete /api/userdata/{file}","href":"/api-reference/cloud/user/delete-a-user-data-file"},{"title":"Get current user information","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/user","href":"/api-reference/cloud/user/get-current-user-information"}]},{"group":"system","pages":[{"title":"Get system statistics","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/system_stats","href":"/api-reference/cloud/system/get-system-statistics"}]},{"group":"billing","pages":[{"title":"Get workspace usage over time","deprecated":null,"version":null,"openapi":"/openapi-cloud.yaml get /api/billing/usage/timeseries","href":"/api-reference/cloud/billing/get-workspace-usage-over-time"}]}]}]}]}]}]},{"group":"Comfy CLI","pages":[{"title":"Get Started with Comfy CLI","sidebarTitle":"Get started","href":"/comfy-cli/getting-started"},{"title":"Comfy CLI Command Reference","sidebarTitle":"Command reference","href":"/comfy-cli/reference"},{"title":"Comfy CLI Troubleshooting Guide","sidebarTitle":"Troubleshooting","href":"/comfy-cli/troubleshooting"}]},{"group":"Specifications","pages":[{"group":"Workflow JSON","pages":[{"title":"Workflow JSON","href":"/specs/workflow_json"},{"title":"Workflow JSON 0.4","href":"/specs/workflow_json_0.4"}]},{"group":"Node Definitions","pages":[{"title":"Node Definition JSON","href":"/specs/nodedef_json"},{"title":"Node Definition JSON 1.0","href":"/specs/nodedef_json_1_0"}]}]},{"group":"Custom Nodes","pages":[{"title":"Custom Nodes","sidebarTitle":"Overview","href":"/custom-nodes/intro"},{"group":"Build Custom Nodes","pages":[{"title":"ComfyUI Custom Node Types and Architecture","sidebarTitle":"Node types \u0026 architecture","href":"/custom-nodes/overview"},{"title":"Creating Custom Nodes in ComfyUI","sidebarTitle":"Create your first node","href":"/custom-nodes/walkthrough"},{"group":"Python (Backend)","pages":[{"title":"Custom Node Properties","sidebarTitle":"Node properties","href":"/custom-nodes/backend/server_overview"},{"title":"ComfyUI Custom Node Lifecycle","sidebarTitle":"Node lifecycle","href":"/custom-nodes/backend/lifecycle"},{"title":"ComfyUI Custom Node Datatypes","sidebarTitle":"Data types","href":"/custom-nodes/backend/datatypes"},{"title":"Images, Latents, and Masks","sidebarTitle":"Images, latents, masks","href":"/custom-nodes/backend/images_and_masks"},{"title":"Hidden and Flexible inputs","description":"ComfyUI hidden inputs (UNIQUE_ID, PROMPT, EXTRA_PNGINFO, DYNPROMPT) and flexible inputs, including custom datatypes and wildcard inputs for custom nodes.","sidebarTitle":"Hidden \u0026 flexible inputs","href":"/custom-nodes/backend/more_on_inputs"},{"title":"Lazy Evaluation","href":"/custom-nodes/backend/lazy_evaluation"},{"title":"Node Expansion","description":"Master Comfy node expansion to return new subgraphs in your backend custom nodes. Learn GraphBuilder requirements and caching techniques. Read the docs today!","href":"/custom-nodes/backend/expansion"},{"title":"ComfyUI Data Lists and List Processing","sidebarTitle":"Lists \u0026 list processing","href":"/custom-nodes/backend/lists"},{"title":"Working with torch.Tensor","sidebarTitle":"Tensors","href":"/custom-nodes/backend/tensors"},{"title":"Annotated Examples","href":"/custom-nodes/backend/snippets"},{"title":"Execution Model Inversion Guide","sidebarTitle":"Execution model inversion","icon":"code-branch","href":"/development/comfyui-server/execution_model_inversion_guide"}]},{"group":"JavaScript (UI)","pages":[{"title":"Javascript Extensions","sidebarTitle":"JavaScript extensions","href":"/custom-nodes/js/javascript_overview"},{"title":"ComfyUI JavaScript Hooks","sidebarTitle":"Hooks","href":"/custom-nodes/js/javascript_hooks"},{"title":"Comfy Objects","href":"/custom-nodes/js/javascript_objects_and_hijacking"},{"title":"Settings API","href":"/custom-nodes/js/javascript_settings"},{"title":"ComfyUI Dialog API","sidebarTitle":"Dialog API","href":"/custom-nodes/js/javascript_dialog"},{"title":"ComfyUI Toast API","sidebarTitle":"Toast API","href":"/custom-nodes/js/javascript_toast"},{"title":"About Panel Badges","href":"/custom-nodes/js/javascript_about_panel_badges"},{"title":"Bottom Panel Tabs","href":"/custom-nodes/js/javascript_bottom_panel_tabs"},{"title":"Sidebar Tabs","href":"/custom-nodes/js/javascript_sidebar_tabs"},{"title":"Selection Toolbox","href":"/custom-nodes/js/javascript_selection_toolbox"},{"title":"Commands and Keybindings","href":"/custom-nodes/js/javascript_commands_keybindings"},{"title":"ComfyUI Topbar Menu API","sidebarTitle":"Topbar menu API","href":"/custom-nodes/js/javascript_topbar_menu"},{"title":"ComfyUI Subgraphs","sidebarTitle":"Subgraphs","href":"/custom-nodes/js/subgraphs"},{"title":"Annotated Examples","href":"/custom-nodes/js/javascript_examples"}]},{"title":"ComfyUI Custom Nodes i18n Support","sidebarTitle":"i18n Support","href":"/custom-nodes/i18n"},{"group":"Migration Guides","pages":[{"title":"V3 Migration","href":"/custom-nodes/v3_migration"},{"title":"Context Menu Migration Guide","sidebarTitle":"Context menu migration","href":"/custom-nodes/js/context-menu-migration"},{"title":"Node replacement","href":"/custom-nodes/backend/node-replacement"}]}]},{"group":"Package \u0026 Publish","pages":[{"title":"Add node docs for your ComfyUI custom node","sidebarTitle":"Node docs","href":"/custom-nodes/help_page"},{"title":"Workflow templates","href":"/custom-nodes/workflow_templates"},{"title":"Subgraph blueprints","href":"/custom-nodes/subgraph_blueprints"},{"title":"Comfy Registry: publish and version custom nodes","sidebarTitle":"Registry Overview","href":"/registry/overview"},{"title":"Publishing Nodes","href":"/registry/publishing"},{"title":"Claim My Node","href":"/registry/claim-my-node"},{"title":"Comfy Registry Node Quality and Security Standards","sidebarTitle":"Quality \u0026 security standards","href":"/registry/standards"},{"title":"Custom Node CI/CD","sidebarTitle":"CI/CD","href":"/registry/cicd"},{"title":"pyproject.toml","href":"/registry/specifications"},{"title":"API Overview","href":"/registry/api-reference/overview"},{"group":"Registry API Reference","pages":[{"title":"Get information about the calling user.","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /users","href":"/registry/api-reference/registry/get-information-about-the-calling-user"},{"title":"Retrieve all publishers for a given user","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /users/publishers/","href":"/registry/api-reference/registry/retrieve-all-publishers-for-a-given-user"},{"title":"Validate if a publisher username is available","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/validate","href":"/registry/api-reference/registry/validate-if-a-publisher-username-is-available"},{"title":"Create a new publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /publishers","href":"/registry/api-reference/registry/create-a-new-publisher"},{"title":"Retrieve all publishers","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers","href":"/registry/api-reference/registry/retrieve-all-publishers"},{"title":"Retrieve a publisher by ID","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/{publisherId}","href":"/registry/api-reference/registry/retrieve-a-publisher-by-id"},{"title":"Update a publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi put /publishers/{publisherId}","href":"/registry/api-reference/registry/update-a-publisher"},{"title":"Delete a publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi delete /publishers/{publisherId}","href":"/registry/api-reference/registry/delete-a-publisher"},{"title":"Retrieve permissions the user has for a given publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/{publisherId}/nodes/{nodeId}/permissions","href":"/registry/api-reference/registry/retrieve-permissions-the-user-has-for-a-given-publisher"},{"title":"Create a new personal access token","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /publishers/{publisherId}/tokens","href":"/registry/api-reference/registry/create-a-new-personal-access-token"},{"title":"Delete a specific personal access token","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi delete /publishers/{publisherId}/tokens/{tokenId}","href":"/registry/api-reference/registry/delete-a-specific-personal-access-token"},{"title":"Retrieve all nodes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/{publisherId}/nodes/v2","href":"/registry/api-reference/registry/retrieve-all-nodes"},{"title":"Retrieve all nodes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/{publisherId}/nodes/v2","href":"/registry/api-reference/registry/retrieve-all-nodes"},{"title":"Create a new custom node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /publishers/{publisherId}/nodes","href":"/registry/api-reference/registry/create-a-new-custom-node"},{"title":"Update a specific node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi put /publishers/{publisherId}/nodes/{nodeId}","href":"/registry/api-reference/registry/update-a-specific-node"},{"title":"Delete a specific node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi delete /publishers/{publisherId}/nodes/{nodeId}","href":"/registry/api-reference/registry/delete-a-specific-node"},{"title":"Retrieve permissions the user has for a given publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /publishers/{publisherId}/nodes/{nodeId}/permissions","href":"/registry/api-reference/registry/retrieve-permissions-the-user-has-for-a-given-publisher"},{"title":"Claim nodeId into publisherId for the authenticated publisher","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /publishers/{publisherId}/nodes/{nodeId}/claim-my-node","href":"/registry/api-reference/registry/claim-nodeid-into-publisherid-for-the-authenticated-publisher"},{"title":"Publish a new version of a node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /publishers/{publisherId}/nodes/{nodeId}/versions","href":"/registry/api-reference/registry/publish-a-new-version-of-a-node"},{"title":"Update changelog and deprecation status of a node version","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi put /publishers/{publisherId}/nodes/{nodeId}/versions/{versionId}","href":"/registry/api-reference/registry/update-changelog-and-deprecation-status-of-a-node-version"},{"title":"Unpublish (delete) a specific version of a node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi delete /publishers/{publisherId}/nodes/{nodeId}/versions/{versionId}","href":"/registry/api-reference/registry/unpublish-delete-a-specific-version-of-a-node"},{"title":"Retrieves a list of nodes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/search","href":"/registry/api-reference/registry/retrieves-a-list-of-nodes"},{"title":"Retrieves a list of nodes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/search","href":"/registry/api-reference/registry/retrieves-a-list-of-nodes"},{"title":"Retrieve a specific node by ID","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}","href":"/registry/api-reference/registry/retrieve-a-specific-node-by-id"},{"title":"Returns a node version to be installed.","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}/install","href":"/registry/api-reference/registry/returns-a-node-version-to-be-installed"},{"title":"Add review to a specific version of a node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /nodes/{nodeId}/reviews","href":"/registry/api-reference/registry/add-review-to-a-specific-version-of-a-node"},{"title":"Create Node Translations","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /nodes/{nodeId}/translations","href":"/registry/api-reference/registry/create-node-translations"},{"title":"List all versions of a node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}/versions","href":"/registry/api-reference/registry/list-all-versions-of-a-node"},{"title":"Retrieve a specific version of a node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}/versions/{versionId}","href":"/registry/api-reference/registry/retrieve-a-specific-version-of-a-node"},{"title":"Retrieve multiple node versions in a single request","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /bulk/nodes/versions","href":"/registry/api-reference/registry/retrieve-multiple-node-versions-in-a-single-request"},{"title":"List all node versions given some filters.","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /versions","href":"/registry/api-reference/registry/list-all-node-versions-given-some-filters"},{"title":"list all comfy-nodes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /comfy-nodes","href":"/registry/api-reference/registry/list-all-comfy-nodes"},{"title":"Retrieve a node by ComfyUI node name","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /comfy-nodes/{comfyNodeName}/node","href":"/registry/api-reference/registry/retrieve-a-node-by-comfyui-node-name"},{"title":"create comfy-nodes for certain node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi post /nodes/{nodeId}/versions/{version}/comfy-nodes","href":"/registry/api-reference/registry/create-comfy-nodes-for-certain-node"},{"title":"list comfy-nodes for node version","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}/versions/{version}/comfy-nodes","href":"/registry/api-reference/registry/list-comfy-nodes-for-node-version"},{"title":"get specify comfy-node based on its id","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /nodes/{nodeId}/versions/{version}/comfy-nodes/{comfyNodeName}","href":"/registry/api-reference/registry/get-specify-comfy-node-based-on-its-id"},{"title":"Update a specific comfy-node","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi put /nodes/{nodeId}/versions/{version}/comfy-nodes/{comfyNodeName}","href":"/registry/api-reference/registry/update-a-specific-comfy-node"},{"title":"Get server feature flags","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /features","href":"/registry/api-reference/registry/get-server-feature-flags"},{"title":"Get release notes","deprecated":null,"version":null,"openapi":"https://api.comfy.org/openapi get /releases","href":"/registry/api-reference/releases/get-release-notes"}]}]}]}]},{"tab":"Support","pages":[{"title":"Support","href":"/support/contact-support"}]}]},{"language":"zh","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"资源","items":[{"label":"安装","href":"/zh/installation/system_requirements"},{"label":"教程","href":"/zh/tutorials/basic/text-to-image"},{"label":"开发","href":"/zh/development/overview"}]},{"header":"产品","items":[{"label":"功能","href":"https://www.comfy.org/?utm_source=docs"},{"label":"画廊","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"下载","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"公司","items":[{"label":"关于","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"招聘","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"服务条款","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"隐私政策","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"pages":[{"title":"zh","href":"/zh/custom-nodes/backend/lazy_evaluation"}]},{"language":"ja","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"リソース","items":[{"label":"インストール","href":"/ja/installation/system_requirements"},{"label":"チュートリアル","href":"/ja/tutorials/basic/text-to-image"},{"label":"開発","href":"/ja/development/overview"}]},{"header":"プロダクト","items":[{"label":"機能","href":"https://www.comfy.org/?utm_source=docs"},{"label":"ギャラリー","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"ダウンロード","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"会社情報","items":[{"label":"概要","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"採用情報","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"利用規約","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"プライバシーポリシー","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"navbar":{"links":[{"href":"/ja/tutorials/partner-nodes/pricing","label":"料金"},{"href":"https://comfy.org/download?utm_source=docs","label":"ダウンロード"}],"primary":{"type":"button","label":"Comfy Cloud","href":"https://comfy.org/cloud?utm_source=docs"}},"pages":[{"title":"ja","href":"/ja/custom-nodes/backend/lazy_evaluation"}]},{"language":"ko","footer":{"socials":{"github":"https://github.com/Comfy-Org/ComfyUI","x":"https://x.com/ComfyUI","discord":"https://discord.com/invite/comfyorg","youtube":"https://www.youtube.com/@comfyorg"},"links":[{"header":"리소스","items":[{"label":"설치","href":"/ko/installation/system_requirements"},{"label":"튜토리얼","href":"/ko/tutorials/basic/text-to-image"},{"label":"개발","href":"/ko/development/overview"}]},{"header":"제품","items":[{"label":"기능","href":"https://www.comfy.org/?utm_source=docs"},{"label":"갤러리","href":"https://www.comfy.org/gallery?utm_source=docs"},{"label":"다운로드","href":"https://www.comfy.org/download?utm_source=docs"}]},{"header":"회사 정보","items":[{"label":"소개","href":"https://www.comfy.org/about?utm_source=docs"},{"label":"채용","href":"https://www.comfy.org/careers?utm_source=docs"},{"label":"이용약관","href":"https://www.comfy.org/terms-of-service?utm_source=docs"},{"label":"개인정보 처리방침","href":"https://www.comfy.org/privacy-policy?utm_source=docs"}]}]},"navbar":{"links":[{"href":"/ko/tutorials/partner-nodes/pricing","label":"가격 정책"},{"href":"https://comfy.org/download?utm_source=docs","label":"다운로드"}],"primary":{"type":"button","label":"Comfy Cloud","href":"https://comfy.org/cloud?utm_source=docs"}},"pages":[{"title":"ko","href":"/ko/custom-nodes/backend/lazy_evaluation"}]},{"language":"es","pages":[{"title":"es","href":"/es/custom-nodes/backend/lazy_evaluation"}]}]},"basePath":"","title":"Lazy Evaluation - ComfyUI","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":[],"chunks":[]}