nexu-io/open-design · error · Error
Vela model ${wireModel} does not publish output profiles, so
Error message
Vela model ${wireModel} does not publish output profiles, so aspect ${aspect} cannot be requested What it means
Thrown by selectImageOutputProfile() when an aspect ratio was requested but the model either is not in the published catalogue (published is null) or publishes zero output profiles. Vela's CLI requires both an aspect ratio and a resolution together; without published profiles there is no valid resolution to pair with the aspect, so the request is rejected before the CLI call.
Source
Thrown at apps/daemon/src/media/vela.ts:288
/**
* Pick the (aspect ratio, resolution) pair to request, or undefined to send no
* output flags at all and leave the server's default profile in charge.
*
* Vela's CLI treats the pair as one indivisible request, so a caller who names
* only a shape still has to be given a resolution. Which one they get is a
* pricing decision: the model's own default tier is the only choice that keeps
* an unqualified request costing what an unqualified request costs.
*/
function selectImageOutputProfile(
published: VelaPublishedImageCapabilities | null,
aspect: string | undefined,
requestedResolution: string | undefined,
wireModel: string,
): VelaImageOutputProfile | undefined {
if (!aspect) return undefined;
if (!published || published.profiles.length === 0) {
throw new Error(
`Vela model ${wireModel} does not publish output profiles, so aspect ${aspect} cannot be requested`,
);
}
const matching = published.profiles.filter((profile) => profile.aspectRatio === aspect);
if (matching.length === 0) {
const supported = [...new Set(published.profiles.map((profile) => profile.aspectRatio))];
throw new Error(
`Vela model ${wireModel} does not publish aspect ${aspect}; supported: ${supported.join(', ')}`,
);
}
if (requestedResolution) {
const supported = matching.map((profile) => profile.resolution);
const publishedResolution = matchPublishedValue(requestedResolution, supported);
const exact = matching.find((profile) => profile.resolution === publishedResolution);
if (!exact) {
throw new Error(
`Vela model ${wireModel} does not publish resolution ${requestedResolution} at aspect ${aspect}; supported: ${supported.join(', ')}`,
);View on GitHub (pinned to 5be4028344)
Solutions
- Omit input.aspect to let the server's default profile decide
- Verify the model publishes profiles for the request kind (edits vs generations) via `vela media models --json`
- Use a model that publishes output profiles if a specific aspect is required
Example fix
// before
await renderVelaImage({ ...input, model: 'vela/profile-less-model', aspect: '16:9' });
// after
await renderVelaImage({ ...input, model: 'vela/profile-less-model' }); // no aspect Defensive patterns
Strategy: validation
Validate before calling
function modelPublishesProfiles(published: VelaPublishedImageCapabilities | null): boolean {
return published != null && published.profiles.length > 0;
}
if (aspect && !modelPublishesProfiles(published)) {
// drop aspect to let the server default profile apply
} Try / catch
try {
const profile = selectImageOutputProfile(published, aspect, resolution, wireModel);
} catch (err) {
if (err instanceof Error && /does not publish output profiles/.test(err.message)) {
// retry without aspect
} else throw err;
} Prevention
- Default input.aspect to undefined so profile-less models use the server default
- Confirm via `vela media models --json` that a model publishes profiles before exposing aspect controls
- Remember profiles are per request kind (edits vs generations) — check the right envelope
When it happens
Trigger: Calling renderVelaImage with input.aspect set, where fetchPublishedImageCapabilities returned null (model not in catalogue) or returned a capabilities object whose profiles list is empty for the request kind (generations vs edits).
Common situations: Model does not support output profiles at all; the model supports profiles for generations but not edits (or vice versa); model is not in the catalogue; catalogue fetch returned a malformed envelope.
Related errors
- Vela model ${wireModel} does not publish aspect ${aspect}; s
- Vela model ${wireModel} does not publish a quality capabilit
- Vela model ${wireModel} does not publish quality ${tier}; su
- Vela model ${wireModel} does not publish resolution ${reques
- authorized pull receipt has invalid ${key}
AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12).
Data as JSON: /api/errors/153e38128bd68be2.
Report an issue: GitHub.