Skip to content

Commit bacdea1

Browse files
kwrkbclaude
andcommitted
fix: referenceImageUrl の外部 URL 対応 (Issue #8)
resolveReferencePath() を loadReferenceImage() に置き換え、 http/https URL の場合は fetch でダウンロード、 ローカルパスの場合は readFileSync で読み込むよう分岐を追加。 Closes #8 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent fc3ec6e commit bacdea1

1 file changed

Lines changed: 11 additions & 8 deletions

File tree

src/lib/image-gen/dalle2-provider.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { mkdirSync, writeFileSync } from "fs";
1+
import { mkdirSync, readFileSync, writeFileSync } from "fs";
22
import { join } from "path";
33
import { createId } from "@paralleldrive/cuid2";
44
import OpenAI from "openai";
@@ -24,11 +24,14 @@ async function sleep(ms: number) {
2424
await new Promise((resolve) => setTimeout(resolve, ms));
2525
}
2626

27-
function resolveReferencePath(referenceImageUrl: string): string {
28-
const trimmed = referenceImageUrl.startsWith("/")
29-
? referenceImageUrl.slice(1)
30-
: referenceImageUrl;
31-
return join(process.cwd(), "public", trimmed);
27+
async function loadReferenceImage(imageUrl: string): Promise<Buffer> {
28+
if (imageUrl.startsWith("http://") || imageUrl.startsWith("https://")) {
29+
const res = await fetch(imageUrl);
30+
if (!res.ok) throw new Error(`Failed to fetch reference image: ${res.status}`);
31+
return Buffer.from(await res.arrayBuffer());
32+
}
33+
const trimmed = imageUrl.startsWith("/") ? imageUrl.slice(1) : imageUrl;
34+
return readFileSync(join(process.cwd(), "public", trimmed));
3235
}
3336

3437
function createMaskBuffer(size: number, direction: Direction): Buffer {
@@ -76,10 +79,10 @@ export class DallE2ImageGenProvider implements ImageGenProvider {
7679
}
7780

7881
async generate(input: GenerateInput): Promise<GenerateOutput> {
79-
const referenceImagePath = resolveReferencePath(input.referenceImageUrl);
82+
const referenceImageBuffer = await loadReferenceImage(input.referenceImageUrl);
8083
const size = input.size <= 256 ? 256 : 512;
8184

82-
const referenceBuffer = await sharp(referenceImagePath)
85+
const referenceBuffer = await sharp(referenceImageBuffer)
8386
.resize(size, size, { fit: "cover" })
8487
.ensureAlpha()
8588
.png()

0 commit comments

Comments
 (0)