раздел 03

Интеграция по API

Теперь вызовем модель из кода. Логика везде одинаковая: передаёте ключ, указываете эндпоинт модели, шлёте параметры (input), получаете результат - обычно URL сгенерированного медиа.

Ключ в .env

Ключ передаётся через переменную окружения FAL_KEY. Не вписывайте его в код и не коммитьте - держите в .env:

FAL_KEY=ваш-ключ

Клиенты сами читают FAL_KEY из окружения, так что отдельно прописывать ключ в коде не нужно.

Python: fal-client

Установка:

pip install fal-client

Вызов модели с ожиданием результата (subscribe - дождаться готового ответа):

import fal_client

result = fal_client.subscribe(
    "fal-ai/flux/dev",
    arguments={
        "prompt": "a cozy cabin in the woods, morning light",
    },
)

# result содержит данные генерации, обычно с URL медиа
print(result["images"][0]["url"])

JS: @fal-ai/client

Установка:

npm install @fal-ai/client

Вызов с ожиданием результата:

import { fal } from "@fal-ai/client";

const result = await fal.subscribe("fal-ai/flux/dev", {
  input: {
    prompt: "a cozy cabin in the woods, morning light",
  },
});

// result.data содержит результат генерации, обычно с URL медиа
console.log(result.data.images[0].url);

Очередь для долгих задач

Для тяжёлых задач (видео, большие генерации) держать одно длинное соединение неудобно. Тогда задачу отправляют в очередь через submit: вы получаете идентификатор запроса, а результат забираете позже, когда он готов.

import fal_client

handler = fal_client.submit(
    "fal-ai/flux/dev",
    arguments={"prompt": "a cozy cabin in the woods"},
)

request_id = handler.request_id
# позже забираем результат по request_id
result = fal_client.result("fal-ai/flux/dev", request_id)
import { fal } from "@fal-ai/client";

const { request_id } = await fal.queue.submit("fal-ai/flux/dev", {
  input: { prompt: "a cozy cabin in the woods" },
});

// позже забираем результат по request_id
const result = await fal.queue.result("fal-ai/flux/dev", { requestId: request_id });

Что в итоге приходит

Результат почти всегда содержит ссылку (URL) на сгенерированный файл - картинку, видео или аудио. Эту ссылку вы сохраняете у себя или отдаёте пользователю. Структура ответа зависит от модели, поэтому ориентируйтесь на её страницу в каталоге.