diff --git a/components/public/material-poster.tsx b/components/public/material-poster.tsx
index 6ee30e3..28dd1bc 100644
--- a/components/public/material-poster.tsx
+++ b/components/public/material-poster.tsx
@@ -148,7 +148,6 @@ export function MaterialPoster({
src={characterArtUrl}
alt={character.name}
fill
- unoptimized
sizes={`${artworkImageSize}px`}
quality={POSTER_IMAGE_QUALITY}
className="object-contain object-center"
@@ -160,7 +159,6 @@ export function MaterialPoster({
src={characterArtUrl}
alt=""
fill
- unoptimized
sizes={`${artworkImageSize}px`}
quality={POSTER_IMAGE_QUALITY}
className="object-contain object-center"
diff --git a/components/public/structured-guide.tsx b/components/public/structured-guide.tsx
index 5f972c5..890d9f3 100644
--- a/components/public/structured-guide.tsx
+++ b/components/public/structured-guide.tsx
@@ -217,6 +217,7 @@ function GuideOverview({
alt={`ไกด์ ${guide.name}`}
fill
sizes="(min-width: 1280px) 600px, (min-width: 1024px) calc(50vw - 44px), calc(100vw - 32px)"
+ quality={100}
priority
className="object-cover"
/>
diff --git a/components/public/weapon-image-export.tsx b/components/public/weapon-image-export.tsx
index 000d64b..766144f 100644
--- a/components/public/weapon-image-export.tsx
+++ b/components/public/weapon-image-export.tsx
@@ -32,7 +32,7 @@ function formattedPercent(value: string | null): string {
return `${numeric.toLocaleString("en-US", { maximumFractionDigits: 2 })}%`;
}
-function WeaponComparisonImage({
+export function WeaponComparisonImage({
guide,
group,
metric,
@@ -60,7 +60,9 @@ function WeaponComparisonImage({
)}
- {conditionLabel}
+ {conditionLabel ? (
+ {conditionLabel}
+ ) : null}
@@ -121,8 +123,8 @@ export function WeaponImageExport({
conditionIndex: number;
}) {
const [language, setLanguage] = useExportLanguage();
- const conditionLabel = group.name || `Condition ${conditionIndex + 1}`;
- const baseName = `${guide.name}-Weapon-${conditionLabel}`;
+ const conditionLabel = group.name;
+ const baseName = `${guide.name}-Weapon-${conditionLabel || `Condition ${conditionIndex + 1}`}`;
const metricOptions = ([
["overallPercent", "Overall Damage"],
["personalPercent", "Personal Damage"],
@@ -159,12 +161,7 @@ export function WeaponImageExport({
guide={guide}
group={group}
metric={metric}
- conditionLabel={group.name ? conditionLabel : (
-
- )}
+ conditionLabel={conditionLabel}
/>
))}
diff --git a/lib/guides/image-export.test.tsx b/lib/guides/image-export.test.tsx
index e8a1348..308a1ee 100644
--- a/lib/guides/image-export.test.tsx
+++ b/lib/guides/image-export.test.tsx
@@ -8,9 +8,29 @@ import {
} from "@/components/public/guide-image-export";
import { MaterialPoster } from "@/components/public/material-poster";
import { ConstellationImage } from "@/components/public/constellation-image";
+import { WeaponComparisonImage } from "@/components/public/weapon-image-export";
import type { PublicGuide } from "@/lib/guides/queries";
describe("image export controls", () => {
+ it("omits the placeholder condition from weapon export images", () => {
+ const guide = {
+ character: { name: "Raiden", splashImageUrl: "/splash.png" },
+ coverUrl: "/cover.png",
+ } as PublicGuide;
+ const group = { rows: [], name: null, note: null } as unknown as PublicGuide["weaponGroups"][number];
+ const html = renderToStaticMarkup(
+ ,
+ );
+
+ expect(html).not.toContain("Condition 1");
+ expect(html).not.toContain("เงื่อนไข 1");
+ });
+
it("always offers both export modes even without notes", () => {
const html = renderToStaticMarkup(No notes);
expect(html).toContain("ส่งออกภาพ");
@@ -93,4 +113,21 @@ describe("material poster text", () => {
expect(html).not.toContain("วัสดุ");
expect(html).not.toContain("เลเวล 90");
});
+
+ it("optimizes scale-aware character artwork and bleeding layers for export", () => {
+ const characterArtUrl = "https://buzz-cdn.astrxl.dev/posters/raiden.png";
+ const html = renderToStaticMarkup(
+ ,
+ );
+
+ expect(html).toContain("/_next/image?url=https%3A%2F%2Fbuzz-cdn.astrxl.dev%2Fposters%2Fraiden.png");
+ expect(html).toContain("w=3840");
+ expect(html).toContain('sizes="3200px"');
+ expect(html).not.toContain(`src="${characterArtUrl}"`);
+ });
});