|
_id: replicate |
|
author: Anton Breslavskii | https://github.com/breslavsky |
|
description: Provides features to use AI models from Replicate AI |
|
readme: "" |
|
title: Replicate AI |
|
url: https://huggingface.co/PiperMy/Node-Packages/resolve/main/replicate.yaml |
|
version: 5 |
|
nodes: |
|
generate_on_flux_replicate: |
|
_id: generate_on_flux_replicate |
|
arrange: |
|
x: 300 |
|
y: 120 |
|
category: |
|
id: generate_images |
|
title: en=Generate images;ru=Генерация изображений |
|
costs: |- |
|
const COST_PER_IMAGE = 0.01; |
|
(() => { |
|
const { imagesCount } = inputs; |
|
return imagesCount * COST_PER_IMAGE; |
|
})() |
|
environment: |
|
REPLICATE_TOKEN: |
|
title: Replicate token |
|
description: Go to [Replicate](https://replicate.com/account/api-tokens) to take a keys |
|
type: string |
|
scope: global |
|
inputs: |
|
prompt: |
|
order: 1 |
|
title: en=Prompt;ru=Подсказка |
|
type: string |
|
required: true |
|
multiline: true |
|
default: walking cat at the moon |
|
imagesCount: |
|
order: 2 |
|
title: en=Images count;ru=Кол-во |
|
type: integer |
|
required: true |
|
min: 1 |
|
max: 4 |
|
step: 1 |
|
default: 1 |
|
aspectRatio: |
|
order: 3 |
|
title: en=Aspect ratio;ru=Размер |
|
type: string |
|
default: 1:1 |
|
enum: |
|
- 1:1 |
|
- 21:9 |
|
- 16:9 |
|
- 3:2 |
|
- 2:3 |
|
- 4:5 |
|
- 5:4 |
|
- 3:4 |
|
- 4:3 |
|
- 9:21 |
|
- 9:16 |
|
outputs: |
|
images: |
|
title: Images |
|
type: image[] |
|
image1: |
|
title: Image 1 |
|
type: image |
|
image2: |
|
title: Image 2 |
|
type: image |
|
image3: |
|
title: Image 3 |
|
type: image |
|
image4: |
|
title: Image 4 |
|
type: image |
|
package: replicate |
|
script: | |
|
export async function run({ inputs, state }) { |
|
|
|
const { RepeatNode, NextNode } = DEFINITIONS; |
|
|
|
const REPLICATE_TOKEN = env?.variables?.get('REPLICATE_TOKEN'); |
|
if (!REPLICATE_TOKEN) { |
|
error.fatal('Please, set your API token for Replicate AI'); |
|
} |
|
|
|
const { prompt, imagesCount, aspectRatio } = inputs; |
|
|
|
if (!state) { |
|
const { data: { id: task } } = await httpClient({ |
|
method: 'post', |
|
url: 'https://api.replicate.com/v1/models/black-forest-labs/flux-schnell/predictions', |
|
data: { |
|
input: { |
|
prompt, |
|
num_outputs: imagesCount, |
|
aspect_ratio: aspectRatio |
|
} |
|
}, |
|
headers: { |
|
'Authorization': `Bearer ${REPLICATE_TOKEN}`, |
|
'Content-Type': 'application/json', |
|
'Prefer': 'wait', |
|
} |
|
}); |
|
return RepeatNode.from({ state: { task }, delay: 2000 }); |
|
} else { |
|
const { task } = state; |
|
|
|
const { data } = await httpClient({ |
|
method: 'get', |
|
url: `https://api.replicate.com/v1/predictions/${task}`, |
|
headers: { |
|
'Authorization': `Bearer ${REPLICATE_TOKEN}`, |
|
'Content-Type': 'application/json' |
|
} |
|
}); |
|
|
|
const { status, error } = data; |
|
switch (status) { |
|
case 'processing': |
|
return repeat({ state: { task }, delay: 3000 }); |
|
case 'failed': |
|
error.fatal(error); |
|
case 'succeeded': |
|
const { output: images } = data; |
|
const [image1, image2, image3, image4] = images; |
|
return NextNode.from({ outputs: { images, image1, image2, image3, image4 } }); |
|
} |
|
} |
|
} |
|
source: catalog |
|
title: en=Generate on Flux;ru=Генерация Flux |
|
version: 5 |
|
|