nexu-io/open-design · error · Error

Vela model ${wireModel} does not publish resolution ${reques

Error message

Vela model ${wireModel} does not publish resolution ${requestedResolution} at aspect ${aspect}; supported: ${supported.join(', ')}

What it means

Thrown by selectImageOutputProfile() when the requested aspect is published but the requested resolution does not match any resolution published at that aspect. matchPublishedValue case-folds, so a mismatch means the resolution value is genuinely unsupported for that aspect. The supported resolutions at that aspect are listed in the error.

Source

Thrown at apps/daemon/src/media/vela.ts:304

  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(', ')}`,
      );
    }
    return exact;
  }
  // Several resolutions can share one aspect ratio. Prefer the one the model
  // defaults to, so asking only for a shape does not silently change quality
  // tier or price relative to an unqualified request.
  const preferred = matching.find((profile) => profile.resolution === published.defaultResolution);
  return preferred ?? matching[0];
}

function videoTaskError(task: JsonRecord): string {
  const raw = task.error;
  if (typeof raw === 'string' && raw.trim()) return raw.trim();
  if (raw == null) return 'no provider error was returned';
  try {
    return JSON.stringify(raw);

View on GitHub (pinned to 5be4028344)

Solutions

  1. Use one of the resolutions listed in the error message for that aspect
  2. Omit input.resolution to get the model's default resolution for that aspect
  3. Check `vela media models --json` for current resolution options at the aspect

Example fix

// before
await renderVelaImage({ ...input, aspect: '16:9', resolution: '4K' }); // only 1K/2K published
// after
await renderVelaImage({ ...input, aspect: '16:9', resolution: '2K' });
Defensive patterns

Strategy: validation

Validate before calling

function resolutionIsPublishedAtAspect(
  resolution: string,
  aspect: string,
  published: VelaPublishedImageCapabilities,
): boolean {
  return published.profiles.some(
    p => p.aspectRatio === aspect && p.resolution.toLowerCase() === resolution.toLowerCase(),
  );
}

if (resolution && !resolutionIsPublishedAtAspect(resolution, aspect, published)) {
  // pick a supported resolution or drop it to use the default
}

Try / catch

try {
  const profile = selectImageOutputProfile(published, aspect, resolution, wireModel);
} catch (err) {
  if (err instanceof Error && /does not publish resolution/.test(err.message)) {
    // parse supported resolutions from the message and retry, or drop resolution
  } else throw err;
}

Prevention

When it happens

Trigger: input.aspect matches a published aspect and input.resolution is set, but no profile with that aspect has the requested resolution (e.g. requesting 4K at an aspect that only publishes 1K and 2K).

Common situations: Resolution not offered at that aspect; typo; catalogue changed available resolutions; caller mixed a resolution from one aspect with another.

Related errors


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