@@ -213,3 +213,50 @@ export class ReplicateImageToImageTask extends ReplicateTask implements ImageToI
213213 throw new InferenceClientProviderOutputError ( "Received malformed response from Replicate image-to-image API" ) ;
214214 }
215215}
216+
217+ export class ReplicateImageToVideoTask extends ReplicateTask {
218+ // Synchronous: expects base64 string in args.inputs
219+ override preparePayload ( params : BodyParams ) : Record < string , unknown > {
220+ const { args } = params ;
221+ const { inputs, parameters } = args ;
222+ return {
223+ input : {
224+ ...omit ( args , [ "inputs" , "parameters" ] ) ,
225+ ...( parameters as Record < string , unknown > ) ,
226+ inputs,
227+ } ,
228+ version : params . model . includes ( ":" ) ? params . model . split ( ":" ) [ 1 ] : undefined ,
229+ } ;
230+ }
231+
232+ // Asynchronous: handles Blob to base64 conversion
233+ async preparePayloadAsync ( args : { inputs : Blob } & Record < string , unknown > ) : Promise < RequestArgs > {
234+ const { inputs, ...restArgs } = args ;
235+ const bytes = new Uint8Array ( await inputs . arrayBuffer ( ) ) ;
236+ const base64 = base64FromBytes ( bytes ) ;
237+ const imageInput = `data:${ inputs . type || "image/png" } ;base64,${ base64 } ` ;
238+ return {
239+ ...restArgs ,
240+ inputs : imageInput ,
241+ } ;
242+ }
243+
244+ // Handle the response from Replicate
245+ override async getResponse ( response : ReplicateOutput ) : Promise < Blob > {
246+ if (
247+ typeof response === "object" &&
248+ ! ! response &&
249+ "output" in response
250+ ) {
251+ if ( Array . isArray ( response . output ) && response . output . length > 0 && typeof response . output [ 0 ] === "string" ) {
252+ const urlResponse = await fetch ( response . output [ 0 ] ) ;
253+ return await urlResponse . blob ( ) ;
254+ }
255+ if ( typeof response . output === "string" && isUrl ( response . output ) ) {
256+ const urlResponse = await fetch ( response . output ) ;
257+ return await urlResponse . blob ( ) ;
258+ }
259+ }
260+ throw new InferenceClientProviderOutputError ( "Received malformed response from Replicate image-to-video API" ) ;
261+ }
262+ }
0 commit comments