different-ai/openwork · warning · Error

Use a square icon at least 64×64 pixels.

Error message

Use a square icon at least 64×64 pixels.

What it means

For kind === "icon", the decoded image must be at least 64×64 pixels on both axes; smaller icons are rejected because the icon is rendered at sizes up to 64px in the dashboard and marketplace and would look blurry.

Source

Thrown at ee/apps/den-web/app/(den)/dashboard/_components/brand-appearance-screen.tsx:46

  height: number;
};

async function createBrandAssetDraft(file: File, kind: BrandAssetKind): Promise<BrandAssetDraft> {
  if (file.type !== "image/png" && file.type !== "image/jpeg") throw new Error("Use a PNG or JPEG image.");
  if (file.size > BRAND_ASSET_MAX_BYTES) throw new Error("Use an image under 2 MB.");

  let image: ImageBitmap;
  try {
    image = await createImageBitmap(file);
  } catch {
    throw new Error("OpenWork could not decode that image.");
  }

  const { width, height } = image;
  image.close();
  if (width > 4096 || height > 4096) throw new Error("Use an image no larger than 4096×4096 pixels.");
  if (kind === "icon") {
    if (width < 64 || height < 64) throw new Error("Use a square icon at least 64×64 pixels.");
    if (width !== height) throw new Error("Use a square image for the app icon.");
  } else {
    const aspectRatio = width / height;
    if (width < 128 || height < 32) throw new Error("Use a wordmark at least 128×32 pixels.");
    if (aspectRatio < 1.5 || aspectRatio > 8) throw new Error("Use a horizontal wordmark between 1.5:1 and 8:1.");
  }

  return { file, previewUrl: URL.createObjectURL(file), width, height };
}

function BrandAssetUploadField({
  kind,
  title,
  description,
  currentUrl,
  managedAsset,
  draft,
  clearPending,

View on GitHub (pinned to 2b7df46e8a)

Solutions

  1. Re-export the icon at 512×512 (or at least 64×64) PNG.
  2. Draw/upscale the source art at native resolution rather than scaling up a 32px bitmap.
  3. Use a 1024×1024 master icon asset and downscale per-use in design tools.
  4. Verify dimensions before upload: if (img.width >= 64 && img.height >= 64) proceed.

Example fix

// before
await draft(tinyFavicon /* 32x32 */, "icon");
// after
await draft(highResIconPng /* 512x512 */, "icon");
Defensive patterns

Strategy: validation

Validate before calling

async function isIconBigEnough(file: File): Promise<boolean> {
  const bmp = await createImageBitmap(file);
  const ok = bmp.width >= 64 && bmp.height >= 64;
  bmp.close();
  return ok;
}

Try / catch

try {
  const asset = await createBrandAssetDraft(file, "icon");
} catch (error) {
  showToast(error instanceof Error ? error.message : "Could not use that image.");
}

Prevention

When it happens

Trigger: Uploading an app icon where width < 64 or height < 64 — e.g. a 32×32 favicon or 48×48 toolbar icon chosen as the app icon.

Common situations: Grabbing the favicon.ico from a website; exporting the icon from a small design frame; reusing a legacy low-res app icon.

Related errors


AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01). Data as JSON: /api/errors/904b9a9bbb9f9ccc. Report an issue: GitHub.