New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

stability-ai

Package Overview
Dependencies
Maintainers
0
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

stability-ai

Node SDK for Stability AI REST API

latest
Source
npmnpm
Version
0.7.0
Version published
Weekly downloads
140
2.19%
Maintainers
0
Weekly downloads
 
Created
Source

Stability AI Node SDK

A TypeScript library to easily access the Stability AI REST API.

Installation

Yarn

yarn add stability-ai

NPM

npm i stability-ai

General Usage

import StabilityAI from 'stability-ai';

const stability = new StabilityAI(process.env.STABILITY_AI_API_KEY);

All images passed to this library must be in the format of a local filepath or a public URL.

Table of Contents

User (v1)

  • Account
  • Balance

Engines (v1)

Generation (v1)

3D (v2beta)

Stable Video (v2beta)

Stable Image (v2beta)

User (v1)

Account

const { email, id, organizations, profile_picture } = await stability.v1.user.account()

console.log('User email:', email);
console.log('User id:', id);
console.log('User organizations:', organizations);
if (profile_picture) console.log('User profile picture:', profile_picture);

Balance

const { credits } = await stability.v1.user.balance()

console.log('User credits balance:', credits);

Engines (v1)

List

const engines = await stability.v1.engines.list()

console.log('Engine list:', engines);

Generation (v1)

Text to Image

const results = await stability.v1.generation.textToImage(
  'stable-diffusion-xl-1024-v1-0', 
  [
    { text: 'a man on a horse', weight: 0.5 }
  ]
)

for (const result of results) {
  console.log('Text to image result filepath:', result.filepath);
}

Image to Image

const results = await stability.v1.generation.imageToImage(
  'stable-diffusion-xl-1024-v1-0', 
  [
    { text: 'crazy techincolor surprise', weight: 0.5 }
  ],
  'https://www.example.com/images/your-image.jpg'
)

for (const result of results) {
  console.log('Image to image result filepath:', result.filepath);
}

Image to Image - Masking

const results = await stability.v1.generation.imageToImageMasking(
  'stable-diffusion-xl-1024-v1-0', 
  [
    { text: 'a beautiful ocean', weight: 0.5 }
  ],
  'https://www.example.com/images/your-image-with-alpha-channel.png',
  {
    mask_source: 'INIT_IMAGE_ALPHA'
  }
)

for (const result of results) {
  console.log('Image to image masking result filepath:', result.filepath);
}

3D (v2beta)

Stable Fast 3D

  const result = await stability.v2beta.stable3D.stableFast3D(
    'https://www.example.com/images/photo-you-want-to-move.png'
  );

  console.log('Stable 3D Stable Fast 3D result filepath:', result.filepath);

Stable Video (v2beta)

Image to Video

const result = await stability.v2beta.stableVideo.imageToVideo(
  'https://www.example.com/images/photo-you-want-to-move.png'
);

let filepath: string | undefined = undefined;

while (!filepath) {
  const videoResult = await stability.v2beta.stableVideo.imageToVideoResult(
    result.id,
  );

  if ('filepath' in videoResult) {
    filepath = videoResult.filepath;
  } else if (
    'status' in videoResult &&
    videoResult.status === 'in-progress'
  ) {
    await new Promise((resolve) => setTimeout(resolve, 2500));
  }
}

console.log('Stable Video Image to Video result filepath:', filepath);

Stable Image (v2beta)

Generate - Ultra

const result = await stability.v2beta.stableImage.generate.ultra('a beautiful mountain');

console.log('Stable Image Generate Ultra result filepath:', result.filepath);

Generate - Core

const result = await stability.v2beta.stableImage.generate.core('a beautiful ocean');

console.log('Stable Image Generate Core result filepath:', result.filepath);

Generate - SD3

const result = await stability.v2beta.stableImage.generate.sd3('a very beautiful ocean');

console.log('Stable Image Generate SD3 result filepath:', result.filepath);

Upscale - Conservative

const result = await stability.v2beta.stableImage.upscale.conservative(
  'https://www.example.com/images/photo-you-to-4k-upscale.png',
  'UHD 4k',
);

console.log('Stable Image Upscale Conservative result filepath:', result.filepath);

Upscale - Creative

const result = await stability.v2beta.stableImage.upscale.startCreative(
  'https://www.example.com/images/photo-you-to-4k-upscale.png',
  'UHD 4k',
);

let filepath: string | undefined = undefined;

while (!filepath) {
  const upscaleResult = await stability.v2beta.stableImage.upscale.fetchCreativeResult(
    result.id,
    result.outputFormat,
  );

  if ('filepath' in upscaleResult) {
    filepath = upscaleResult.filepath;
  } else if (
    'status' in upscaleResult &&
    upscaleResult.status === 'in-progress'
  ) {
    await new Promise((resolve) => setTimeout(resolve, 2500));
  }
}

console.log('Stable Image Upscale Creative result filepath:', filepath);

Edit - Erase

const result = await stability.v2beta.stableImage.edit.erase(
  'https://www.example.com/images/your-image-of-the-earth.png'
);

console.log('Stable Image Edit Erase result filepath:', result.filepath);

Edit - Inpaint

const result = await stability.v2beta.stableImage.edit.inpaint(
  'https://www.example.com/images/your-image-of-the-earth.png',
  'disco ball',
);

console.log('Stable Image Edit Inpaint result filepath:', result.filepath);

Edit - Outpaint

const result = await stability.v2beta.stableImage.edit.outpaint(
  'https://www.example.com/images/your-image-of-the-earth.png',
  {
    prompt: 'outer space',
    left: 100
  }
);

console.log('Stable Image Edit Outpaint result filepath:', result.filepath);

Edit - Search and Replace

const result = await stability.v2beta.stableImage.edit.searchAndReplace(
  'https://www.example.com/images/your-image-of-the-earth.png',
  'a disco ball',
  'the earth'
);

console.log('Stable Image Edit Search And Replace result filepath:', result.filepath);

Edit - Remove Background

const result = await stability.v2beta.stableImage.edit.removeBackground(
  'https://www.example.com/images/your-image-of-the-earth.png',
);

console.log('Stable Image Edit Remove Background result filepath:', result.filepath);

Edit - Replace Background and Relight

const result = await stability.v2beta.stableImage.edit.replaceBackgroundAndRelight(
  LOCAL_TEST_FILES.bird,
  {
    backgroundPrompt: 'a beautiful sunset',
    foregroundPrompt: 'enhance lighting',
    lightSourceDirection: 'above',
    lightSourceStrength: 0.7,
  },
);


let filepath: string | undefined = undefined;

while (!filepath) {
  const relightResult =
    await stability.v2beta.stableImage.results.fetchAsyncGenerationResult(
      result.id,
    );

  if ('filepath' in relightResult) {
    filepath = relightResult.filepath;
  } else if (
    'status' in relightResult &&
    relightResult.status === 'in-progress'
  ) {
    await new Promise((resolve) => setTimeout(resolve, 2500));
  }
}

console.log(
  'Stable Image Edit Replace Background and Relight result filepath:',
  filepath,
);

Control - Sketch

const result = await stability.v2beta.stableImage.control.sketch(
  'https://www.example.com/images/your-image-of-the-earth.png',
  'a disco ball'
);

console.log('Stable Image Control Sketch result filepath:', result.filepath);

Control - Structure

const result = await stability.v2beta.stableImage.control.structure(
  'https://www.example.com/images/your-image-of-the-earth.png',
  'a disco ball'
);

console.log('Stable Image Control Structure result filepath:', result.filepath);

Control - Style

const result = await stability.v2beta.stableImage.control.style(
  'https://www.example.com/images/your-image-of-the-earth.png',
  'a disco ball'
);

console.log('Stable Image Control Style result filepath:', result.filepath);

Development and testing

Built in TypeScript, tested with Jest.

$ yarn install
$ yarn test

Road Map

- Add input validation for filetypes, dimensions, etc (Zod integration as candidate for this).
- Support output to S3/GCS bucket
- Wrap job/result methods into one async task w/ internal polling

Keywords

stability-ai

FAQs

Package last updated on 18 Nov 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts