Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "5.9.2"
".": "5.10.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 111
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-c7dacca97e28bceff218684bb429481a70aa47aadad983ed9178bfda75ff4cd2.yml
openapi_spec_hash: 28eb1bb901ca10d2e37db4606d2bcfa7
config_hash: 167ad0ca036d0f023c78e6496b4311e8
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-670ea0d2cc44f52a87dd3cadea45632953283e0636ba30788fdbdb22a232ccac.yml
openapi_spec_hash: d8b7d38911fead545adf3e4297956410
config_hash: 5525bda35e48ea6387c6175c4d1651fa
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 5.10.0 (2025-07-16)

Full Changelog: [v5.9.2...v5.10.0](https://github.com/openai/openai-node/compare/v5.9.2...v5.10.0)

### Features

* **api:** manual updates ([35338b4](https://github.com/openai/openai-node/commit/35338b44ace44f0f0c0b48ea94aa96d3c81ea385))


### Chores

* **internal:** version bump ([3d9de4b](https://github.com/openai/openai-node/commit/3d9de4b2f28c80ea1f92446c092b23d69955ef30))

## 5.9.2 (2025-07-15)

Full Changelog: [v5.9.1...v5.9.2](https://github.com/openai/openai-node/compare/v5.9.1...v5.9.2)
Expand Down
6 changes: 6 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,12 @@ Methods:
Types:

- <code><a href="./src/resources/images.ts">Image</a></code>
- <code><a href="./src/resources/images.ts">ImageEditCompletedEvent</a></code>
- <code><a href="./src/resources/images.ts">ImageEditPartialImageEvent</a></code>
- <code><a href="./src/resources/images.ts">ImageEditStreamEvent</a></code>
- <code><a href="./src/resources/images.ts">ImageGenCompletedEvent</a></code>
- <code><a href="./src/resources/images.ts">ImageGenPartialImageEvent</a></code>
- <code><a href="./src/resources/images.ts">ImageGenStreamEvent</a></code>
- <code><a href="./src/resources/images.ts">ImageModel</a></code>
- <code><a href="./src/resources/images.ts">ImagesResponse</a></code>

Expand Down
51 changes: 51 additions & 0 deletions examples/image-stream.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/usr/bin/env -S npm run tsn -T

import OpenAI from 'openai';
import fs from 'fs';
import path from 'path';

const client = new OpenAI();

const main = async () => {
const stream = await client.images.generate({
model: 'gpt-image-1',
prompt: 'A cute baby sea otter',
n: 1,
size: '1024x1024',
stream: true,
partial_images: 3,
});

for await (const event of stream) {
let filename: string;
let imageBuffer: Buffer;
switch (event.type) {
case 'image_generation.partial_image':
console.log(` Partial image ${event.partial_image_index + 1}/3 received`);
console.log(` Size: ${event.b64_json.length} characters (base64)`);

// Save partial image to file
filename = `partial_${event.partial_image_index + 1}.png`;
imageBuffer = Buffer.from(event.b64_json, 'base64');
fs.writeFileSync(filename, imageBuffer);
console.log(` 💾 Saved to: ${path.resolve(filename)}`);
break;
case 'image_generation.completed':
console.log(`\n✅ Final image completed!`);
console.log(` Size: ${event.b64_json.length} characters (base64)`);

// Save final image to file
filename = 'final_image.png';
imageBuffer = Buffer.from(event.b64_json, 'base64');
fs.writeFileSync(filename, imageBuffer);
console.log(` Saved to: ${path.resolve(filename)}`);
break;
default:
console.log(`❓ Unknown event: ${event}`);
}
}
};

main().catch((error) => {
console.error('Error generating image:', error);
});
2 changes: 1 addition & 1 deletion jsr.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@openai/openai",
"version": "5.9.2",
"version": "5.10.0",
"exports": {
".": "./index.ts",
"./helpers/zod": "./helpers/zod.ts",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "openai",
"version": "5.9.2",
"version": "5.10.0",
"description": "The official TypeScript library for the OpenAI API",
"author": "OpenAI <[email protected]>",
"types": "dist/index.d.ts",
Expand Down
20 changes: 20 additions & 0 deletions src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,18 @@ import {
import {
Image,
ImageCreateVariationParams,
ImageEditCompletedEvent,
ImageEditParams,
ImageEditParamsNonStreaming,
ImageEditParamsStreaming,
ImageEditPartialImageEvent,
ImageEditStreamEvent,
ImageGenCompletedEvent,
ImageGenPartialImageEvent,
ImageGenStreamEvent,
ImageGenerateParams,
ImageGenerateParamsNonStreaming,
ImageGenerateParamsStreaming,
ImageModel,
Images,
ImagesResponse,
Expand Down Expand Up @@ -1039,11 +1049,21 @@ export declare namespace OpenAI {
export {
Images as Images,
type Image as Image,
type ImageEditCompletedEvent as ImageEditCompletedEvent,
type ImageEditPartialImageEvent as ImageEditPartialImageEvent,
type ImageEditStreamEvent as ImageEditStreamEvent,
type ImageGenCompletedEvent as ImageGenCompletedEvent,
type ImageGenPartialImageEvent as ImageGenPartialImageEvent,
type ImageGenStreamEvent as ImageGenStreamEvent,
type ImageModel as ImageModel,
type ImagesResponse as ImagesResponse,
type ImageCreateVariationParams as ImageCreateVariationParams,
type ImageEditParams as ImageEditParams,
type ImageEditParamsNonStreaming as ImageEditParamsNonStreaming,
type ImageEditParamsStreaming as ImageEditParamsStreaming,
type ImageGenerateParams as ImageGenerateParams,
type ImageGenerateParamsNonStreaming as ImageGenerateParamsNonStreaming,
type ImageGenerateParamsStreaming as ImageGenerateParamsStreaming,
};

export { Audio as Audio, type AudioModel as AudioModel, type AudioResponseFormat as AudioResponseFormat };
Expand Down
2 changes: 2 additions & 0 deletions src/core/streaming.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ export class Stream<Item> implements AsyncIterable<Item> {
if (
sse.event === null ||
sse.event.startsWith('response.') ||
sse.event.startsWith('image_edit.') ||
sse.event.startsWith('image_generation.') ||
sse.event.startsWith('transcript.')
) {
let data;
Expand Down
Loading