Private, deterministic, no sign-in, no Pinecone, and usable when HeyGen is unavailable.
- Query
- Bundled artifact
- Verified runAdd
Browse locally by default. Signed-in users can request zero-credit Smart ranking. Both paths return installable Hyperframes IDs.
Private, deterministic, no sign-in, no Pinecone, and usable when HeyGen is unavailable.
Authenticated HeyGen API, server-side semantic/hybrid retrieval, zero credits, bounded by rate limits.
CLI, SDK, Studio and media-use. Hyperion and website-to-video remain unchanged.
Add a curated, versioned search artifact and pure local search first. Then add one authenticated HeyGen Smart-search endpoint as an explicit opt-in. V1 browse is local.
The catalog is already larger than a human can scan comfortably. Local search protects openness and resilience; HeyGen search can improve paraphrase and multilingual recall without shipping provider secrets.
One canonical ID contract feeds CLI, Studio, SDK, API and media-use. The API searches only an immutable catalog digest the client says it can install.
Train 01 ships the useful local product. Train 02 adds optional Smart ranking without another research program or staged rollout ladder.
runAddExit: quality-approved entries have installable IDs and pass integrity, accessibility, performance and offline journeys. Rollback: ship the prior artifact/client.
QUERY /v3/hyperframes/catalogExit: contract, relevance smoke, load, privacy and freshness checks pass. Rollback: disable Smart; Train 01 is unchanged.
flowchart LR
T1["TRAIN 01<br/>Curated local catalog"] --> G1{"Quality + offline + install<br/>gates pass?"}
G1 -->|yes| T2["TRAIN 02<br/>Optional Smart beta"]
G1 -->|no| T1
T2 -. disable Smart .-> T1
classDef first fill:#d7ff4f,stroke:#171713,color:#171713,stroke-width:2px
classDef gated fill:#3859ff,stroke:#171713,color:#fff,stroke-width:2px
class T1 first
class T2 gated| Owner surface | Deliverable | Depends on | Approver / release gate | Rollback owner |
|---|---|---|---|---|
| Hyperframes OSS | Artifact, checksum, local scorer, CLI, Studio, SDK, canonical installer | Registry manifests and install tests | Hyperframes maintainers; Train 01 definition of done | Hyperframes release owner |
| media-use | Thin Hyperframes provider adapter and user guidance; no copied source or second ledger | Stable CLI JSON/install contract | media-use maintainer + Hyperframes contract tests | media-use package owner disables adapter |
| Catalog quality | Public allowlist and documented exclusion reason for entries below the quality bar | Installable registry manifests + review criteria | Hyperframes maintainers approve each public entry | Catalog owner removes it in the next artifact |
| HeyGen API / EF | Auth, rate limits, QUERY endpoint, immutable index and observability | Frozen artifact identity + Train 01 | API, security and privacy owners approve Train 02 beta | API on-call disables Smart |
sequenceDiagram participant HF as Hyperframes OSS participant MU as media-use participant CQ as Catalog quality participant API as HeyGen API / EF HF->>HF: Ship artifact + local scorer + CLI/Studio/SDK HF->>MU: Publish stable JSON + install contract MU->>HF: Resolve canonical ID through runAdd HF->>CQ: Review public entries against the quality bar CQ-->>HF: Publish approved allowlist + exclusion reasons HF->>API: Publish the exact curated catalog digest API->>HF: Serve optional Smart results for that digest API-->>HF: On error, client keeps local results
Named individuals and repo-specific approvers are intentionally deferred; the ownership boundaries above are the source-of-truth contract until those names are assigned.
The evaluated branch scans committed primitive source artifacts and the registry manifests at Git HEAD. It validates each source, merges reviewed duplicate names, sorts the result, and emits a shelf plus a machine-readable index.
feat-video-primitives, not the launch count. The public artifact is intentionally smaller: exclude components that fail installability, runtime stability, visual polish, responsive behavior, accessibility, metadata/demo quality, or maintainer review. Record a reason for every exclusion so the bar is auditable.Add, edit, deprecate or remove a registry item. Every public ID must resolve through the canonical installer.
Apply the public allowlist, record exclusions, then validate IDs, manifests, files, hashes, compatibility, duplicates and search fields.
catalog-search.json + detached SHA-256 checksum, exported from the shared package and bundled with the CLI.
Its manifest must pass schema and install tests. The builder adds it to a new digest. CI builds a new remote namespace and queries it before that digest can become active. Old released clients keep searching their old digest.
A new digest omits it. Existing digests remain readable for a defined support window. Renames use a deprecated alias and replacementId; a name is never silently reassigned to unrelated code.
V1 searches it locally only. Proprietary metadata is never uploaded to HeyGen implicitly. A future hosted-custom-index feature requires a separate consent, tenancy and deletion design.
“Recall at top 20” means: among 405 test briefs, after a method returned only 20 catalog entries, how often did those 20 include at least one entry the gold set considered acceptable? It does not mean users liked the first result, and it is not a production conversion rate.
Source: evals/catalog-retrieval/round4/summary4.json, 405 scored briefs, k=20. The dithered bars make the candidate winner visible; the exact values remain printed so texture is never the only signal.
Use the 70% word-rank hybrid as the initial Smart recipe because it is the strongest existing top-20 result. Do not start another candidate bake-off. Train 02 gets ordinary release QA: representative query smoke tests, contract checks, load, privacy and operational verification. Local remains the default regardless of Smart relevance.
Local is the default. --smart is explicit because it sends the query to HeyGen. A selected result flows through the existing runAdd installer and compatibility gate.
The block browser uses the same core scorer. A visible “Smart search: free with HeyGen” toggle signs in or reuses existing credentials. If Smart fails, the already-visible local results simply remain.
searchCatalogLocal(artifact, query, filters) is pure and public. Remote HTTP remains an opt-in client adapter so rendering and core packages never gain a network dependency.
media-use discovers; Hyperframes installs. It must not store component source under .media/ or invent a second catalog ledger. Its record points to the canonical catalog ID, digest and files written by hyperframes add.
Authenticated catalog browse/search consumes zero HeyGen credits. OAuth is the recommended free sign-in path; API keys may authenticate developer automation without changing the zero-credit rule.
Per-account, per-IP and global limits, bounded query length and top_k, timeouts and a circuit breaker remain mandatory. Free does not mean anonymous or unlimited.
hyperframes catalog search.runAdd verifies compatibility and writes files.Outcome: useful offline discovery; no query or metadata leaves the machine.
Outcome: the Studio route never waits for auth or a provider to show the catalog.
QUERY.Outcome: Smart is opt-in, zero-credit and compatible with the local client.
Outcome: no fallback state machine and no blocked creative flow.
Outcome: search never invents a second install path or identity system.
--type hyperframes.--provider heygen.Outcome: media-use ships in Train 01 as a thin, testable adapter.
flowchart TD
Start["User opens CLI, Studio or media-use"] --> Local["Load bundled catalog artifact"]
Local --> Search["Search / browse locally"]
Search --> Choice{"Choose Smart?"}
Choice -->|no| Select["Select canonical ID"]
Choice -->|yes| Auth{"Signed in?"}
Auth -->|no| Login["OAuth login"]
Auth -->|yes| Remote["QUERY + exact catalog digest"]
Login --> Remote
Remote --> Healthy{"Valid compatible response?"}
Healthy -->|yes| Select
Healthy -->|no / timeout / 429| Fallback["Keep local results visible"]
Fallback --> Search
Select --> Verify["Verify manifest, files, hashes, compatibility"]
Verify --> Install["Existing runAdd installer"]
Install --> Done["Record provenance + written files"]
classDef local fill:#d7ff4f,stroke:#171713,color:#171713
classDef remote fill:#3859ff,stroke:#171713,color:#fff
class Local,Search,Fallback local
class Remote remoteCatalog truth, public quality allowlist, artifact schema, local scorer, CLI/Studio/SDK and installer.
Authentication, zero-credit policy, limits, immutable derived index, in-memory ranking and response envelope.
Thin provider adapter and sign-in guidance. No duplicate catalog or installer.
flowchart LR
U[Hyperframes user] --> C{Search mode}
C -->|local default| A[Bundled catalog artifact]
A --> L[Local lexical scorer]
C -->|explicit smart| H[Shared HeyGen credentials]
H --> API[QUERY /v3/hyperframes/catalog]
API --> N[EF immutable index blob + memory cache]
N --> K[Keyword arm]
N --> S[Semantic arm]
K --> R[Fixed 70 / 30 RRF]
S --> R
L --> G[Shared result contract]
R --> G
G --> V[Compatibility validation]
V --> I[Existing runAdd installer]| Data | Authoritative location | Runtime behavior |
|---|---|---|
| Catalog manifests, public quality allowlist and exclusion reasons | Hyperframes repository | Reviewed with code; the deterministic builder is the only publisher. |
catalog-search.json + checksum | Hyperframes package/release and bundled CLI | Local clients read it directly. Its SHA-256 digest is the cross-repo identity. |
| Derived Smart index | EF-managed object storage, immutable by environment + catalog digest | API pods load the small hybrid index into a read-only memory cache. A missing digest is a normal catalog_version_unavailable error. |
| User query | Transient request memory only | The endpoint authenticates, validates, ranks, returns IDs/scores and discards the raw query. Logs and analytics contain only bounded status/latency/count fields. |
| Auth, limits and feature state | Existing HeyGen account and API configuration | No new user-data store. Smart can be disabled without changing the local artifact. |
The catalog is small enough for EF in-memory retrieval: even the pre-curation 424 × 1536 float32 matrix is about 2.49 MiB. Start there with the existing 70% word-rank hybrid. Pinecone is unnecessary until measured scale or operations justify it; this plan does not create a second provider-selection project.
{
"schemaVersion": 1,
"catalogVersion": "0.8.0",
"digest": "sha256:…",
"entries": [{
"id": "block:data-chart",
"name": "data-chart",
"type": "block",
"title": "Data chart",
"description": "…",
"tags": ["data", "chart"],
"aliases": [],
"searchText": "…",
"minCliVersion": "0.8.0",
"deprecated": null,
"replacementId": null
}]
}QUERY /v3/hyperframes/catalog
Authorization: Bearer …
X-HeyGen-Client-Source: hyperframes
Content-Type: application/json
{
"query": "animated pricing comparison",
"catalogDigest": "sha256:…"
}QUERY is the safe, idempotent body-carrying method standardized by RFC 10008. Defaults are deliberate: omitted types means every public installable type; omitted limit means 10 with a hard maximum of 20; empty-query browse stays local; strategy is server-owned and cannot be selected by the client. The server stores no raw query in telemetry. X-HeyGen-Client-Source is a bounded label only; authorization and limits use server-derived identity.
| Field | Why it exists | Client rule |
|---|---|---|
catalogDigest | Names the exact immutable catalog searched. | Must equal the request or reject the response. |
items[].id/name/type | Stable identity and installer lookup. | Intersect with local artifact before display/install. |
items[].score | Orders the compatible Smart results. | Treat as opaque and sort descending; do not expose provider details. |
Remote failure still leaves a deterministic search path over the exact installable digest.
Quality, capacity, privacy, abuse and catalog freshness must pass before a default changes.
No unlimited query, top-k, candidate pool, pagination depth, retries, concurrency or index fan-out.
The plan deliberately does not invent a demand forecast. Product and API owners must record expected steady QPS, burst QPS, daily active searchers and queries per searcher before capacity approval.
| Gate | Pass condition before production traffic |
|---|---|
| Quality | The curated artifact contains only maintainer-approved, installable entries. Representative Smart queries return relevant, compatible IDs in release smoke tests; no new retrieval bake-off is required. |
| Scale | Load test at 3× recorded peak forecast with bounded queues; no error-budget breach, connection leak or unbounded memory growth. |
| Latency | API owner approves explicit p50/p95/p99 targets after a dev benchmark. CLI timeout is longer than the approved p99 but still short enough to fall back without blocking work. |
| Availability | Dashboard and alerts cover auth, embedding, Pinecone, stale/missing digest, rate limit, fallback and install outcome. Kill switch forces local immediately. |
| Freshness | A release cannot activate until the exact digest is indexed, counted, sampled and query-smoked. Old namespaces remain until the supported client window expires. |
| Privacy | Raw query absent from analytics, structured logs and error payloads; cache keys use a digest; retention and access are documented. |
| Abuse | Auth required, body/query size bounded, default limit = 10, hard limit ≤ 20, and per-account/IP/global rate limits tested. |
--smart explains the free OAuth login path and makes no remote request until the user signs in.catalog_version_unavailable with supported upgrade guidance. Never search “latest” and send entries the client cannot install.Retry-After, do not retry in the same command, fall back locally.stateDiagram-v2 [*] --> LocalReady: client starts LocalReady --> SmartPending: user explicitly enables Smart SmartPending --> SmartResults: compatible success SmartPending --> LocalReady: any HTTP error or timeout SmartPending --> LocalReady: catalog digest mismatch SmartResults --> LocalReady: Smart toggled off SmartResults --> LocalReady: Smart disabled LocalReady --> PriorArtifact: client/artifact rollback PriorArtifact --> LocalReady: prior release starts
Goal: approve two trains, local-default / explicit-smart behavior, zero-credit policy, quality bar, public result types and supported digest window.
Outputs: this HTML plan first, then a matching short API RFC and threat/privacy review.
Verification: surface owners sign the boundary table; no code begins with unresolved identity/version semantics.
Hyperframes files: packages/core/src/registry/catalogSearch.ts, packages/core/schemas/catalog-search.json, scripts/generate-catalog-search.ts, registry/catalog-search.json.
Add an auditable public allowlist and exclusion reason, then generate canonical JSON, a detached checksum, searchable text, aliases and installability proof bound to immutable manifests, file paths and hashes. Export the artifact from the shared package and bundle it via packages/cli/scripts/build-copy.mjs.
Tests: quality-cut inclusion/exclusion, deterministic bytes, checksum/package parity, add/remove/rename, duplicate, missing/hash-mismatched file, non-installable primitive and schema drift.
Files: packages/core/src/registry/searchCatalog.ts and tests.
Exact name/title/tag boosts plus deterministic normalized token overlap. No network, wall clock or mutable global cache. Stable tie-break by canonical ID.
Tests: empty, Unicode, punctuation, aliases, deprecated items, filters, stable ordering, 10× future catalog performance.
Files: packages/cli/src/commands/catalog.ts, local catalog modules, packages/cli/src/server/studioServer.ts, packages/studio/src/hooks/useBlockCatalog.ts, BlocksTab.tsx.
Add local catalog search, JSON output and offline browse. Preserve existing --type, --tag, --json and picker behavior. Extend runAdd to accept canonical IDs and keep it the only installer.
Tests: zero-network CLI/Studio routes, compatibility snapshots, keyboard/focus/live-region accessibility, canonical-ID uniqueness and install rejection.
Skill files: scripts/lib/registry.mjs, new hyperframes-provider.mjs, scripts/resolve.mjs, coverage/provider/privacy tests and references.
Add type hyperframes. Local invokes Hyperframes local search. Record canonical ID, digest and installer output; never copy code into .media. The adapter ships with Train 01.
EF files: provider client plus one indexing activity/workflow.
Use the existing 70% word-rank hybrid. Write one immutable compressed index blob to EF-managed object storage for each environment + catalog digest; API pods load it into a read-only memory cache. IDs are canonical IDs. Define build, smoke, activation, supported-window retention and garbage collection.
Tests: idempotent build, wrong-env refusal, partial batch, payload parity, cold load, cache replacement, activation, retention and GC.
EF files: extend movio/api_service/app/controller/hyperframes_v3.py; add DTO/service and retrieval client tests.
QUERY /v3/hyperframes/catalog authenticates, validates the digest/body, gets that digest's read-only in-memory index, runs the fixed hybrid ranker, clamps to the default 10/max 20, and returns compatible IDs/scores. The raw query is discarded after the response. OAuth/API-key auth, zero credits, server-derived quotas and bounded source attribution reuse existing systems. CLI adds only --smart.
Studio keeps local results visible while Smart loads and replaces them only with a compatible success.
Tests: QUERY support through the real gateway, cold/missing index, scopes/authz, no raw-query logs, 401, 429/timeout/mismatch, rapid-query cancellation, accessibility and OpenAPI.
States: off or explicit opt-in beta. No shadow/employee/ramp ladder.
Rollback: disable Smart. Local search remains the complete product. Retain an auditable activation record.
flowchart LR
U0[U0 HTML source of truth] --> U1[U1 artifact + integrity]
U1 --> U2[U2 local scorer]
U2 --> U3[U3 local CLI / Studio / SDK]
U3 --> U4[U4 media-use adapter]
U3 --> T1{"TRAIN 01 DONE"}
U4 --> T1
T1 --> U5[U5 immutable Smart index]
U5 --> U6[U6 QUERY API + clients]
U6 --> U7[U7 opt-in beta operations]
U7 --> T2{"TRAIN 02 READY"}block:data-chart. Display names may change; the identity must not silently point to different code.Catalog sources / scope / P1 / scope guardian + adversarial review / confidence 100
The plan implies custom-registry support, but does not yet define artifact generation, canonical-ID collision and namespace rules, provenance and integrity, refresh/versioning, install compatibility, or whether private registry metadata may reach Smart search. V1 behavior remains an explicit product decision until those boundaries are resolved.
Ownership / release management / P1 / adversarial review / deferred by product owner
The visual matrix assigns responsibility by surface, but named individuals, required approvers, repository-specific release calendars and escalation paths still need assignment before U0 exits. No implementation unit may treat an unassigned handoff as implicitly owned.