opencode-nanobanana 0.1.1 → 0.2.1
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 +1 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -11
- package/dist/index.js.map +1 -1
- package/dist/plugin.d.ts +4 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +279 -0
- package/dist/plugin.js.map +1 -0
- package/dist/providers/gemini.d.ts +11 -0
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +30 -0
- package/dist/providers/gemini.js.map +1 -1
- package/package.json +3 -2
- package/dist/platforms/android.d.ts +0 -94
- package/dist/platforms/android.d.ts.map +0 -1
- package/dist/platforms/android.js +0 -123
- package/dist/platforms/android.js.map +0 -1
- package/dist/platforms/ios.d.ts +0 -51
- package/dist/platforms/ios.d.ts.map +0 -1
- package/dist/platforms/ios.js +0 -149
- package/dist/platforms/ios.js.map +0 -1
- package/dist/platforms/macos.d.ts +0 -33
- package/dist/platforms/macos.d.ts.map +0 -1
- package/dist/platforms/macos.js +0 -50
- package/dist/platforms/macos.js.map +0 -1
- package/dist/platforms/watchos.d.ts +0 -36
- package/dist/platforms/watchos.d.ts.map +0 -1
- package/dist/platforms/watchos.js +0 -113
- package/dist/platforms/watchos.js.map +0 -1
- package/dist/platforms/web.d.ts +0 -64
- package/dist/platforms/web.d.ts.map +0 -1
- package/dist/platforms/web.js +0 -96
- package/dist/platforms/web.js.map +0 -1
- package/dist/tools/analyze/compare.d.ts +0 -12
- package/dist/tools/analyze/compare.d.ts.map +0 -1
- package/dist/tools/analyze/compare.js +0 -83
- package/dist/tools/analyze/compare.js.map +0 -1
- package/dist/tools/analyze/mockup.d.ts +0 -12
- package/dist/tools/analyze/mockup.d.ts.map +0 -1
- package/dist/tools/analyze/mockup.js +0 -88
- package/dist/tools/analyze/mockup.js.map +0 -1
- package/dist/tools/analyze/screenshot.d.ts +0 -12
- package/dist/tools/analyze/screenshot.d.ts.map +0 -1
- package/dist/tools/analyze/screenshot.js +0 -61
- package/dist/tools/analyze/screenshot.js.map +0 -1
- package/dist/tools/app-assets/app-icon.d.ts +0 -9
- package/dist/tools/app-assets/app-icon.d.ts.map +0 -1
- package/dist/tools/app-assets/app-icon.js +0 -133
- package/dist/tools/app-assets/app-icon.js.map +0 -1
- package/dist/tools/app-assets/device-mockup.d.ts +0 -9
- package/dist/tools/app-assets/device-mockup.d.ts.map +0 -1
- package/dist/tools/app-assets/device-mockup.js +0 -139
- package/dist/tools/app-assets/device-mockup.js.map +0 -1
- package/dist/tools/app-assets/launch-images.d.ts +0 -3
- package/dist/tools/app-assets/launch-images.d.ts.map +0 -1
- package/dist/tools/app-assets/launch-images.js +0 -171
- package/dist/tools/app-assets/launch-images.js.map +0 -1
- package/dist/tools/app-assets/resize-devices.d.ts +0 -14
- package/dist/tools/app-assets/resize-devices.d.ts.map +0 -1
- package/dist/tools/app-assets/resize-devices.js +0 -296
- package/dist/tools/app-assets/resize-devices.js.map +0 -1
- package/dist/tools/app-assets/screenshots.d.ts +0 -14
- package/dist/tools/app-assets/screenshots.d.ts.map +0 -1
- package/dist/tools/app-assets/screenshots.js +0 -186
- package/dist/tools/app-assets/screenshots.js.map +0 -1
- package/dist/tools/core/edit-image.d.ts +0 -12
- package/dist/tools/core/edit-image.d.ts.map +0 -1
- package/dist/tools/core/edit-image.js +0 -102
- package/dist/tools/core/edit-image.js.map +0 -1
- package/dist/tools/core/generate-image.d.ts +0 -12
- package/dist/tools/core/generate-image.d.ts.map +0 -1
- package/dist/tools/core/generate-image.js +0 -96
- package/dist/tools/core/generate-image.js.map +0 -1
- package/dist/tools/core/restore-image.d.ts +0 -12
- package/dist/tools/core/restore-image.d.ts.map +0 -1
- package/dist/tools/core/restore-image.js +0 -104
- package/dist/tools/core/restore-image.js.map +0 -1
- package/dist/tools/design/mockup-to-code.d.ts +0 -3
- package/dist/tools/design/mockup-to-code.d.ts.map +0 -1
- package/dist/tools/design/mockup-to-code.js +0 -311
- package/dist/tools/design/mockup-to-code.js.map +0 -1
- package/dist/tools/design/sketch-to-code.d.ts +0 -3
- package/dist/tools/design/sketch-to-code.d.ts.map +0 -1
- package/dist/tools/design/sketch-to-code.js +0 -325
- package/dist/tools/design/sketch-to-code.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -7,12 +7,5 @@
|
|
|
7
7
|
* - Design-to-code
|
|
8
8
|
* - App asset pipelines (iOS, Android, macOS, Web)
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
11
|
-
export * from './utils/file-handler.js';
|
|
12
|
-
export * from './utils/image-processing.js';
|
|
13
|
-
export * from './utils/ffmpeg.js';
|
|
14
|
-
export * from './tools/video/generate-video.js';
|
|
15
|
-
export * from './tools/video/image-to-video.js';
|
|
16
|
-
export * from './tools/video/storyboard-video.js';
|
|
17
|
-
export * from './tools/video/extend-video.js';
|
|
10
|
+
export { default } from './plugin.js';
|
|
18
11
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAmBH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,15 +7,21 @@
|
|
|
7
7
|
* - Design-to-code
|
|
8
8
|
* - App asset pipelines (iOS, Android, macOS, Web)
|
|
9
9
|
*/
|
|
10
|
-
//
|
|
11
|
-
|
|
12
|
-
//
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
//
|
|
17
|
-
export * from './
|
|
18
|
-
export * from './
|
|
19
|
-
export * from './
|
|
20
|
-
export * from './
|
|
10
|
+
// WORKAROUND for OpenCode v1.1.23 plugin loader bug:
|
|
11
|
+
// OpenCode v1.1.23's plugin loader incorrectly tries to call ALL exported
|
|
12
|
+
// functions during plugin loading, causing errors. We can only export the
|
|
13
|
+
// plugin default export until this is fixed upstream.
|
|
14
|
+
// See: https://github.com/anomalyco/opencode/issues/[ISSUE_NUMBER]
|
|
15
|
+
//
|
|
16
|
+
// Original exports (for programmatic API usage - currently disabled):
|
|
17
|
+
// export * from './providers/gemini.js';
|
|
18
|
+
// export * from './utils/file-handler.js';
|
|
19
|
+
// export * from './utils/image-processing.js';
|
|
20
|
+
// export * from './utils/ffmpeg.js';
|
|
21
|
+
// export * from './tools/video/generate-video.js';
|
|
22
|
+
// export * from './tools/video/image-to-video.js';
|
|
23
|
+
// export * from './tools/video/storyboard-video.js';
|
|
24
|
+
// export * from './tools/video/extend-video.js';
|
|
25
|
+
// Only export plugin for OpenCode
|
|
26
|
+
export { default } from './plugin.js';
|
|
21
27
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,qDAAqD;AACrD,0EAA0E;AAC1E,0EAA0E;AAC1E,sDAAsD;AACtD,mEAAmE;AACnE,EAAE;AACF,sEAAsE;AACtE,yCAAyC;AACzC,2CAA2C;AAC3C,+CAA+C;AAC/C,qCAAqC;AACrC,mDAAmD;AACnD,mDAAmD;AACnD,qDAAqD;AACrD,iDAAiD;AAEjD,kCAAkC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAqBlD,QAAA,MAAM,MAAM,EAAE,MA+Rb,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { tool } from '@opencode-ai/plugin/tool';
|
|
2
|
+
import { GeminiProvider } from './providers/gemini.js';
|
|
3
|
+
import { generateVideo } from './tools/video/generate-video.js';
|
|
4
|
+
import { imageToVideo } from './tools/video/image-to-video.js';
|
|
5
|
+
import { generateStoryboardVideo } from './tools/video/storyboard-video.js';
|
|
6
|
+
import { extendVideo } from './tools/video/extend-video.js';
|
|
7
|
+
import { writeFile } from 'fs/promises';
|
|
8
|
+
import { join } from 'path';
|
|
9
|
+
import { tmpdir } from 'os';
|
|
10
|
+
function getApiKey() {
|
|
11
|
+
const apiKey = process.env.GEMINI_API_KEY;
|
|
12
|
+
if (!apiKey) {
|
|
13
|
+
throw new Error('GEMINI_API_KEY environment variable is required. ' +
|
|
14
|
+
'Get one at https://aistudio.google.com/app/apikey');
|
|
15
|
+
}
|
|
16
|
+
return apiKey;
|
|
17
|
+
}
|
|
18
|
+
const plugin = async (_input) => {
|
|
19
|
+
return {
|
|
20
|
+
tool: {
|
|
21
|
+
generate_image: tool({
|
|
22
|
+
description: 'Generate an image from a text prompt using Google Imagen 3. ' +
|
|
23
|
+
'Creates high-quality images for icons, illustrations, photos, art, and more. ' +
|
|
24
|
+
'Supports various aspect ratios: 1:1 (square), 3:4, 4:3, 9:16 (portrait), 16:9 (landscape).',
|
|
25
|
+
args: {
|
|
26
|
+
prompt: tool.schema.string().describe('Description of the image to generate. Be specific about style, colors, composition, lighting. ' +
|
|
27
|
+
'Example: "A modern app icon with gradient blue-purple colors, minimalist design, rounded corners"'),
|
|
28
|
+
aspectRatio: tool.schema
|
|
29
|
+
.enum(['1:1', '3:4', '4:3', '9:16', '16:9'])
|
|
30
|
+
.optional()
|
|
31
|
+
.describe('Aspect ratio for the image. Defaults to 1:1 (square)'),
|
|
32
|
+
outputPath: tool.schema
|
|
33
|
+
.string()
|
|
34
|
+
.optional()
|
|
35
|
+
.describe('Path where the image should be saved. If not provided, saves to temp directory'),
|
|
36
|
+
},
|
|
37
|
+
async execute(args, _context) {
|
|
38
|
+
try {
|
|
39
|
+
const apiKey = getApiKey();
|
|
40
|
+
const provider = new GeminiProvider(apiKey);
|
|
41
|
+
const result = await provider.generateImage(args.prompt, {
|
|
42
|
+
aspectRatio: args.aspectRatio,
|
|
43
|
+
count: 1,
|
|
44
|
+
});
|
|
45
|
+
const outputPath = args.outputPath || join(tmpdir(), `image-${Date.now()}.png`);
|
|
46
|
+
await writeFile(outputPath, result.buffer);
|
|
47
|
+
return JSON.stringify({
|
|
48
|
+
success: true,
|
|
49
|
+
imagePath: outputPath,
|
|
50
|
+
mimeType: result.mimeType,
|
|
51
|
+
generationTime: `${(result.generationTime / 1000).toFixed(1)}s`,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
const err = error;
|
|
56
|
+
const errorMessage = err?.message || String(error);
|
|
57
|
+
const errorCode = err?.code || err?.status || 'UNKNOWN';
|
|
58
|
+
return JSON.stringify({
|
|
59
|
+
success: false,
|
|
60
|
+
error: errorMessage,
|
|
61
|
+
errorCode,
|
|
62
|
+
help: errorMessage.includes('API key') || errorMessage.includes('403') || errorMessage.includes('PERMISSION_DENIED')
|
|
63
|
+
? 'Please check your GEMINI_API_KEY environment variable. Get a new key at https://aistudio.google.com/app/apikey'
|
|
64
|
+
: 'Image generation failed. Check the error message for details.',
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
}),
|
|
69
|
+
generate_video: tool({
|
|
70
|
+
description: 'Generate a video from a text prompt using Google Veo 3. ' +
|
|
71
|
+
'Creates high-quality video content with native audio generation. ' +
|
|
72
|
+
'Supports aspect ratios 16:9 (landscape) and 9:16 (portrait), resolutions 720p/1080p. ' +
|
|
73
|
+
'Duration: 4, 6, or 8 seconds.',
|
|
74
|
+
args: {
|
|
75
|
+
prompt: tool.schema.string().describe('Description of the video to generate. Be specific about action, scene, lighting, mood. ' +
|
|
76
|
+
'Example: "A serene mountain landscape at sunrise with fog rolling through the valley"'),
|
|
77
|
+
aspectRatio: tool.schema
|
|
78
|
+
.enum(['16:9', '9:16'])
|
|
79
|
+
.optional()
|
|
80
|
+
.describe('Aspect ratio. Defaults to 16:9 (landscape)'),
|
|
81
|
+
resolution: tool.schema
|
|
82
|
+
.enum(['720p', '1080p'])
|
|
83
|
+
.optional()
|
|
84
|
+
.describe('Video resolution. Defaults to 720p'),
|
|
85
|
+
duration: tool.schema
|
|
86
|
+
.enum(['4', '6', '8'])
|
|
87
|
+
.optional()
|
|
88
|
+
.describe('Duration in seconds. Defaults to 8'),
|
|
89
|
+
outputPath: tool.schema
|
|
90
|
+
.string()
|
|
91
|
+
.optional()
|
|
92
|
+
.describe('Path where the video should be saved'),
|
|
93
|
+
},
|
|
94
|
+
async execute(args, _context) {
|
|
95
|
+
try {
|
|
96
|
+
const apiKey = getApiKey();
|
|
97
|
+
const result = await generateVideo({
|
|
98
|
+
apiKey,
|
|
99
|
+
prompt: args.prompt,
|
|
100
|
+
aspectRatio: args.aspectRatio,
|
|
101
|
+
resolution: args.resolution,
|
|
102
|
+
duration: args.duration ? parseInt(args.duration, 10) : undefined,
|
|
103
|
+
outputPath: args.outputPath,
|
|
104
|
+
});
|
|
105
|
+
return JSON.stringify({
|
|
106
|
+
success: true,
|
|
107
|
+
videoPath: result.videoPath,
|
|
108
|
+
generationTime: `${(result.generationTime / 1000).toFixed(1)}s`,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const err = error;
|
|
113
|
+
const errorMessage = err?.message || String(error);
|
|
114
|
+
const errorCode = err?.code || err?.status || 'UNKNOWN';
|
|
115
|
+
return JSON.stringify({
|
|
116
|
+
success: false,
|
|
117
|
+
error: errorMessage,
|
|
118
|
+
errorCode,
|
|
119
|
+
help: errorMessage.includes('API key') || errorMessage.includes('403') || errorMessage.includes('PERMISSION_DENIED')
|
|
120
|
+
? 'Please check your GEMINI_API_KEY environment variable'
|
|
121
|
+
: 'Video generation failed.',
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
}),
|
|
126
|
+
image_to_video: tool({
|
|
127
|
+
description: 'Animate a static image into a video using Google Veo 3. ' +
|
|
128
|
+
'Brings images to life with motion and audio. ' +
|
|
129
|
+
'Great for animating photos, product images, logos, or artwork.',
|
|
130
|
+
args: {
|
|
131
|
+
imagePath: tool.schema.string().describe('Path to the image file to animate'),
|
|
132
|
+
prompt: tool.schema.string().describe('Description of the animation. Example: "Slow camera pan from left to right" or "Product rotates 360 degrees"'),
|
|
133
|
+
aspectRatio: tool.schema.enum(['16:9', '9:16']).optional().describe('Aspect ratio. Defaults to 16:9'),
|
|
134
|
+
resolution: tool.schema.enum(['720p', '1080p']).optional().describe('Resolution. Defaults to 720p'),
|
|
135
|
+
duration: tool.schema.enum(['4', '6', '8']).optional().describe('Duration in seconds. Defaults to 8'),
|
|
136
|
+
outputPath: tool.schema.string().optional().describe('Path where the video should be saved'),
|
|
137
|
+
},
|
|
138
|
+
async execute(args, _context) {
|
|
139
|
+
try {
|
|
140
|
+
const apiKey = getApiKey();
|
|
141
|
+
const result = await imageToVideo({
|
|
142
|
+
apiKey,
|
|
143
|
+
imagePath: args.imagePath,
|
|
144
|
+
prompt: args.prompt,
|
|
145
|
+
aspectRatio: args.aspectRatio,
|
|
146
|
+
resolution: args.resolution,
|
|
147
|
+
duration: args.duration ? parseInt(args.duration, 10) : undefined,
|
|
148
|
+
outputPath: args.outputPath,
|
|
149
|
+
});
|
|
150
|
+
return JSON.stringify({
|
|
151
|
+
success: true,
|
|
152
|
+
videoPath: result.videoPath,
|
|
153
|
+
generationTime: `${(result.generationTime / 1000).toFixed(1)}s`,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
const err = error;
|
|
158
|
+
const errorMessage = err?.message || String(error);
|
|
159
|
+
const errorCode = err?.code || err?.status || 'UNKNOWN';
|
|
160
|
+
return JSON.stringify({
|
|
161
|
+
success: false,
|
|
162
|
+
error: errorMessage,
|
|
163
|
+
errorCode,
|
|
164
|
+
help: errorMessage.includes('API key') || errorMessage.includes('403') || errorMessage.includes('PERMISSION_DENIED')
|
|
165
|
+
? 'Please check your GEMINI_API_KEY environment variable'
|
|
166
|
+
: 'Image to video conversion failed.',
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
}),
|
|
171
|
+
generate_storyboard_video: tool({
|
|
172
|
+
description: 'Generate a multi-scene storyboard video. Creates individual scenes and stitches them with transitions. ' +
|
|
173
|
+
'Perfect for commercials, narratives, product demos. Supports character consistency. Requires FFmpeg.',
|
|
174
|
+
args: {
|
|
175
|
+
scenes: tool.schema
|
|
176
|
+
.array(tool.schema.string())
|
|
177
|
+
.describe('Array of scene descriptions. Example: ["Coffee shop morning", "Barista making latte", "Customer enjoying coffee"]'),
|
|
178
|
+
style: tool.schema.string().optional().describe('Visual style for all scenes. Examples: "cinematic", "commercial"'),
|
|
179
|
+
characterDescription: tool.schema
|
|
180
|
+
.string()
|
|
181
|
+
.optional()
|
|
182
|
+
.describe('Main character description for consistency. Example: "Young woman with brown hair in red jacket"'),
|
|
183
|
+
referenceImages: tool.schema.array(tool.schema.string()).optional().describe('Paths to reference images (max 3)'),
|
|
184
|
+
aspectRatio: tool.schema.enum(['16:9', '9:16']).optional().describe('Aspect ratio. Defaults to 16:9'),
|
|
185
|
+
transition: tool.schema.enum(['cut', 'crossfade', 'fade']).optional().describe('Transition type. Defaults to crossfade'),
|
|
186
|
+
transitionDuration: tool.schema.number().optional().describe('Transition duration in seconds. Defaults to 0.5'),
|
|
187
|
+
backgroundMusic: tool.schema.string().optional().describe('Path to background music audio file'),
|
|
188
|
+
musicVolume: tool.schema.number().optional().describe('Background music volume (0.0-1.0). Defaults to 0.3'),
|
|
189
|
+
outputPath: tool.schema.string().optional().describe('Path where the final video should be saved'),
|
|
190
|
+
},
|
|
191
|
+
async execute(args, _context) {
|
|
192
|
+
try {
|
|
193
|
+
const apiKey = getApiKey();
|
|
194
|
+
const result = await generateStoryboardVideo({
|
|
195
|
+
apiKey,
|
|
196
|
+
scenes: args.scenes,
|
|
197
|
+
style: args.style,
|
|
198
|
+
characterDescription: args.characterDescription,
|
|
199
|
+
referenceImages: args.referenceImages,
|
|
200
|
+
aspectRatio: args.aspectRatio,
|
|
201
|
+
transition: args.transition,
|
|
202
|
+
transitionDuration: args.transitionDuration,
|
|
203
|
+
backgroundMusic: args.backgroundMusic,
|
|
204
|
+
musicVolume: args.musicVolume,
|
|
205
|
+
outputPath: args.outputPath,
|
|
206
|
+
});
|
|
207
|
+
return JSON.stringify({
|
|
208
|
+
success: true,
|
|
209
|
+
videoPath: result.videoPath,
|
|
210
|
+
totalTime: `${(result.totalTime / 1000).toFixed(1)}s`,
|
|
211
|
+
scenesGenerated: result.successCount,
|
|
212
|
+
scenesFailed: result.failureCount,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
const err = error;
|
|
217
|
+
const errorMessage = err?.message || String(error);
|
|
218
|
+
const errorCode = err?.code || err?.status || 'UNKNOWN';
|
|
219
|
+
return JSON.stringify({
|
|
220
|
+
success: false,
|
|
221
|
+
error: errorMessage,
|
|
222
|
+
errorCode,
|
|
223
|
+
help: errorMessage.includes('ffmpeg')
|
|
224
|
+
? 'FFmpeg is required. Install with: brew install ffmpeg (macOS) or apt install ffmpeg (Linux)'
|
|
225
|
+
: errorMessage.includes('API key') || errorMessage.includes('403')
|
|
226
|
+
? 'Please check your GEMINI_API_KEY environment variable'
|
|
227
|
+
: 'Storyboard generation failed.',
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
}),
|
|
232
|
+
extend_video: tool({
|
|
233
|
+
description: 'Extend an existing video with new AI-generated content using Veo 3. ' +
|
|
234
|
+
'Seamlessly continues the video matching the original style. ' +
|
|
235
|
+
'Useful for adding scenes or continuing narratives.',
|
|
236
|
+
args: {
|
|
237
|
+
videoPath: tool.schema.string().describe('Path to the existing video to extend'),
|
|
238
|
+
prompt: tool.schema.string().describe('Description of the extension. Example: "Camera pans to reveal a stunning sunset"'),
|
|
239
|
+
aspectRatio: tool.schema.enum(['16:9', '9:16']).optional().describe('Aspect ratio. Defaults to 16:9'),
|
|
240
|
+
resolution: tool.schema.enum(['720p', '1080p']).optional().describe('Resolution. Defaults to 720p'),
|
|
241
|
+
outputPath: tool.schema.string().optional().describe('Path where the extended video should be saved'),
|
|
242
|
+
},
|
|
243
|
+
async execute(args, _context) {
|
|
244
|
+
try {
|
|
245
|
+
const apiKey = getApiKey();
|
|
246
|
+
const result = await extendVideo({
|
|
247
|
+
apiKey,
|
|
248
|
+
videoPath: args.videoPath,
|
|
249
|
+
prompt: args.prompt,
|
|
250
|
+
aspectRatio: args.aspectRatio,
|
|
251
|
+
resolution: args.resolution,
|
|
252
|
+
outputPath: args.outputPath,
|
|
253
|
+
});
|
|
254
|
+
return JSON.stringify({
|
|
255
|
+
success: true,
|
|
256
|
+
videoPath: result.videoPath,
|
|
257
|
+
generationTime: `${(result.generationTime / 1000).toFixed(1)}s`,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
const err = error;
|
|
262
|
+
const errorMessage = err?.message || String(error);
|
|
263
|
+
const errorCode = err?.code || err?.status || 'UNKNOWN';
|
|
264
|
+
return JSON.stringify({
|
|
265
|
+
success: false,
|
|
266
|
+
error: errorMessage,
|
|
267
|
+
errorCode,
|
|
268
|
+
help: errorMessage.includes('API key') || errorMessage.includes('403')
|
|
269
|
+
? 'Please check your GEMINI_API_KEY environment variable'
|
|
270
|
+
: 'Video extension failed.',
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
}),
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
};
|
|
278
|
+
export default plugin;
|
|
279
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,15 @@ export interface VideoGenerationOptions {
|
|
|
5
5
|
numberOfVideos?: number;
|
|
6
6
|
negativePrompt?: string;
|
|
7
7
|
}
|
|
8
|
+
export interface ImageGenerationOptions {
|
|
9
|
+
aspectRatio?: '1:1' | '3:4' | '4:3' | '9:16' | '16:9';
|
|
10
|
+
count?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ImageGenerationResult {
|
|
13
|
+
buffer: Buffer;
|
|
14
|
+
mimeType: string;
|
|
15
|
+
generationTime: number;
|
|
16
|
+
}
|
|
8
17
|
export interface ImageAnimationOptions {
|
|
9
18
|
aspectRatio?: '16:9' | '9:16';
|
|
10
19
|
resolution?: '720p' | '1080p';
|
|
@@ -28,8 +37,10 @@ export declare class GeminiProvider {
|
|
|
28
37
|
private apiKey;
|
|
29
38
|
private readonly VEO_MODEL;
|
|
30
39
|
private readonly VEO_PREVIEW_MODEL;
|
|
40
|
+
private readonly NANO_BANANA_MODEL;
|
|
31
41
|
private readonly POLL_INTERVAL_MS;
|
|
32
42
|
constructor(apiKey: string);
|
|
43
|
+
generateImage(prompt: string, options?: ImageGenerationOptions): Promise<ImageGenerationResult>;
|
|
33
44
|
generateVideo(prompt: string, options?: VideoGenerationOptions): Promise<VideoGenerationResult>;
|
|
34
45
|
animateImage(imageBuffer: Buffer, prompt: string, options?: ImageAnimationOptions): Promise<VideoGenerationResult>;
|
|
35
46
|
extendVideo(videoBuffer: Buffer, prompt: string, options?: VideoExtensionOptions): Promise<VideoGenerationResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA8B;IAChE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAE9B,MAAM,EAAE,MAAM;IAKpB,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC;IA0C3B,YAAY,CAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,qBAAqB,CAAC;IA8C3B,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,qBAAqB,CAAC;IA2C3B,2BAA2B,CAC/B,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,cAAc,EAAE,EACjC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC;YAqDnB,aAAa;YAab,aAAa;IAgB3B,OAAO,CAAC,mBAAmB;CAe5B"}
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAc;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA8B;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;IAC5D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAE9B,MAAM,EAAE,MAAM;IAKpB,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC;IAmC3B,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC;IA0C3B,YAAY,CAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,qBAAqB,CAAC;IA8C3B,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,qBAAqB,CAAC;IA2C3B,2BAA2B,CAC/B,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,cAAc,EAAE,EACjC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,qBAAqB,CAAC;YAqDnB,aAAa;YAab,aAAa;IAgB3B,OAAO,CAAC,mBAAmB;CAe5B"}
|
package/dist/providers/gemini.js
CHANGED
|
@@ -4,11 +4,41 @@ export class GeminiProvider {
|
|
|
4
4
|
apiKey;
|
|
5
5
|
VEO_MODEL = 'veo-3.0-generate-001';
|
|
6
6
|
VEO_PREVIEW_MODEL = 'veo-3.1-generate-preview';
|
|
7
|
+
NANO_BANANA_MODEL = 'gemini-2.0-flash-exp';
|
|
7
8
|
POLL_INTERVAL_MS = 10000;
|
|
8
9
|
constructor(apiKey) {
|
|
9
10
|
this.apiKey = apiKey;
|
|
10
11
|
this.ai = new GoogleGenAI({ apiKey });
|
|
11
12
|
}
|
|
13
|
+
async generateImage(prompt, options = {}) {
|
|
14
|
+
const startTime = Date.now();
|
|
15
|
+
const { count = 1 } = options;
|
|
16
|
+
if (count < 1 || count > 4) {
|
|
17
|
+
throw new Error('Count must be between 1 and 4');
|
|
18
|
+
}
|
|
19
|
+
const response = await this.ai.models.generateContent({
|
|
20
|
+
model: this.NANO_BANANA_MODEL,
|
|
21
|
+
contents: prompt,
|
|
22
|
+
config: {
|
|
23
|
+
responseModalities: ['image', 'text'],
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
if (!response.candidates?.[0]?.content?.parts) {
|
|
27
|
+
throw new Error('No image was generated');
|
|
28
|
+
}
|
|
29
|
+
for (const part of response.candidates[0].content.parts) {
|
|
30
|
+
if (part.inlineData?.data) {
|
|
31
|
+
const buffer = Buffer.from(part.inlineData.data, 'base64');
|
|
32
|
+
const generationTime = Date.now() - startTime;
|
|
33
|
+
return {
|
|
34
|
+
buffer,
|
|
35
|
+
mimeType: part.inlineData.mimeType || 'image/png',
|
|
36
|
+
generationTime,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
throw new Error('No image data in response');
|
|
41
|
+
}
|
|
12
42
|
async generateVideo(prompt, options = {}) {
|
|
13
43
|
const startTime = Date.now();
|
|
14
44
|
const { aspectRatio = '16:9', resolution = '720p', duration = 8, numberOfVideos = 1, negativePrompt, } = options;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "opencode-nanobanana",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "OpenCode plugin for visual AI:
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "OpenCode plugin for visual AI: FREE image generation (Nano Banana / Gemini Flash), video generation (Veo 3), storyboards powered by Google Gemini",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@google/genai": "^1.36.0",
|
|
53
|
+
"@opencode-ai/plugin": "1.1.20",
|
|
53
54
|
"sharp": "^0.33.0",
|
|
54
55
|
"zod": "^3.22.0"
|
|
55
56
|
},
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Android Platform Module
|
|
3
|
-
*
|
|
4
|
-
* Provides Android-specific asset specifications including:
|
|
5
|
-
* - Icon sizes for all density buckets (mdpi through xxxhdpi)
|
|
6
|
-
* - Screenshot sizes for phones and tablets
|
|
7
|
-
* - Adaptive icon XML generation
|
|
8
|
-
* - Density path helpers
|
|
9
|
-
*/
|
|
10
|
-
export interface AndroidDensity {
|
|
11
|
-
name: string;
|
|
12
|
-
scale: number;
|
|
13
|
-
iconSize: number;
|
|
14
|
-
directory: string;
|
|
15
|
-
}
|
|
16
|
-
export interface AndroidIconSize {
|
|
17
|
-
density: string;
|
|
18
|
-
size: number;
|
|
19
|
-
directory: string;
|
|
20
|
-
filename: string;
|
|
21
|
-
}
|
|
22
|
-
export interface AndroidScreenshotSize {
|
|
23
|
-
device: string;
|
|
24
|
-
width: number;
|
|
25
|
-
height: number;
|
|
26
|
-
description: string;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Android density buckets with their scale factors
|
|
30
|
-
* Based on Android's density-independent pixel (dp) system
|
|
31
|
-
*/
|
|
32
|
-
export declare const ANDROID_DENSITIES: AndroidDensity[];
|
|
33
|
-
/**
|
|
34
|
-
* Complete Android icon size specifications
|
|
35
|
-
* Covers all density buckets for launcher icons
|
|
36
|
-
*/
|
|
37
|
-
export declare const ANDROID_ICON_SIZES: AndroidIconSize[];
|
|
38
|
-
/**
|
|
39
|
-
* Android screenshot sizes for Google Play Store
|
|
40
|
-
* Based on common device resolutions and aspect ratios
|
|
41
|
-
*/
|
|
42
|
-
export declare const ANDROID_SCREENSHOT_SIZES: AndroidScreenshotSize[];
|
|
43
|
-
/**
|
|
44
|
-
* Generates adaptive icon XML content for Android
|
|
45
|
-
* Adaptive icons consist of foreground and background layers
|
|
46
|
-
*
|
|
47
|
-
* @param foregroundPath - Path to foreground drawable (default: @mipmap/ic_launcher_foreground)
|
|
48
|
-
* @param backgroundPath - Path to background drawable (default: @mipmap/ic_launcher_background)
|
|
49
|
-
* @returns Valid ic_launcher.xml content for res/mipmap-anydpi-v26/
|
|
50
|
-
*/
|
|
51
|
-
export declare function generateAdaptiveIconXml(foregroundPath?: string, backgroundPath?: string): string;
|
|
52
|
-
/**
|
|
53
|
-
* Generates adaptive icon XML with monochrome layer (Android 13+)
|
|
54
|
-
* Includes monochrome layer for themed icons
|
|
55
|
-
*
|
|
56
|
-
* @param foregroundPath - Path to foreground drawable
|
|
57
|
-
* @param backgroundPath - Path to background drawable
|
|
58
|
-
* @param monochromePath - Path to monochrome drawable (default: @mipmap/ic_launcher_foreground)
|
|
59
|
-
* @returns Valid ic_launcher.xml content with monochrome support
|
|
60
|
-
*/
|
|
61
|
-
export declare function generateAdaptiveIconXmlWithMonochrome(foregroundPath?: string, backgroundPath?: string, monochromePath?: string): string;
|
|
62
|
-
/**
|
|
63
|
-
* Gets the mipmap directory path for a given density
|
|
64
|
-
*
|
|
65
|
-
* @param density - Density name (e.g., 'mdpi', 'hdpi', 'xhdpi')
|
|
66
|
-
* @returns Directory path in format 'mipmap-{density}'
|
|
67
|
-
*/
|
|
68
|
-
export declare function getDensityPath(density: string): string;
|
|
69
|
-
/**
|
|
70
|
-
* Gets icon size in pixels for a given density
|
|
71
|
-
*
|
|
72
|
-
* @param density - Density name
|
|
73
|
-
* @returns Icon size in pixels, or null if density not found
|
|
74
|
-
*/
|
|
75
|
-
export declare function getIconSizeForDensity(density: string): number | null;
|
|
76
|
-
/**
|
|
77
|
-
* Calculates the pixel size for a given dp value at a specific density
|
|
78
|
-
*
|
|
79
|
-
* @param dp - Value in density-independent pixels
|
|
80
|
-
* @param density - Density name
|
|
81
|
-
* @returns Pixel size, or null if density not found
|
|
82
|
-
*/
|
|
83
|
-
export declare function dpToPixels(dp: number, density: string): number | null;
|
|
84
|
-
/**
|
|
85
|
-
* Android adaptive icon specifications
|
|
86
|
-
* Defines the safe zone and dimensions for foreground/background layers
|
|
87
|
-
*/
|
|
88
|
-
export declare const ADAPTIVE_ICON_SPECS: {
|
|
89
|
-
fullSize: number;
|
|
90
|
-
visibleSize: number;
|
|
91
|
-
safeZone: number;
|
|
92
|
-
maskPadding: number;
|
|
93
|
-
};
|
|
94
|
-
//# sourceMappingURL=android.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../src/platforms/android.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAAc,EAM7C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAK7C,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,qBAAqB,EAkB3D,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,cAAc,GAAE,MAAyC,EACzD,cAAc,GAAE,MAAyC,GACxD,MAAM,CAMR;AAED;;;;;;;;GAQG;AACH,wBAAgB,qCAAqC,CACnD,cAAc,GAAE,MAAyC,EACzD,cAAc,GAAE,MAAyC,EACzD,cAAc,GAAE,MAAyC,GACxD,MAAM,CAOR;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGpE;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGrE;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;CAK/B,CAAC"}
|