File size: 3,990 Bytes
a91de1e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
_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: |
      (async () => {

          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 repeat({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 next({outputs: {images, image1, image2, image3, image4}});
              }
          }
      })();
    source: catalog
    title: en=Generate on Flux;ru=Генерация Flux
    version: 5