Cloud Nodes Pages

Build-time catalog of custom-node packs preinstalled on Comfy Cloud. Index at /cloud/supported-nodes, per-pack details at /cloud/supported-nodes/[pack], both also under /zh-CN/.

Sources

The registry is the same one the in-app Manager dialog reads from. For reference and additional reading, see the existing client wrappers in src/:

Build pipeline

FileRole
pages/cloud/supported-nodes.astro and [pack].astroPage shells (and zh-CN twins)
utils/cloudNodes.build.tsloadPacksForBuild() shared by index + detail routes
utils/cloudNodes.tsCloud object_info fetcher with retry, sanitization, snapshot fallback
utils/cloudNodes.registry.tsRegistry enrichment (batches of 50, soft-fail)
utils/cloudNodes.ci.tsGitHub Actions annotations + step summary
utils/escapeJsonLd.tsXSS-safe <script type="application/ld+json"> serializer
composables/useFilteredPacks.tsSearch + sort logic for the index page
composables/useNodesByCategory.tsGroup nodes by category, alphabetized
scripts/refresh-cloud-nodes-snapshot.tsManual pnpm cloud-nodes:refresh-snapshot
packages/object-info-parserShared Zod schemas, classifier, sanitizeUserContent

Key invariants

Why Pack is a domain projection, not the raw registry Node

apps/website/src/data/cloudNodes.ts defines its own Pack and PackNode types instead of re-exporting components['schemas']['Node'] from @comfyorg/registry-types. That is intentional:

The Pack/PackNode types live next to the snapshot they describe; the validated build-time projections feed Astro's static routes directly. The OpenAPI-generated Node type is still consumed inside cloudNodes.registry.ts as RegistryPack for the upstream fetch.