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

  1. Omit input.aspect to let the server's default profile decide
  2. Verify the model publishes profiles for the request kind (edits vs generations) via `vela media models --json`
  3. 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

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


AI-assisted analysis of nexu-io/open-design@5be4028344 (2026-08-12). Data as JSON: /api/errors/153e38128bd68be2. Report an issue: GitHub.