@imgly/plugin-ai-image-generation-web 0.2.3 → 0.2.5

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/CHANGELOG.md CHANGED
@@ -2,11 +2,35 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.2.5] - 2025-09-03
6
+
7
+ ### New Features
8
+
9
+ - [image-generation] **NanoBanana Provider**: Added NanoBanana text-to-image provider via fal.ai with fast generation times, 1024×1024 resolution, support for multiple output formats (JPEG, PNG), configurable number of images (1-4), and remixPageWithPrompt quick action
10
+ - [image-generation] **NanoBananaEdit Provider**: Added NanoBananaEdit image-to-image provider via fal.ai for editing existing images with text prompts, supporting all standard quick actions (editImage, swapBackground, styleTransfer, artistTransfer, createVariant, combineImages with up to 10 images, remixPage, remixPageWithPrompt)
11
+
12
+ ### Bug Fixes
13
+
14
+ - [all] **fal.ai Provider Configuration**: Fixed singleton configuration conflict when using multiple fal.ai providers with different proxy URLs. Each provider now maintains its own client instance instead of overwriting a global configuration
15
+ - [video-generation] **Missing Dependency**: Added missing `@fal-ai/client` dependency to plugin-ai-video-generation-web package.json to ensure the package works correctly when installed independently
16
+
17
+ ## [0.2.4] - 2025-08-07
18
+
19
+ ### New Features
20
+
21
+ - [all] **Provider Label Translations**: Added support for provider label translations
22
+ - [all] **Extended Provider Configuration**: Added support for `history` and `supportedQuickActions` configuration fields in `CommonProviderConfiguration`, allowing customers to:
23
+ - Override provider's default history asset source (`history` field) - can be set to `false` to disable history, `'@imgly/local'` for temporary storage, `'@imgly/indexedDB'` for persistent browser storage, or any custom asset source ID
24
+ - Configure supported quick actions (`supportedQuickActions` field) - can disable quick actions by setting to `false`/`null`, keep defaults with `true`, or override with custom mappings and configurations
25
+ - Both fields are optional and maintain backward compatibility with existing provider configurations
26
+ - [generation-web] **Utility Function**: Added `mergeQuickActionsConfig` utility function for merging provider defaults with user configuration overrides, exported from `@imgly/plugin-ai-generation-web` with comprehensive Jest test coverage
27
+
5
28
  ## [0.2.3] - 2025-07-23
6
29
 
7
30
  - [all] **Automatic History Asset Library Entries**: Composite history asset sources now automatically have corresponding asset library entries created with the same IDs (e.g., `ly.img.ai.image-generation.history`)
8
31
  - [all] **Provider Selection in Expanded Quick Actions**: When a quick action is expanded, users can now switch between all providers that support that specific quick action, enhancing flexibility in provider selection
9
32
  - [all] **Quick Action Can Disable Lock**: Some quick actions can now decide to not lock the block when operating on a block. Examples are `CreateVariant` and `CombineImages`.
33
+ - [image-generation] **Ideogram V3**: Added support for Ideogram V3 provider for image generation, which supports text-to-image and image-to-image generation
10
34
 
11
35
  ## [0.2.2] - 2025-07-16
12
36
 
package/README.md CHANGED
@@ -106,6 +106,13 @@ CreativeEditorSDK.create(domElement, {
106
106
  'x-client-version': '1.0.0'
107
107
  }
108
108
  }),
109
+ FalAiImage.NanoBanana({
110
+ proxyUrl: 'http://your-proxy-server.com/api/proxy',
111
+ headers: {
112
+ 'x-custom-header': 'value',
113
+ 'x-client-version': '1.0.0'
114
+ }
115
+ }),
109
116
  FalAiImage.Recraft20b({
110
117
  proxyUrl: 'http://your-proxy-server.com/api/proxy',
111
118
  headers: {
@@ -131,6 +138,13 @@ CreativeEditorSDK.create(domElement, {
131
138
  'x-client-version': '1.0.0'
132
139
  }
133
140
  }),
141
+ FalAiImage.NanoBananaEdit({
142
+ proxyUrl: 'http://your-proxy-server.com/api/proxy',
143
+ headers: {
144
+ 'x-custom-header': 'value',
145
+ 'x-client-version': '1.0.0'
146
+ }
147
+ }),
134
148
  OpenAiImage.GptImage1.Image2Image({
135
149
  proxyUrl: 'http://your-proxy-server.com/api/proxy',
136
150
  headers: {
@@ -173,6 +187,19 @@ Key features:
173
187
  - Adjustable quality settings
174
188
  - Custom headers support for API requests
175
189
 
190
+ **Custom Translations:**
191
+ ```typescript
192
+ cesdk.i18n.setTranslations({
193
+ en: {
194
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.property.prompt': 'Your image description',
195
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.property.style': 'Art Style',
196
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.property.style.realistic_image': 'Photorealistic',
197
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.property.style.illustration': 'Illustration',
198
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.property.image_size': 'Canvas Size'
199
+ }
200
+ });
201
+ ```
202
+
176
203
  #### 2. Recraft20b (Text-to-Image)
177
204
 
178
205
  An enhanced text-to-image model from fal.ai with additional icon style support:
@@ -193,6 +220,19 @@ Key features:
193
220
  - Three-way style selection (image/vector/icon)
194
221
  - Same image size presets and custom dimensions support
195
222
  - Cost-effective alternative to RecraftV3
223
+
224
+ **Custom Translations:**
225
+ ```typescript
226
+ cesdk.i18n.setTranslations({
227
+ en: {
228
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft/v2/text-to-image.property.prompt': 'Icon description',
229
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft/v2/text-to-image.property.style': 'Icon Style',
230
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft/v2/text-to-image.property.style.icon': 'Standard Icon',
231
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft/v2/text-to-image.property.style.logo': 'Logo Icon',
232
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft/v2/text-to-image.property.n_colors': 'Number of Colors'
233
+ }
234
+ });
235
+ ```
196
236
  - Custom headers support for API requests
197
237
 
198
238
  #### 3. GptImage1.Text2Image (Text-to-Image)
@@ -237,6 +277,16 @@ Key features:
237
277
  - Includes style presets and artist-specific transformations
238
278
  - Custom headers support for API requests
239
279
 
280
+ **Custom Translations:**
281
+ ```typescript
282
+ cesdk.i18n.setTranslations({
283
+ en: {
284
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/gemini-flash-edit.property.prompt': 'Transformation instructions',
285
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/gemini-flash-edit.property.image_url': 'Source Image'
286
+ }
287
+ });
288
+ ```
289
+
240
290
  #### 5. GptImage1.Image2Image (Image-to-Image)
241
291
 
242
292
  OpenAI's GPT-4 Vision based image editing model that can transform existing images:
@@ -258,7 +308,46 @@ Key features:
258
308
  - Can be used as a direct alternative to GeminiFlashEdit
259
309
  - Custom headers support for API requests
260
310
 
261
- #### 5. FluxProKontextEdit (Image-to-Image)
311
+ #### 5. IdeogramV3 (Text-to-Image)
312
+
313
+ A high-quality text-to-image model from fal.ai featuring advanced generation capabilities:
314
+
315
+ ```typescript
316
+ text2image: FalAiImage.IdeogramV3({
317
+ proxyUrl: 'http://your-proxy-server.com/api/proxy',
318
+ headers: {
319
+ 'x-custom-header': 'value',
320
+ 'x-client-version': '1.0.0'
321
+ }
322
+ })
323
+ ```
324
+
325
+ Key features:
326
+ - Four distinct style modes: AUTO, GENERAL, REALISTIC, and DESIGN
327
+ - Multiple image size presets: square HD, square, portrait 4:3/16:9, landscape 4:3/16:9
328
+ - Custom dimensions support (64x64 to 14142x14142 pixels)
329
+
330
+ #### 6. IdeogramV3Remix (Image-to-Image)
331
+
332
+ A powerful image remixing model from fal.ai that transforms existing images while preserving core elements:
333
+
334
+ ```typescript
335
+ image2image: FalAiImage.IdeogramV3Remix({
336
+ proxyUrl: 'http://your-proxy-server.com/api/proxy',
337
+ headers: {
338
+ 'x-custom-header': 'value',
339
+ 'x-client-version': '1.0.0'
340
+ }
341
+ })
342
+ ```
343
+
344
+ Key features:
345
+ - **Remix existing images** with text prompts while maintaining core characteristics
346
+ - Four distinct style modes: AUTO, GENERAL, REALISTIC, and DESIGN
347
+ - Multiple image size presets: square HD, square, portrait 4:3/16:9, landscape 4:3/16:9
348
+ - Custom dimensions support (64x64 to 14142x14142 pixels)
349
+
350
+ #### 7. FluxProKontextEdit (Image-to-Image)
262
351
 
263
352
  A versatile image editing model that applies stylistic changes and transformations:
264
353
 
@@ -273,7 +362,7 @@ Key features:
273
362
  - Built-in quick actions for style transfer, artist styles, background swapping, and variants
274
363
  - Keeps original image dimensions
275
364
 
276
- #### 6. FluxProKontextMaxEdit (Image-to-Image)
365
+ #### 8. FluxProKontextMaxEdit (Image-to-Image)
277
366
 
278
367
  A high-quality variant of FluxProKontext offering more detailed results:
279
368
 
@@ -289,6 +378,191 @@ Key features:
289
378
  - Maintains original dimensions
290
379
  - Canvas quick-action integration
291
380
 
381
+ #### 9. NanoBanana (Text-to-Image)
382
+
383
+ A fast and efficient text-to-image model from fal.ai that generates high-quality images:
384
+
385
+ ```typescript
386
+ text2image: FalAiImage.NanoBanana({
387
+ proxyUrl: 'http://your-proxy-server.com/api/proxy',
388
+ headers: {
389
+ 'x-custom-header': 'value',
390
+ 'x-client-version': '1.0.0'
391
+ }
392
+ })
393
+ ```
394
+
395
+ Key features:
396
+ - Fast generation times for quick prototyping
397
+ - High-quality image output at 1024×1024 resolution
398
+ - Simple prompt-based interface
399
+ - Support for multiple output formats (JPEG, PNG)
400
+ - Configurable number of images (1-4)
401
+ - Supports page remixing with custom prompts
402
+ - Custom headers support for API requests
403
+
404
+ **Custom Translations:**
405
+ ```typescript
406
+ cesdk.i18n.setTranslations({
407
+ en: {
408
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/nano-banana.property.prompt': 'Describe your image',
409
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/nano-banana.property.num_images': 'Number of Images',
410
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/nano-banana.property.output_format': 'Output Format'
411
+ }
412
+ });
413
+ ```
414
+
415
+ #### 10. NanoBananaEdit (Image-to-Image)
416
+
417
+ An image editing model from fal.ai that transforms existing images using text prompts:
418
+
419
+ ```typescript
420
+ image2image: FalAiImage.NanoBananaEdit({
421
+ proxyUrl: 'http://your-proxy-server.com/api/proxy',
422
+ headers: {
423
+ 'x-custom-header': 'value',
424
+ 'x-client-version': '1.0.0'
425
+ }
426
+ })
427
+ ```
428
+
429
+ Key features:
430
+ - Edit existing images with text prompts
431
+ - Supports combining multiple images (up to 10 images)
432
+ - Maintains original image dimensions automatically
433
+ - Supports all standard image editing quick actions
434
+ - Fast processing times
435
+ - Canvas quick-action integration
436
+ - Custom headers support for API requests
437
+
438
+ **Custom Translations:**
439
+ ```typescript
440
+ cesdk.i18n.setTranslations({
441
+ en: {
442
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/nano-banana/edit.property.prompt': 'Edit instructions',
443
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/nano-banana/edit.property.image_url': 'Source Image'
444
+ }
445
+ });
446
+ ```
447
+
448
+ ### Customizing Labels and Translations
449
+
450
+ You can customize all labels and text in the AI image generation interface using the translation system. This allows you to provide better labels for your users in any language.
451
+
452
+ #### Translation Key Structure
453
+
454
+ The system checks for translations in this order (highest to lowest priority):
455
+
456
+ 1. **Provider-specific**: `ly.img.plugin-ai-image-generation-web.${provider}.property.${field}` - Override labels for a specific AI provider
457
+ 2. **Generic**: `ly.img.plugin-ai-generation-web.property.${field}` - Override labels for all AI plugins
458
+
459
+ #### Basic Example
460
+
461
+ ```typescript
462
+ // Customize labels for your AI image generation interface
463
+ cesdk.i18n.setTranslations({
464
+ en: {
465
+ // Generic labels (applies to ALL AI plugins)
466
+ 'ly.img.plugin-ai-generation-web.property.prompt': 'Describe what you want to create',
467
+ 'ly.img.plugin-ai-generation-web.property.image_size': 'Image Dimensions',
468
+
469
+ // Provider-specific for RecraftV3
470
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.property.prompt': 'Describe your Recraft image',
471
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.property.image_size': 'Canvas Size',
472
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.property.image_size.square_hd': 'Square HD (1024×1024)',
473
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/recraft-v3.property.image_size.portrait_4_3': 'Portrait 4:3 (768×1024)',
474
+
475
+ // Provider-specific for IdeogramV3
476
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/ideogram/v3.property.prompt': 'Describe your Ideogram image',
477
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/ideogram/v3.property.style_mode': 'Style Mode',
478
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/ideogram/v3.property.style_mode.REALISTIC': 'Photorealistic'
479
+ }
480
+ });
481
+ ```
482
+
483
+ #### QuickAction Translations
484
+
485
+ QuickActions (like "Edit Image", "Style Transfer", etc.) use their own translation keys with provider-specific overrides:
486
+
487
+ ```typescript
488
+ cesdk.i18n.setTranslations({
489
+ en: {
490
+ // Provider-specific translations (highest priority)
491
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/gemini-flash-edit.quickAction.editImage': 'Edit with Gemini',
492
+ 'ly.img.plugin-ai-image-generation-web.fal-ai/flux-pro/kontext.quickAction.styleTransfer': 'Style with Flux Pro Kontext',
493
+ 'ly.img.plugin-ai-image-generation-web.open-ai/gpt-image-1/image2image.quickAction.editImage': 'Edit with GPT',
494
+
495
+ // Generic plugin translations
496
+ 'ly.img.plugin-ai-image-generation-web.quickAction.editImage': 'Edit Image...',
497
+ 'ly.img.plugin-ai-image-generation-web.quickAction.swapBackground': 'Swap Background...',
498
+ 'ly.img.plugin-ai-image-generation-web.quickAction.styleTransfer': 'Style Transfer...',
499
+ 'ly.img.plugin-ai-image-generation-web.quickAction.createVariant': 'Create Variant...',
500
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer': 'Painted By...',
501
+
502
+ // QuickAction input fields and buttons
503
+ 'ly.img.plugin-ai-image-generation-web.quickAction.editImage.prompt': 'Edit Image...',
504
+ 'ly.img.plugin-ai-image-generation-web.quickAction.editImage.prompt.placeholder': 'e.g. "Add a sunset"',
505
+ 'ly.img.plugin-ai-image-generation-web.quickAction.editImage.apply': 'Change',
506
+ 'ly.img.plugin-ai-image-generation-web.quickAction.swapBackground.prompt': 'Swap Background...',
507
+ 'ly.img.plugin-ai-image-generation-web.quickAction.swapBackground.prompt.placeholder': 'e.g. "Beach at sunset"',
508
+ 'ly.img.plugin-ai-image-generation-web.quickAction.swapBackground.apply': 'Swap'
509
+ }
510
+ });
511
+ ```
512
+
513
+ **QuickAction Translation Priority:**
514
+ 1. Provider-specific: `ly.img.plugin-ai-image-generation-web.${provider}.quickAction.${action}.${field}`
515
+ 2. Generic plugin: `ly.img.plugin-ai-image-generation-web.quickAction.${action}.${field}`
516
+
517
+ **Translation Structure:**
518
+ - Base key (e.g., `.quickAction.editImage`): Button text when QuickAction is collapsed
519
+ - `.prompt`: Label for input field when expanded
520
+ - `.prompt.placeholder`: Placeholder text for input field
521
+ - `.apply`: Text for action/submit button
522
+
523
+ #### QuickAction Dropdown Options
524
+
525
+ Some QuickActions like Artist Transfer and Style Transfer include dropdown menus with predefined options. You can customize these dropdown labels using provider-specific translation keys:
526
+
527
+ ```typescript
528
+ cesdk.i18n.setTranslations({
529
+ en: {
530
+ // Artist Transfer dropdown options (provider-specific)
531
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.van-gogh': 'Van Gogh',
532
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.monet': 'Monet',
533
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.picasso': 'Picasso',
534
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.dali': 'Dalí',
535
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.matisse': 'Matisse',
536
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.warhol': 'Warhol',
537
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.michelangelo': 'Michelangelo',
538
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.da-vinci': 'Da Vinci',
539
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.rembrandt': 'Rembrandt',
540
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.mondrian': 'Mondrian',
541
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.kahlo': 'Frida Kahlo',
542
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.fal-ai/gemini-flash-edit.property.artist.hokusai': 'Hokusai',
543
+
544
+ // Style Transfer dropdown options (provider-specific)
545
+ 'ly.img.plugin-ai-image-generation-web.quickAction.styleTransfer.fal-ai/gemini-flash-edit.property.style.water': 'Watercolor Painting',
546
+ 'ly.img.plugin-ai-image-generation-web.quickAction.styleTransfer.fal-ai/gemini-flash-edit.property.style.oil': 'Oil Painting',
547
+ 'ly.img.plugin-ai-image-generation-web.quickAction.styleTransfer.fal-ai/gemini-flash-edit.property.style.charcoal': 'Charcoal Sketch',
548
+ 'ly.img.plugin-ai-image-generation-web.quickAction.styleTransfer.fal-ai/gemini-flash-edit.property.style.pencil': 'Pencil Drawing',
549
+ 'ly.img.plugin-ai-image-generation-web.quickAction.styleTransfer.fal-ai/gemini-flash-edit.property.style.pastel': 'Pastel Artwork',
550
+ 'ly.img.plugin-ai-image-generation-web.quickAction.styleTransfer.fal-ai/gemini-flash-edit.property.style.ink': 'Ink Wash',
551
+ 'ly.img.plugin-ai-image-generation-web.quickAction.styleTransfer.fal-ai/gemini-flash-edit.property.style.stained-glass': 'Stained Glass Window',
552
+ 'ly.img.plugin-ai-image-generation-web.quickAction.styleTransfer.fal-ai/gemini-flash-edit.property.style.japanese': 'Japanese Woodblock Print',
553
+
554
+ // Generic fallback options (applies to all providers)
555
+ 'ly.img.plugin-ai-image-generation-web.quickAction.artistTransfer.property.artist.van-gogh': 'Van Gogh',
556
+ 'ly.img.plugin-ai-image-generation-web.quickAction.styleTransfer.property.style.water': 'Watercolor Painting'
557
+ }
558
+ });
559
+ ```
560
+
561
+ The system checks for translations in this order (highest to lowest priority):
562
+
563
+ 1. **Provider-specific**: `ly.img.plugin-ai-image-generation-web.quickAction.${actionName}.${providerId}.property.${field}.${option}` - Override labels for a specific AI provider
564
+ 2. **Generic**: `ly.img.plugin-ai-image-generation-web.quickAction.${actionName}.property.${field}.${option}` - Override labels for all AI plugins
565
+
292
566
  ### Configuration Options
293
567
 
294
568
  The plugin accepts the following configuration options:
@@ -466,6 +740,26 @@ FalAiImage.Recraft20b(config: {
466
740
  })
467
741
  ```
468
742
 
743
+ #### IdeogramV3
744
+
745
+ ```typescript
746
+ FalAiImage.IdeogramV3(config: {
747
+ proxyUrl: string;
748
+ headers?: Record<string, string>;
749
+ debug?: boolean;
750
+ })
751
+ ```
752
+
753
+ #### IdeogramV3Remix
754
+
755
+ ```typescript
756
+ FalAiImage.IdeogramV3Remix(config: {
757
+ proxyUrl: string;
758
+ headers?: Record<string, string>;
759
+ debug?: boolean;
760
+ })
761
+ ```
762
+
469
763
  #### GeminiFlashEdit
470
764
 
471
765
  ```typescript
@@ -516,6 +810,26 @@ FalAiImage.FluxProKontextMaxEdit(config: {
516
810
  })
517
811
  ```
518
812
 
813
+ #### NanoBanana
814
+
815
+ ```typescript
816
+ FalAiImage.NanoBanana(config: {
817
+ proxyUrl: string;
818
+ headers?: Record<string, string>;
819
+ debug?: boolean;
820
+ })
821
+ ```
822
+
823
+ #### NanoBananaEdit
824
+
825
+ ```typescript
826
+ FalAiImage.NanoBananaEdit(config: {
827
+ proxyUrl: string;
828
+ headers?: Record<string, string>;
829
+ debug?: boolean;
830
+ })
831
+ ```
832
+
519
833
  ## UI Integration
520
834
 
521
835
  The plugin automatically registers the following UI components:
@@ -601,22 +915,30 @@ const myImageProvider = {
601
915
  - Provider-specific panels:
602
916
  - RecraftV3: `ly.img.ai.fal-ai/recraft-v3`
603
917
  - Recraft20b: `ly.img.ai.fal-ai/recraft/v2/text-to-image`
918
+ - IdeogramV3: `ly.img.ai.fal-ai/ideogram/v3`
919
+ - IdeogramV3Remix: `ly.img.ai.fal-ai/ideogram/v3/remix`
604
920
  - GeminiFlashEdit: `ly.img.ai.fal-ai/gemini-flash-edit`
605
921
  - GptImage1.Text2Image: `ly.img.ai.open-ai/gpt-image-1/text2image`
606
922
  - GptImage1.Image2Image: `ly.img.ai.open-ai/gpt-image-1/image2image`
607
923
  - FluxProKontextEdit: `ly.img.ai.fal-ai/flux-pro/kontext`
608
924
  - FluxProKontextMaxEdit: `ly.img.ai.fal-ai/flux-pro/kontext/max`
925
+ - NanoBanana: `ly.img.ai.fal-ai/nano-banana`
926
+ - NanoBananaEdit: `ly.img.ai.fal-ai/nano-banana/edit`
609
927
 
610
928
  ### Asset History
611
929
 
612
930
  Generated images are automatically stored in asset sources with the following IDs:
613
931
  - RecraftV3: `fal-ai/recraft-v3.history`
614
932
  - Recraft20b: `fal-ai/recraft/v2/text-to-image.history`
933
+ - IdeogramV3: `fal-ai/ideogram/v3.history`
934
+ - IdeogramV3Remix: `fal-ai/ideogram/v3/remix.history`
615
935
  - GeminiFlashEdit: `fal-ai/gemini-flash-edit.history`
616
936
  - GptImage1.Text2Image: `open-ai/gpt-image-1/text2image.history`
617
937
  - GptImage1.Image2Image: `open-ai/gpt-image-1/image2image.history`
618
938
  - FluxProKontextEdit: `fal-ai/flux-pro/kontext.history`
619
939
  - FluxProKontextMaxEdit: `fal-ai/flux-pro/kontext/max.history`
940
+ - NanoBanana: `fal-ai/nano-banana.history`
941
+ - NanoBananaEdit: `fal-ai/nano-banana/edit.history`
620
942
 
621
943
  ### Dock Integration
622
944
 
@@ -635,6 +957,10 @@ currentOrder.splice(2, 0, 'ly.img.ai.image-generation.dock');
635
957
  cesdk.ui.setDockOrder(currentOrder);
636
958
  ```
637
959
 
960
+ ## Translations
961
+
962
+ For customization and localization, see the [translations.json](https://github.com/imgly/plugins/tree/main/packages/plugin-ai-image-generation-web/translations.json) file which contains provider-specific translation keys for image generation interfaces.
963
+
638
964
  ## Related Packages
639
965
 
640
966
  - [@imgly/plugin-ai-generation-web](https://github.com/imgly/plugins/tree/main/packages/plugin-ai-generation-web) - Core utilities for AI generation
@@ -0,0 +1,8 @@
1
+ export declare const IMAGE_SIZE_MAP: Record<string, {
2
+ width: number;
3
+ height: number;
4
+ }>;
5
+ export declare function getImageDimensions(imageSize: string): {
6
+ width: number;
7
+ height: number;
8
+ };
@@ -0,0 +1,22 @@
1
+ import { CommonProviderConfiguration, type Provider } from '@imgly/plugin-ai-generation-web';
2
+ import CreativeEditorSDK from '@cesdk/cesdk-js';
3
+ type IdeogramV3Input = {
4
+ prompt: string;
5
+ style?: 'AUTO' | 'GENERAL' | 'REALISTIC' | 'DESIGN';
6
+ image_size?: string | {
7
+ width: number;
8
+ height: number;
9
+ };
10
+ rendering_speed?: 'TURBO' | 'BALANCED' | 'QUALITY';
11
+ };
12
+ type IdeogramV3Output = {
13
+ kind: 'image';
14
+ url: string;
15
+ };
16
+ interface ProviderConfiguration extends CommonProviderConfiguration<IdeogramV3Input, IdeogramV3Output> {
17
+ }
18
+ export declare function IdeogramV3(config: ProviderConfiguration): (context: {
19
+ cesdk: CreativeEditorSDK;
20
+ }) => Promise<Provider<'image', IdeogramV3Input, IdeogramV3Output>>;
21
+ declare function getProvider(cesdk: CreativeEditorSDK, config: ProviderConfiguration): Provider<'image', IdeogramV3Input, IdeogramV3Output>;
22
+ export default getProvider;
@@ -0,0 +1,8 @@
1
+ export declare const IMAGE_SIZE_MAP: Record<string, {
2
+ width: number;
3
+ height: number;
4
+ }>;
5
+ export declare function getImageDimensions(imageSize: string): {
6
+ width: number;
7
+ height: number;
8
+ };
@@ -0,0 +1,23 @@
1
+ import { CommonProviderConfiguration, type Provider } from '@imgly/plugin-ai-generation-web';
2
+ import CreativeEditorSDK from '@cesdk/cesdk-js';
3
+ type IdeogramV3RemixUIInput = {
4
+ prompt: string;
5
+ image_url: string;
6
+ style?: 'AUTO' | 'GENERAL' | 'REALISTIC' | 'DESIGN';
7
+ image_size?: string | {
8
+ width: number;
9
+ height: number;
10
+ };
11
+ rendering_speed?: 'TURBO' | 'BALANCED' | 'QUALITY';
12
+ strength?: number;
13
+ };
14
+ type IdeogramV3RemixOutput = {
15
+ kind: 'image';
16
+ url: string;
17
+ };
18
+ interface ProviderConfiguration extends CommonProviderConfiguration<IdeogramV3RemixUIInput, IdeogramV3RemixOutput> {
19
+ }
20
+ export declare function IdeogramV3Remix(config: ProviderConfiguration): (context: {
21
+ cesdk: CreativeEditorSDK;
22
+ }) => Promise<Provider<'image', IdeogramV3RemixUIInput, IdeogramV3RemixOutput>>;
23
+ export {};
@@ -0,0 +1,13 @@
1
+ import { ImageOutput, CommonProviderConfiguration, type Provider } from '@imgly/plugin-ai-generation-web';
2
+ import CreativeEditorSDK from '@cesdk/cesdk-js';
3
+ type NanoBananaInput = {
4
+ prompt: string;
5
+ num_images?: number;
6
+ sync_mode?: boolean;
7
+ output_format?: 'jpeg' | 'png';
8
+ };
9
+ export declare function NanoBanana(config: CommonProviderConfiguration<NanoBananaInput, ImageOutput>): (context: {
10
+ cesdk: CreativeEditorSDK;
11
+ }) => Promise<Provider<'image', NanoBananaInput, ImageOutput>>;
12
+ declare function getProvider(cesdk: CreativeEditorSDK, config: CommonProviderConfiguration<NanoBananaInput, ImageOutput>): Provider<'image', NanoBananaInput, ImageOutput>;
13
+ export default getProvider;
@@ -0,0 +1,13 @@
1
+ import { ImageOutput, type Provider, type CommonProviderConfiguration } from '@imgly/plugin-ai-generation-web';
2
+ import CreativeEditorSDK from '@cesdk/cesdk-js';
3
+ type NanoBananaEditInput = {
4
+ prompt: string;
5
+ image_url?: string;
6
+ image_urls?: string[];
7
+ exportFromBlockIds?: number[];
8
+ };
9
+ export declare function NanoBananaEdit(config: CommonProviderConfiguration<NanoBananaEditInput, ImageOutput>): (context: {
10
+ cesdk: CreativeEditorSDK;
11
+ }) => Promise<Provider<'image', NanoBananaEditInput, ImageOutput>>;
12
+ declare function getProvider(cesdk: CreativeEditorSDK, config: CommonProviderConfiguration<NanoBananaEditInput, ImageOutput>): Provider<'image', NanoBananaEditInput, ImageOutput>;
13
+ export default getProvider;
@@ -1,9 +1,9 @@
1
- import { RecraftV3Input } from '@fal-ai/client/endpoints';
1
+ import { RecraftV3TextToImageInput } from '@fal-ai/client/endpoints';
2
2
  export declare function getImageDimensions(id: string): {
3
3
  width: number;
4
4
  height: number;
5
5
  };
6
- export type StyleId = Extract<RecraftV3Input['style'], string>;
6
+ export type StyleId = Extract<RecraftV3TextToImageInput['style'], string>;
7
7
  export declare const STYLES_IMAGE: {
8
8
  id: StyleId;
9
9
  label: string;
@@ -1,12 +1,12 @@
1
1
  import { CommonProviderConfiguration, type Provider } from '@imgly/plugin-ai-generation-web';
2
- import { type RecraftV3Input } from '@fal-ai/client/endpoints';
2
+ import { type RecraftV3TextToImageInput } from '@fal-ai/client/endpoints';
3
3
  import CreativeEditorSDK from '@cesdk/cesdk-js';
4
4
  type RecraftV3Output = {
5
5
  kind: 'image';
6
6
  url: string;
7
7
  };
8
- export type StyleId = Extract<RecraftV3Input['style'], string>;
9
- interface ProviderConfiguration extends CommonProviderConfiguration<RecraftV3Input, RecraftV3Output> {
8
+ export type StyleId = Extract<RecraftV3TextToImageInput['style'], string>;
9
+ interface ProviderConfiguration extends CommonProviderConfiguration<RecraftV3TextToImageInput, RecraftV3Output> {
10
10
  /**
11
11
  * Base URL used for the UI assets used in the plugin.
12
12
  *
@@ -17,6 +17,6 @@ interface ProviderConfiguration extends CommonProviderConfiguration<RecraftV3Inp
17
17
  }
18
18
  export declare function RecraftV3(config: ProviderConfiguration): (context: {
19
19
  cesdk: CreativeEditorSDK;
20
- }) => Promise<Provider<'image', RecraftV3Input, RecraftV3Output>>;
21
- declare function getProvider(cesdk: CreativeEditorSDK, config: ProviderConfiguration): Provider<'image', RecraftV3Input, RecraftV3Output>;
20
+ }) => Promise<Provider<'image', RecraftV3TextToImageInput, RecraftV3Output>>;
21
+ declare function getProvider(cesdk: CreativeEditorSDK, config: ProviderConfiguration): Provider<'image', RecraftV3TextToImageInput, RecraftV3Output>;
22
22
  export default getProvider;
@@ -0,0 +1,3 @@
1
+ import { type FalClient as FalClientType } from '@fal-ai/client';
2
+ export type FalClient = FalClientType;
3
+ export declare function createFalClient(proxyUrl: string, headers?: Record<string, string>): FalClient;
@@ -10,12 +10,25 @@ type ImageProviderConfiguration = {
10
10
  * @deprecated Use `middlewares` instead.
11
11
  */
12
12
  middleware?: Middleware<any, any>[];
13
+ /**
14
+ * Override provider's default history asset source
15
+ */
16
+ history?: false | '@imgly/local' | '@imgly/indexedDB' | (string & {});
17
+ /**
18
+ * Configure supported quick actions
19
+ */
20
+ supportedQuickActions?: {
21
+ [quickActionId: string]: Partial<ImageQuickActionSupportMap<any>[string]> | false | null;
22
+ };
13
23
  };
14
24
  /**
15
25
  * Creates a base provider from schema. This should work out of the box
16
26
  * but may be rough around the edges and should/can be further customized.
17
27
  */
18
- declare function createImageProvider<I extends Record<string, any>>(options: {
28
+ declare function createImageProvider<I extends Record<string, any> & {
29
+ image_url?: string;
30
+ image_urls?: string[];
31
+ }>(options: {
19
32
  modelKey: string;
20
33
  name?: string;
21
34
  schema: OpenAPIV3.Document;
@@ -3,11 +3,19 @@ import { Recraft20b } from './Recraft20b';
3
3
  import { GeminiFlashEdit } from './GeminiFlashEdit';
4
4
  import { FluxProKontextEdit } from './FluxProKontextEdit';
5
5
  import { FluxProKontextMaxEdit } from './FluxProKontextMaxEdit';
6
+ import { IdeogramV3 } from './IdeogramV3';
7
+ import { IdeogramV3Remix } from './IdeogramV3Remix';
8
+ import { NanoBanana } from './NanoBanana';
9
+ import { NanoBananaEdit } from './NanoBananaEdit';
6
10
  declare const FalAi: {
7
- RecraftV3: typeof RecraftV3;
8
- Recraft20b: typeof Recraft20b;
9
- GeminiFlashEdit: typeof GeminiFlashEdit;
10
11
  FluxProKontextEdit: typeof FluxProKontextEdit;
11
12
  FluxProKontextMaxEdit: typeof FluxProKontextMaxEdit;
13
+ GeminiFlashEdit: typeof GeminiFlashEdit;
14
+ IdeogramV3: typeof IdeogramV3;
15
+ IdeogramV3Remix: typeof IdeogramV3Remix;
16
+ NanoBanana: typeof NanoBanana;
17
+ NanoBananaEdit: typeof NanoBananaEdit;
18
+ Recraft20b: typeof Recraft20b;
19
+ RecraftV3: typeof RecraftV3;
12
20
  };
13
21
  export default FalAi;