Skip to content

Commit

Permalink
feat (examples): show generate-image result preview in terminal (#4728)
Browse files Browse the repository at this point in the history
  • Loading branch information
shaper authored Feb 7, 2025
1 parent 1f108fe commit 0345e59
Show file tree
Hide file tree
Showing 20 changed files with 1,526 additions and 189 deletions.
2 changes: 2 additions & 0 deletions examples/ai-core/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
output

11 changes: 7 additions & 4 deletions examples/ai-core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
"@ai-sdk/azure": "1.1.9",
"@ai-sdk/cerebras": "0.1.8",
"@ai-sdk/cohere": "1.1.8",
"@ai-sdk/deepseek": "0.1.8",
"@ai-sdk/deepinfra": "0.1.9",
"@ai-sdk/deepseek": "0.1.8",
"@ai-sdk/fal": "0.0.2",
"@ai-sdk/fireworks": "0.1.8",
"@ai-sdk/google": "1.1.10",
Expand All @@ -24,15 +24,18 @@
"@ai-sdk/replicate": "0.1.7",
"@ai-sdk/togetherai": "0.1.9",
"@ai-sdk/xai": "1.1.8",
"@opentelemetry/sdk-node": "0.54.2",
"@google/generative-ai": "0.21.0",
"@opentelemetry/auto-instrumentations-node": "0.54.0",
"@opentelemetry/sdk-node": "0.54.2",
"@opentelemetry/sdk-trace-node": "1.28.0",
"ai": "4.1.24",
"dotenv": "16.4.5",
"image-type": "^5.2.0",
"mathjs": "14.0.0",
"sharp": "^0.33.5",
"terminal-image": "^2.0.0",
"zod": "3.23.8",
"zod-to-json-schema": "3.23.5",
"@google/generative-ai": "0.21.0"
"zod-to-json-schema": "3.23.5"
},
"scripts": {
"test:e2e:all": "vitest run src/e2e/*.test.ts",
Expand Down
8 changes: 2 additions & 6 deletions examples/ai-core/src/generate-image/deepinfra.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,15 @@
import { deepinfra } from '@ai-sdk/deepinfra';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'fs';

async function main() {
const result = await generateImage({
model: deepinfra.image('black-forest-labs/FLUX-1-schnell'),
prompt: 'A resplendent quetzal mid flight amidst raindrops',
});

for (const [index, image] of result.images.entries()) {
const filename = `image-${Date.now()}-${index}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
}
await presentImages(result.images);
}

main().catch(console.error);
12 changes: 5 additions & 7 deletions examples/ai-core/src/generate-image/fal.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import { fal } from '@ai-sdk/fal';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'node:fs';

async function main() {
const { image } = await generateImage({
const { images } = await generateImage({
model: fal.image('fal-ai/flux/schnell'),
prompt: 'A cat wearing a intricate robe',
prompt:
'A cat wearing an intricate robe while gesticulating wildly, in the style of 80s pop art',
});

const filename = `image-${Date.now()}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
await presentImages(images);
}

main().catch(console.error);
10 changes: 3 additions & 7 deletions examples/ai-core/src/generate-image/fireworks.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'dotenv/config';
import { fireworks } from '@ai-sdk/fireworks';
import { experimental_generateImage as generateImage } from 'ai';
import fs from 'fs';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';

async function main() {
const result = await generateImage({
Expand All @@ -21,11 +21,7 @@ async function main() {
},
});

for (const [index, image] of result.images.entries()) {
const filename = `image-${Date.now()}-${index}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
}
await presentImages(result.images);
}

main().catch(console.error);
8 changes: 3 additions & 5 deletions examples/ai-core/src/generate-image/google-vertex.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'dotenv/config';
import { vertex } from '@ai-sdk/google-vertex';
import { experimental_generateImage as generateImage } from 'ai';
import fs from 'fs';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';

async function main() {
const { image } = await generateImage({
Expand All @@ -16,9 +16,7 @@ async function main() {
},
});

const filename = `image-${Date.now()}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
await presentImages([image]);
}

main().catch(console.error);
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { luma } from '@ai-sdk/luma';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'fs';

async function main() {
const result = await generateImage({
Expand All @@ -22,11 +22,7 @@ async function main() {
},
});

for (const [index, image] of result.images.entries()) {
const filename = `image-${Date.now()}-${index}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
}
await presentImages(result.images);
}

main().catch(console.error);
8 changes: 2 additions & 6 deletions examples/ai-core/src/generate-image/luma-image-reference.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { luma } from '@ai-sdk/luma';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'fs';

async function main() {
const result = await generateImage({
Expand All @@ -21,11 +21,7 @@ async function main() {
},
});

for (const [index, image] of result.images.entries()) {
const filename = `image-${Date.now()}-${index}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
}
await presentImages(result.images);
}

main().catch(console.error);
8 changes: 2 additions & 6 deletions examples/ai-core/src/generate-image/luma-modify-image.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { luma } from '@ai-sdk/luma';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'fs';

async function main() {
const result = await generateImage({
Expand All @@ -19,11 +19,7 @@ async function main() {
},
});

for (const [index, image] of result.images.entries()) {
const filename = `image-${Date.now()}-${index}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
}
await presentImages(result.images);
}

main().catch(console.error);
8 changes: 2 additions & 6 deletions examples/ai-core/src/generate-image/luma-style-reference.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { luma } from '@ai-sdk/luma';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'fs';

async function main() {
const result = await generateImage({
Expand All @@ -21,11 +21,7 @@ async function main() {
},
});

for (const [index, image] of result.images.entries()) {
const filename = `image-${Date.now()}-${index}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
}
await presentImages(result.images);
}

main().catch(console.error);
8 changes: 2 additions & 6 deletions examples/ai-core/src/generate-image/luma.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { luma } from '@ai-sdk/luma';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'fs';

async function main() {
const result = await generateImage({
Expand All @@ -15,11 +15,7 @@ async function main() {
},
});

for (const [index, image] of result.images.entries()) {
const filename = `image-${Date.now()}-${index}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
}
await presentImages(result.images);
}

main().catch(console.error);
8 changes: 2 additions & 6 deletions examples/ai-core/src/generate-image/openai-many.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { openai } from '@ai-sdk/openai';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'fs';

async function main() {
const { images } = await generateImage({
Expand All @@ -10,11 +10,7 @@ async function main() {
prompt: 'Santa Claus driving a Cadillac',
});

for (const image of images) {
const filename = `image-${Date.now()}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
}
await presentImages(images);
}

main().catch(console.error);
6 changes: 2 additions & 4 deletions examples/ai-core/src/generate-image/openai.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import { openai } from '@ai-sdk/openai';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'fs';

async function main() {
const { image } = await generateImage({
model: openai.image('dall-e-3'),
prompt: 'Santa Claus driving a Cadillac',
});

const filename = `image-${Date.now()}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
await presentImages([image]);
}

main().catch(console.error);
6 changes: 2 additions & 4 deletions examples/ai-core/src/generate-image/replicate-1.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import { replicate } from '@ai-sdk/replicate';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'node:fs';

async function main() {
const { image } = await generateImage({
model: replicate.image('black-forest-labs/flux-schnell'),
prompt: 'The Loch Ness Monster getting a manicure',
});

const filename = `image-${Date.now()}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
await presentImages([image]);
}

main().catch(console.error);
6 changes: 2 additions & 4 deletions examples/ai-core/src/generate-image/replicate-2.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { replicate } from '@ai-sdk/replicate';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'node:fs';

async function main() {
const { image } = await generateImage({
Expand All @@ -10,9 +10,7 @@ async function main() {
aspectRatio: '16:9',
});

const filename = `image-${Date.now()}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
await presentImages([image]);
}

main().catch(console.error);
6 changes: 2 additions & 4 deletions examples/ai-core/src/generate-image/replicate-3.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { replicate } from '@ai-sdk/replicate';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'node:fs';

async function main() {
const { image } = await generateImage({
Expand All @@ -15,9 +15,7 @@ async function main() {
},
});

const filename = `image-${Date.now()}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
await presentImages([image]);
}

main().catch(console.error);
6 changes: 2 additions & 4 deletions examples/ai-core/src/generate-image/replicate-versioned.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { replicate } from '@ai-sdk/replicate';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'node:fs';

async function main() {
const { image } = await generateImage({
Expand All @@ -11,9 +11,7 @@ async function main() {
prompt: 'The Loch Ness Monster getting a manicure',
});

const filename = `image-${Date.now()}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
await presentImages([image]);
}

main().catch(console.error);
8 changes: 2 additions & 6 deletions examples/ai-core/src/generate-image/togetherai.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { togetherai } from '@ai-sdk/togetherai';
import { experimental_generateImage as generateImage } from 'ai';
import { presentImages } from '../lib/present-image';
import 'dotenv/config';
import fs from 'fs';

async function main() {
const result = await generateImage({
Expand All @@ -16,11 +16,7 @@ async function main() {
},
});

for (const [index, image] of result.images.entries()) {
const filename = `image-${Date.now()}-${index}.png`;
fs.writeFileSync(filename, image.uint8Array);
console.log(`Image saved to ${filename}`);
}
await presentImages(result.images);
}

main().catch(console.error);
Loading

0 comments on commit 0345e59

Please sign in to comment.