directus-extension-ai-sdk-bundle
Version:
A small bundle of Flow Operations which enable interaction with the [OpenAI](https://beta.openai.com/overview) and [Stability](https://stability.ai/) API's.
48 lines (44 loc) • 1.26 kB
JavaScript
import { defineOperationApi } from '@directus/extensions-sdk';
import { randomUUID } from 'crypto';
import { StabilityClient } from './client';
import { stabilityAIField } from '../configuration/fields';
import { getSetting } from '../lib/util';
export default defineOperationApi({
id: 'stable-diffusion-operation',
handler: async (
{
prompt,
style="cinematic",
engine='stable-diffusion-512-v2-1',
api_key,
width=512,
height=512,
cfg_scale=7,
steps=50,
negative='blurry, bad',
location="local",
},
{ services, database, getSchema }
) => {
const { FilesService, SettingsService } = services;
const schema = await getSchema();
const settings = new SettingsService({ schema, knex: database });
const files = new FilesService({ schema, knex: database });
const apiKey = await getSetting(settings, stabilityAIField.field, api_key);
const stability = new StabilityClient(apiKey, engine);
const response = await stability.txt2img(prompt, {
width,
height,
cfg_scale,
steps,
style,
negative,
});
const id = await files.uploadOne(response.body, {
type: 'image/png',
filename_download: randomUUID()+'.png',
storage: location || 'local',
});
return { id };
},
});