@teamflojo/floimg-google 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +65 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +156 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { ImageGenerator, GeneratorSchema } from "@teamflojo/floimg";
|
|
2
|
+
/**
|
|
3
|
+
* Supported Imagen models
|
|
4
|
+
*/
|
|
5
|
+
declare const IMAGEN_MODELS: readonly ["imagen-4.0-fast-generate-001", "imagen-4.0-generate-001", "imagen-4.0-ultra-generate-001", "imagen-3.0-generate-002"];
|
|
6
|
+
type ImagenModel = (typeof IMAGEN_MODELS)[number];
|
|
7
|
+
/**
|
|
8
|
+
* Supported aspect ratios
|
|
9
|
+
*/
|
|
10
|
+
declare const ASPECT_RATIOS: readonly ["1:1", "3:4", "4:3", "9:16", "16:9"];
|
|
11
|
+
type AspectRatio = (typeof ASPECT_RATIOS)[number];
|
|
12
|
+
/**
|
|
13
|
+
* Schema for the Google Imagen generator
|
|
14
|
+
*/
|
|
15
|
+
export declare const googleImagenSchema: GeneratorSchema;
|
|
16
|
+
/**
|
|
17
|
+
* Configuration for the Google Imagen generator
|
|
18
|
+
*/
|
|
19
|
+
export interface GoogleImagenConfig {
|
|
20
|
+
/** API key for Google AI / Gemini API */
|
|
21
|
+
apiKey?: string;
|
|
22
|
+
/** Default model to use */
|
|
23
|
+
model?: ImagenModel;
|
|
24
|
+
/** Default aspect ratio */
|
|
25
|
+
aspectRatio?: AspectRatio;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parameters for image generation
|
|
29
|
+
*/
|
|
30
|
+
export interface GoogleImagenParams extends Record<string, unknown> {
|
|
31
|
+
/** Text prompt describing the desired image */
|
|
32
|
+
prompt?: string;
|
|
33
|
+
/** Imagen model to use */
|
|
34
|
+
model?: ImagenModel;
|
|
35
|
+
/** Image aspect ratio */
|
|
36
|
+
aspectRatio?: AspectRatio;
|
|
37
|
+
/** Number of images to generate (1-4) */
|
|
38
|
+
numberOfImages?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Create a Google Imagen image generator instance
|
|
42
|
+
*
|
|
43
|
+
* Generates images using Google's Imagen models via the Gemini API.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* import createClient from '@teamflojo/floimg';
|
|
48
|
+
* import googleImagen from '@teamflojo/floimg-google';
|
|
49
|
+
*
|
|
50
|
+
* const floimg = createClient();
|
|
51
|
+
* floimg.registerGenerator(googleImagen({ apiKey: process.env.GOOGLE_AI_API_KEY }));
|
|
52
|
+
*
|
|
53
|
+
* const image = await floimg.generate({
|
|
54
|
+
* generator: 'google-imagen',
|
|
55
|
+
* params: {
|
|
56
|
+
* prompt: 'A serene mountain landscape at sunset',
|
|
57
|
+
* model: 'imagen-4.0-generate-001',
|
|
58
|
+
* aspectRatio: '16:9',
|
|
59
|
+
* }
|
|
60
|
+
* });
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export default function googleImagen(config?: GoogleImagenConfig): ImageGenerator;
|
|
64
|
+
export { googleImagen };
|
|
65
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAa,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpF;;GAEG;AACH,QAAA,MAAM,aAAa,kIAKT,CAAC;AAEX,KAAK,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD;;GAEG;AACH,QAAA,MAAM,aAAa,gDAAiD,CAAC;AAErE,KAAK,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAsChC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjE,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,yBAAyB;IACzB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAsBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,MAAM,GAAE,kBAAuB,GAAG,cAAc,CA+EpF;AAGD,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { GoogleGenAI } from "@google/genai";
|
|
2
|
+
/**
|
|
3
|
+
* Supported Imagen models
|
|
4
|
+
*/
|
|
5
|
+
const IMAGEN_MODELS = [
|
|
6
|
+
"imagen-4.0-fast-generate-001",
|
|
7
|
+
"imagen-4.0-generate-001",
|
|
8
|
+
"imagen-4.0-ultra-generate-001",
|
|
9
|
+
"imagen-3.0-generate-002",
|
|
10
|
+
];
|
|
11
|
+
/**
|
|
12
|
+
* Supported aspect ratios
|
|
13
|
+
*/
|
|
14
|
+
const ASPECT_RATIOS = ["1:1", "3:4", "4:3", "9:16", "16:9"];
|
|
15
|
+
/**
|
|
16
|
+
* Schema for the Google Imagen generator
|
|
17
|
+
*/
|
|
18
|
+
export const googleImagenSchema = {
|
|
19
|
+
name: "google-imagen",
|
|
20
|
+
description: "Generate images using Google's Imagen models via the Gemini API",
|
|
21
|
+
category: "AI",
|
|
22
|
+
parameters: {
|
|
23
|
+
prompt: {
|
|
24
|
+
type: "string",
|
|
25
|
+
title: "Prompt",
|
|
26
|
+
description: "Describe the image you want to generate (max 480 tokens)",
|
|
27
|
+
},
|
|
28
|
+
model: {
|
|
29
|
+
type: "string",
|
|
30
|
+
title: "Model",
|
|
31
|
+
description: "Imagen model variant",
|
|
32
|
+
enum: [...IMAGEN_MODELS],
|
|
33
|
+
default: "imagen-4.0-generate-001",
|
|
34
|
+
},
|
|
35
|
+
aspectRatio: {
|
|
36
|
+
type: "string",
|
|
37
|
+
title: "Aspect Ratio",
|
|
38
|
+
description: "Image aspect ratio",
|
|
39
|
+
enum: [...ASPECT_RATIOS],
|
|
40
|
+
default: "1:1",
|
|
41
|
+
},
|
|
42
|
+
numberOfImages: {
|
|
43
|
+
type: "number",
|
|
44
|
+
title: "Number of Images",
|
|
45
|
+
description: "Number of images to generate (1-4)",
|
|
46
|
+
default: 1,
|
|
47
|
+
minimum: 1,
|
|
48
|
+
maximum: 4,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
requiredParameters: ["prompt"],
|
|
52
|
+
// AI metadata
|
|
53
|
+
isAI: true,
|
|
54
|
+
requiresApiKey: true,
|
|
55
|
+
apiKeyEnvVar: "GOOGLE_AI_API_KEY",
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Map aspect ratio to approximate dimensions
|
|
59
|
+
*/
|
|
60
|
+
function getApproximateDimensions(aspectRatio) {
|
|
61
|
+
switch (aspectRatio) {
|
|
62
|
+
case "1:1":
|
|
63
|
+
return { width: 1024, height: 1024 };
|
|
64
|
+
case "3:4":
|
|
65
|
+
return { width: 768, height: 1024 };
|
|
66
|
+
case "4:3":
|
|
67
|
+
return { width: 1024, height: 768 };
|
|
68
|
+
case "9:16":
|
|
69
|
+
return { width: 576, height: 1024 };
|
|
70
|
+
case "16:9":
|
|
71
|
+
return { width: 1024, height: 576 };
|
|
72
|
+
default:
|
|
73
|
+
return { width: 1024, height: 1024 };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Create a Google Imagen image generator instance
|
|
78
|
+
*
|
|
79
|
+
* Generates images using Google's Imagen models via the Gemini API.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* import createClient from '@teamflojo/floimg';
|
|
84
|
+
* import googleImagen from '@teamflojo/floimg-google';
|
|
85
|
+
*
|
|
86
|
+
* const floimg = createClient();
|
|
87
|
+
* floimg.registerGenerator(googleImagen({ apiKey: process.env.GOOGLE_AI_API_KEY }));
|
|
88
|
+
*
|
|
89
|
+
* const image = await floimg.generate({
|
|
90
|
+
* generator: 'google-imagen',
|
|
91
|
+
* params: {
|
|
92
|
+
* prompt: 'A serene mountain landscape at sunset',
|
|
93
|
+
* model: 'imagen-4.0-generate-001',
|
|
94
|
+
* aspectRatio: '16:9',
|
|
95
|
+
* }
|
|
96
|
+
* });
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
export default function googleImagen(config = {}) {
|
|
100
|
+
const { apiKey = process.env.GOOGLE_AI_API_KEY, model: defaultModel = "imagen-4.0-generate-001", aspectRatio: defaultAspectRatio = "1:1", } = config;
|
|
101
|
+
if (!apiKey) {
|
|
102
|
+
throw new Error("Google AI API key is required. Set GOOGLE_AI_API_KEY environment variable or pass apiKey in config.");
|
|
103
|
+
}
|
|
104
|
+
const client = new GoogleGenAI({ apiKey });
|
|
105
|
+
return {
|
|
106
|
+
name: "google-imagen",
|
|
107
|
+
schema: googleImagenSchema,
|
|
108
|
+
async generate(params) {
|
|
109
|
+
const { prompt, model = defaultModel, aspectRatio = defaultAspectRatio, numberOfImages = 1, } = params;
|
|
110
|
+
if (!prompt) {
|
|
111
|
+
throw new Error("prompt is required for Google Imagen image generation");
|
|
112
|
+
}
|
|
113
|
+
// Validate number of images
|
|
114
|
+
if (numberOfImages < 1 || numberOfImages > 4) {
|
|
115
|
+
throw new Error("numberOfImages must be between 1 and 4");
|
|
116
|
+
}
|
|
117
|
+
// Build generation config
|
|
118
|
+
const imageConfig = {
|
|
119
|
+
numberOfImages,
|
|
120
|
+
aspectRatio,
|
|
121
|
+
};
|
|
122
|
+
// Generate image using Imagen
|
|
123
|
+
const response = await client.models.generateImages({
|
|
124
|
+
model,
|
|
125
|
+
prompt,
|
|
126
|
+
config: imageConfig,
|
|
127
|
+
});
|
|
128
|
+
if (!response.generatedImages || response.generatedImages.length === 0) {
|
|
129
|
+
throw new Error("No image data returned from Google Imagen");
|
|
130
|
+
}
|
|
131
|
+
const generatedImage = response.generatedImages[0];
|
|
132
|
+
if (!generatedImage.image?.imageBytes) {
|
|
133
|
+
throw new Error("No image bytes returned from Google Imagen");
|
|
134
|
+
}
|
|
135
|
+
// Convert base64 to Buffer
|
|
136
|
+
const bytes = Buffer.from(generatedImage.image.imageBytes, "base64");
|
|
137
|
+
// Get approximate dimensions from aspect ratio
|
|
138
|
+
const dimensions = getApproximateDimensions(aspectRatio);
|
|
139
|
+
return {
|
|
140
|
+
bytes,
|
|
141
|
+
mime: "image/png",
|
|
142
|
+
width: dimensions.width,
|
|
143
|
+
height: dimensions.height,
|
|
144
|
+
source: `ai:google-imagen:${model}`,
|
|
145
|
+
metadata: {
|
|
146
|
+
prompt,
|
|
147
|
+
model,
|
|
148
|
+
aspectRatio,
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// Named export for convenience
|
|
155
|
+
export { googleImagen };
|
|
156
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@teamflojo/floimg-google",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Google Imagen image generation plugin for floimg",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist",
|
|
16
|
+
"README.md",
|
|
17
|
+
"LICENSE"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsc --watch",
|
|
22
|
+
"typecheck": "tsc --noEmit",
|
|
23
|
+
"clean": "rm -rf dist",
|
|
24
|
+
"prepublishOnly": "npm run build",
|
|
25
|
+
"test": "vitest --run"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"floimg",
|
|
29
|
+
"google",
|
|
30
|
+
"imagen",
|
|
31
|
+
"gemini",
|
|
32
|
+
"image-generation",
|
|
33
|
+
"ai"
|
|
34
|
+
],
|
|
35
|
+
"author": "Brett Cooke",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/TeamFlojo/floimg.git",
|
|
40
|
+
"directory": "packages/floimg-google"
|
|
41
|
+
},
|
|
42
|
+
"peerDependencies": {
|
|
43
|
+
"@teamflojo/floimg": "^0.2.0"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@google/genai": "^0.7.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^22.10.2",
|
|
50
|
+
"@teamflojo/floimg": "workspace:*",
|
|
51
|
+
"typescript": "^5.7.2",
|
|
52
|
+
"vitest": "^2.1.8"
|
|
53
|
+
},
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": ">=18.0.0"
|
|
56
|
+
}
|
|
57
|
+
}
|