Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ async function virtualTryOn(
};

const image = await client.models.recontextImage({
model: 'virtual-try-on-preview-08-04',
model: 'virtual-try-on-001',
source: source,
});

Expand Down
6 changes: 4 additions & 2 deletions genai/image-generation/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@
"test": "c8 mocha -p -j 2 --timeout 2400000 test/*.test.js"
},
"dependencies": {
"@google/genai": "1.34.0",
"@google-cloud/storage": "^7.17.3",
"@google/genai": "1.34.0",
"date-fns": "^4.1.0"
},
"devDependencies": {
"c8": "^10.0.0",
"chai": "^4.5.0",
"mocha": "^10.0.0"
"mocha": "^10.0.0",
"proxyquire": "^2.1.3",
"sinon": "^21.1.2"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,27 +15,66 @@
'use strict';

const {assert} = require('chai');
const {describe, it} = require('mocha');
const {describe, it, beforeEach, afterEach} = require('mocha');
const proxyquire = require('proxyquire');
const sinon = require('sinon');

const projectId = process.env.CAIP_PROJECT_ID;
describe('imggen-canny-ctrl-type-with-txt-img', () => {
const projectId = process.env.CAIP_PROJECT_ID || 'mock-project-id';
const location = 'us-central1';
const MOCK_IMAGE_URI = 'gs://mock-bucket/mock-image.png';
let sample;
let editImageStub;

const sample = require('../imggen-canny-ctrl-type-with-txt-img');
const location = 'us-central1';
const {delay} = require('../../test/util');
const {createOutputGcsUri} = require('./imggen-util');
beforeEach(() => {
editImageStub = sinon.stub().resolves({
generatedImages: [
{
image: {
gcsUri: MOCK_IMAGE_URI,
},
},
],
});

describe('imggen-canny-ctrl-type-with-txt-img', () => {
it('should return an array of generated image URIs', async function () {
this.timeout(180000);
this.retries(4);
const output = await createOutputGcsUri();
console.log(output.uri);
await delay(this.test);
const generatedFileNames = await sample.generateImage(
output.uri,
projectId,
location
);
assert(generatedFileNames.length > 0);
sample = proxyquire('../imggen-canny-ctrl-type-with-txt-img', {
'@google/genai': {
GoogleGenAI: class MockGoogleGenAI {
constructor() {
this.models = {
editImage: editImageStub,
};
}
},
ControlReferenceImage: class MockControlReferenceImage {},
},
});
});

afterEach(() => {
sinon.restore();
});

it('should return a generated image URI', async () => {
const mockOutputUri = 'gs://test-bucket/test';
try {
const generatedUri = await sample.generateImage(
mockOutputUri,
projectId,
location
);

assert.isTrue(editImageStub.calledOnce);

const apiCallArgs = editImageStub.firstCall.args[0];
assert.strictEqual(apiCallArgs.model, 'imagen-3.0-capability-001');
assert.strictEqual(apiCallArgs.config.outputGcsUri, mockOutputUri);

assert.isString(generatedUri);
assert.strictEqual(generatedUri, MOCK_IMAGE_URI);
} catch (err) {
console.error('Image generation failed:', err);
throw err;
}
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -15,33 +15,60 @@
'use strict';

const {assert} = require('chai');
const {describe, it} = require('mocha');
const {describe, it, beforeEach} = require('mocha');
const proxyquire = require('proxyquire');
const sinon = require('sinon');

const projectId = process.env.CAIP_PROJECT_ID;
describe('imggen-raw-reference-with-txt-img', () => {
const projectId = process.env.CAIP_PROJECT_ID || 'mock-project-id';
const location = 'us-central1';
const MOCK_IMAGE_URI = 'gs://mock-bucket/mock-image.png';

const sample = require('../imggen-raw-reference-with-txt-img');
const {delay} = require('../../test/util');
const {createOutputGcsUri} = require('./imggen-util');
const location = 'us-central1';
let sample;
let editImageStub;

describe('imggen-raw-reference-with-txt-img', () => {
it('should return an array of generated image URIs', async function () {
this.timeout(600000);
this.retries(3);
beforeEach(() => {
editImageStub = sinon.stub().resolves({
generatedImages: [
{
image: {
gcsUri: MOCK_IMAGE_URI,
},
},
],
});

const output = await createOutputGcsUri();
console.log('Output GCS URI:', output.uri);
sample = proxyquire('../imggen-raw-reference-with-txt-img', {
'@google/genai': {
GoogleGenAI: class MockGoogleGenAI {
constructor() {
this.models = {
editImage: editImageStub,
};
}
},
RawReferenceImage: class MockRawReferenceImage {},
},
});
});

afterEach(() => {
sinon.restore();
});

it('should return a generated image URI', async () => {
const mockOutputUri = 'gs://test-bucket/test';

try {
await delay(this.test);
const generatedFileNames = await sample.generateImage(
output.uri,
const generatedUri = await sample.generateImage(
mockOutputUri,
projectId,
location
);
console.log('Generated files:', generatedFileNames);

assert(generatedFileNames.length > 0);
const apiCallArgs = editImageStub.firstCall.args[0];
assert.strictEqual(apiCallArgs.model, 'imagen-3.0-capability-001');
assert.isString(generatedUri);
assert.strictEqual(generatedUri, MOCK_IMAGE_URI);
} catch (err) {
console.error('Image generation failed:', err);
throw err;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,32 +15,70 @@
'use strict';

const {assert} = require('chai');
const {describe, it} = require('mocha');
const {describe, it, beforeEach, afterEach} = require('mocha');
const proxyquire = require('proxyquire');
const sinon = require('sinon');

const projectId = process.env.CAIP_PROJECT_ID;
const sample = require('../imggen-scribble-ctrl-type-with-txt-img');
const {delay} = require('../../test/util');
const {createOutputGcsUri} = require('./imggen-util');
const location = 'us-central1';
describe('imggen-scribble-ctrl-type-with-txt-img', () => {
const projectId = process.env.CAIP_PROJECT_ID || 'mock-project-id';
const location = 'us-central1';
const MOCK_IMAGE_URI = 'gs://mock-bucket/mock-image.png';

describe('imggen-scribble-ctrl-type-with-txt-img', async () => {
it('should generate images from a text prompt with control reference image', async function () {
this.timeout(600000);
this.retries(3);
let sample;
let editImageStub;

const output = await createOutputGcsUri();
console.log('Output GCS URI:', output.uri);
beforeEach(() => {
editImageStub = sinon.stub().resolves({
generatedImages: [
{
image: {
gcsUri: MOCK_IMAGE_URI,
},
},
],
});

sample = proxyquire('../imggen-scribble-ctrl-type-with-txt-img', {
'@google/genai': {
GoogleGenAI: class MockGoogleGenAI {
constructor() {
this.models = {
editImage: editImageStub,
};
}
},
ControlReferenceImage: class MockControlReferenceImage {},
},
});
});

afterEach(() => {
sinon.restore();
});

it('should generate images from a text prompt with control reference image', async () => {
const mockOutputUri = 'gs://test-bucket/test';

try {
await delay(this.test);
const generatedFileNames = await sample.generateImage(
output.uri,
const generatedImages = await sample.generateImage(
mockOutputUri,
projectId,
location
);
console.log('Generated files:', generatedFileNames);

assert(generatedFileNames.length > 0);
const apiCallArgs = editImageStub.firstCall.args[0];
assert.strictEqual(apiCallArgs.model, 'imagen-3.0-capability-001');
assert.isArray(generatedImages, 'The response should be an array');
assert.lengthOf(
generatedImages,
1,
'The array should contain one image object'
);
assert.strictEqual(
generatedImages[0].image.gcsUri,
MOCK_IMAGE_URI,
'The generated URI should match the mock URI'
);
} catch (err) {
console.error('Image generation failed:', err);
throw err;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,73 @@
'use strict';

const {assert} = require('chai');
const {describe, it} = require('mocha');

const projectId = process.env.CAIP_PROJECT_ID;
const sample = require('../imggen-style-reference-with-txt-img');
const {delay} = require('../../test/util');
const {createOutputGcsUri} = require('./imggen-util');
const location = 'us-central1';

describe('imggen-style-reference-with-txt-img', async () => {
it('should generate images from a text prompt with style reference', async function () {
this.timeout(180000);
this.retries(4);
const output = await createOutputGcsUri();
console.log(output.uri);
await delay(this.test);
const generatedFileNames = await sample.generateImage(
output.uri,
projectId,
location
);
assert(generatedFileNames.length > 0);
const {describe, it, beforeEach, afterEach} = require('mocha');
const proxyquire = require('proxyquire');
const sinon = require('sinon');

describe('imggen-style-reference-with-txt-img', () => {
const projectId = process.env.CAIP_PROJECT_ID || 'mock-project-id';
const location = 'us-central1';
const MOCK_IMAGE_URI = 'gs://mock-bucket/mock-image.png';

let sample;
let editImageStub;

beforeEach(() => {
editImageStub = sinon.stub().resolves({
generatedImages: [
{
image: {
gcsUri: MOCK_IMAGE_URI,
},
},
],
});

sample = proxyquire('../imggen-style-reference-with-txt-img', {
'@google/genai': {
GoogleGenAI: class MockGoogleGenAI {
constructor() {
this.models = {
editImage: editImageStub,
};
}
},
StyleReferenceImage: class MockStyleReferenceImage {},
},
});
});

afterEach(() => {
sinon.restore();
});

it('should generate images from a text prompt with style reference', async () => {
const mockOutputUri = 'gs://test-bucket/test-prefix';

try {
const generatedImages = await sample.generateImage(
mockOutputUri,
projectId,
location
);

const apiCallArgs = editImageStub.firstCall.args[0];
assert.strictEqual(apiCallArgs.model, 'imagen-3.0-capability-001');
assert.isArray(generatedImages, 'The response should be an array');
assert.lengthOf(
generatedImages,
1,
'The array should contain one image object'
);
assert.strictEqual(
generatedImages[0].image.gcsUri,
MOCK_IMAGE_URI,
'The generated URI should match the mock URI'
);
} catch (err) {
console.error('Image generation failed:', err);
throw err;
}
});
});
Loading
Loading