1- import { mkdirSync , writeFileSync } from "fs" ;
1+ import { mkdirSync , readFileSync , writeFileSync } from "fs" ;
22import { join } from "path" ;
33import { createId } from "@paralleldrive/cuid2" ;
44import 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
3437function 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