
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
stability-ai
Advanced tools
A TypeScript library to easily access the Stability AI REST API.
yarn add stability-ai
npm i stability-ai
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.
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);
const { credits } = await stability.v1.user.balance()
console.log('User credits balance:', credits);
const engines = await stability.v1.engines.list()
console.log('Engine list:', engines);
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);
}
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);
}
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);
}
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);
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);
const result = await stability.v2beta.stableImage.generate.ultra('a beautiful mountain');
console.log('Stable Image Generate Ultra result filepath:', result.filepath);
const result = await stability.v2beta.stableImage.generate.core('a beautiful ocean');
console.log('Stable Image Generate Core result filepath:', result.filepath);
const result = await stability.v2beta.stableImage.generate.sd3('a very beautiful ocean');
console.log('Stable Image Generate SD3 result filepath:', result.filepath);
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);
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);
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);
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);
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);
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);
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);
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,
);
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);
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);
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);
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
FAQs
Node SDK for Stability AI REST API
The npm package stability-ai receives a total of 126 weekly downloads. As such, stability-ai popularity was classified as not popular.
We found that stability-ai demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?

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.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.