IMG.LY AI Video Generation for Web
A plugin for integrating AI video generation capabilities into CreativeEditor SDK.
Overview
The @imgly/plugin-ai-video-generation-web
package enables users to generate videos using AI directly within CreativeEditor SDK. This shipped provider leverages the fal.ai platform to provide high-quality video generation from text-to-video and image-to-video transformations.
Features include:
- Text-to-video generation
- Image-to-video transformations
- Multiple model options
- Automatic history tracking
- Canvas menu quick actions
- Seamless integration with CreativeEditor SDK
Installation
npm install @imgly/plugin-ai-video-generation-web
Usage
Basic Configuration
To use the plugin, import it and configure it with your preferred providers:
Single Provider Configuration
import CreativeEditorSDK from '@cesdk/cesdk-js';
import VideoGeneration from '@imgly/plugin-ai-video-generation-web';
import FalAiVideo from '@imgly/plugin-ai-video-generation-web/fal-ai';
CreativeEditorSDK.create(domElement, {
license: 'your-license-key'
}).then(async (cesdk) => {
cesdk.addPlugin(
VideoGeneration({
text2video: FalAiVideo.MinimaxVideo01Live({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
headers: {
'x-custom-header': 'value',
'x-client-version': '1.0.0'
},
properties: {
duration: { default: 5 },
aspect_ratio: { default: '16:9' }
}
}),
image2video: FalAiVideo.MinimaxVideo01LiveImageToVideo({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
headers: {
'x-custom-header': 'value',
'x-client-version': '1.0.0'
}
}),
debug: false,
dryRun: false
})
);
});
Multiple Providers Configuration
You can configure multiple providers for each generation type, and users will see a selection box to choose between them:
import CreativeEditorSDK from '@cesdk/cesdk-js';
import VideoGeneration from '@imgly/plugin-ai-video-generation-web';
import FalAiVideo from '@imgly/plugin-ai-video-generation-web/fal-ai';
CreativeEditorSDK.create(domElement, {
license: 'your-license-key'
}).then(async (cesdk) => {
cesdk.addPlugin(
VideoGeneration({
text2video: [
FalAiVideo.MinimaxVideo01Live({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
headers: {
'x-custom-header': 'value',
'x-client-version': '1.0.0'
}
}),
FalAiVideo.PixverseV35TextToVideo({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
headers: {
'x-custom-header': 'value',
'x-client-version': '1.0.0'
}
})
],
image2video: FalAiVideo.MinimaxVideo01LiveImageToVideo({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
headers: {
'x-custom-header': 'value',
'x-client-version': '1.0.0'
}
}),
debug: false,
dryRun: false
})
);
});
Providers
The plugin comes with pre-configured providers for fal.ai models:
1. MinimaxVideo01Live (Text-to-Video)
A model that generates videos based on text prompts:
text2video: FalAiVideo.MinimaxVideo01Live({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
headers: {
'x-custom-header': 'value',
'x-client-version': '1.0.0'
},
properties: {
prompt_optimizer: { default: true }
}
});
Key features:
- Generate videos from text descriptions
- Fixed output dimensions (1280×720)
- 5-second video duration
- Custom headers support for API requests
Custom Translations:
cesdk.i18n.setTranslations({
en: {
'ly.img.plugin-ai-video-generation-web.fal-ai/minimax/video-01-live.property.prompt': 'Describe your Minimax video'
}
});
2. MinimaxVideo01LiveImageToVideo (Image-to-Video)
A model that transforms still images into videos:
image2video: FalAiVideo.MinimaxVideo01LiveImageToVideo({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
headers: {
'x-custom-header': 'value',
'x-client-version': '1.0.0'
},
properties: {
prompt_optimizer: { default: true }
}
});
Key features:
- Transform existing images into videos
- Available through canvas quick actions
- Maintains original image aspect ratio
- Custom headers support for API requests
3. MinimaxHailuo02StandardImageToVideo (Image-to-Video)
An advanced model that transforms still images into videos using Hailuo 02 Standard:
image2video: FalAiVideo.MinimaxHailuo02StandardImageToVideo({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
headers: {
'x-custom-header': 'value',
'x-client-version': '1.0.0'
},
properties: {
resolution: { default: '768P' },
duration: { default: 6 }
}
});
Key features:
- Transform existing images into videos
- Available through canvas quick actions
- Selectable resolutions (512P: 912×512, 768P: 1280×720)
- Adjustable durations (6 or 10 seconds)
- Custom headers support for API requests
4. PixverseV35TextToVideo (Text-to-Video)
An alternative text-to-video model:
text2video: FalAiVideo.PixverseV35TextToVideo({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
headers: {
'x-custom-header': 'value',
'x-client-version': '1.0.0'
},
properties: {
seed: { default: 42 }
}
});
Key features:
- Alternative text-to-video generation
- Custom headers support for API requests
5. KlingVideoV21MasterTextToVideo (Text-to-Video)
A model based on KlingVideo V2.1 that generates videos from text prompts:
text2video: FalAiVideo.KlingVideoV21MasterTextToVideo({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
properties: {
aspect_ratio: { default: '16:9' },
duration: { default: '5s' }
}
});
Key features:
- Generate videos from text descriptions
- Adjustable aspect ratios (16:9, 9:16, 1:1)
- Selectable durations (5 s or 10 s)
- Adaptive resolution (height fixed at 720 px, width is calculated)
Custom Translations:
cesdk.i18n.setTranslations({
en: {
'ly.img.plugin-ai-video-generation-web.fal-ai/kling-video/v2.1/master/text-to-video.property.prompt': 'Describe your KlingVideo',
'ly.img.plugin-ai-video-generation-web.fal-ai/kling-video/v2.1/master/text-to-video.property.aspect_ratio': 'Video Format',
'ly.img.plugin-ai-video-generation-web.fal-ai/kling-video/v2.1/master/text-to-video.property.duration': 'Video Length (seconds)'
}
});
6. KlingVideoV21MasterImageToVideo (Image-to-Video)
A model that converts still images into videos using KlingVideo V2.1:
image2video: FalAiVideo.KlingVideoV21MasterImageToVideo({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
properties: {
duration: { default: '5s' }
}
});
Key features:
- Transform existing images into videos
- Maintains original image aspect ratio (fallback to 1280 × 720)
- Canvas quick-action integration
- Selectable durations (5 s or 10 s)
6. ByteDanceSeedanceV1ProImageToVideo (Image-to-Video)
A model that transforms images into videos using ByteDance Seedance v1 Pro:
image2video: FalAiVideo.ByteDanceSeedanceV1ProImageToVideo({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
properties: {
aspect_ratio: { default: 'auto' },
duration: { default: 5 },
resolution: { default: '720p' }
}
});
Key features:
- Transform existing images into dynamic videos
- Multiple aspect ratio options (21:9, 16:9, 4:3, 1:1, 3:4, 9:16, or auto from image)
- Adjustable duration (3-12 seconds, default 5)
- Resolution options (480p, 720p, 1080p)
- Maintains image quality while adding motion
7. ByteDanceSeedanceV1ProTextToVideo (Text-to-Video)
A model that generates videos from text using ByteDance Seedance v1 Pro:
text2video: FalAiVideo.ByteDanceSeedanceV1ProTextToVideo({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
properties: {
aspect_ratio: { default: '16:9' },
duration: { default: 5 },
resolution: { default: '720p' }
}
});
Key features:
- Generate videos from text descriptions
- Multiple aspect ratio options (21:9, 16:9, 4:3, 1:1, 3:4, 9:16)
- Adjustable duration (3-12 seconds, default 5)
- Resolution options (480p, 720p, 1080p)
- High-quality motion synthesis from text prompts
8. Veo3TextToVideo (Text-to-Video)
An advanced text-to-video model:
text2video: FalAiVideo.Veo3TextToVideo({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
properties: {
aspect_ratio: { default: '16:9' },
duration: { default: 8 }
}
});
Key features:
- Generate videos from text descriptions
- Supports aspect ratios 16:9, 9:16 and 1:1 (defaults to 16:9)
- Fixed duration of 8 seconds
- Optional audio generation via
generate_audio
Feature Control
You can control various aspects of the video generation plugin using the Feature API:
cesdk.feature.enable('ly.img.plugin-ai-video-generation-web.fromText', false);
cesdk.feature.enable('ly.img.plugin-ai-video-generation-web.fromImage', false);
cesdk.feature.enable('ly.img.plugin-ai-video-generation-web.providerSelect', false);
cesdk.feature.enable('ly.img.plugin-ai-video-generation-web.quickAction.createVideo', false);
For more information about Feature API and available feature flags, see the @imgly/plugin-ai-generation-web documentation.
Customizing Labels and Translations
You can customize all labels and text in the AI video generation interface using the translation system. This allows you to provide better labels for your users in any language.
Translation Key Structure
The system checks for translations in this order (highest to lowest priority):
- Provider-specific:
ly.img.plugin-ai-video-generation-web.${provider}.property.${field}
- Override labels for a specific AI provider
- Generic:
ly.img.plugin-ai-generation-web.property.${field}
- Override labels for all AI plugins
Basic Example
cesdk.i18n.setTranslations({
en: {
'ly.img.plugin-ai-generation-web.property.prompt': 'Describe what you want to create',
'ly.img.plugin-ai-generation-web.property.duration': 'Video Duration',
'ly.img.plugin-ai-video-generation-web.fal-ai/minimax/video-01-live.property.prompt': 'Describe your video',
'ly.img.plugin-ai-video-generation-web.fal-ai/minimax/video-01-live.property.duration': 'Video Length',
'ly.img.plugin-ai-video-generation-web.fal-ai/kling-video/v2.1/master/text-to-video.property.aspect_ratio': 'Video Aspect Ratio',
'ly.img.plugin-ai-video-generation-web.fal-ai/kling-video/v2.1/master/text-to-video.property.duration': 'Video Duration (seconds)'
}
});
QuickAction Translations
Video QuickActions (like "Create Video from Image") use their own translation keys with provider-specific overrides:
cesdk.i18n.setTranslations({
en: {
'ly.img.plugin-ai-video-generation-web.fal-ai/minimax/video-01-live.quickAction.createVideo': 'Generate Minimax Video...',
'ly.img.plugin-ai-video-generation-web.fal-ai/minimax/video-01-live.quickAction.createVideo.prompt': 'Minimax Video Prompt',
'ly.img.plugin-ai-video-generation-web.quickAction.createVideo': 'Create Video...',
'ly.img.plugin-ai-video-generation-web.quickAction.createVideo.prompt': 'Video Prompt',
'ly.img.plugin-ai-video-generation-web.quickAction.createVideo.prompt.placeholder': 'e.g. "Make the image move slowly"',
'ly.img.plugin-ai-video-generation-web.quickAction.createVideo.apply': 'Generate'
}
});
QuickAction Translation Priority:
- Provider-specific:
ly.img.plugin-ai-video-generation-web.${provider}.quickAction.${action}.${field}
- Generic plugin:
ly.img.plugin-ai-video-generation-web.quickAction.${action}.${field}
Translation Structure:
- Base key (e.g.,
.quickAction.createVideo
): Button text when QuickAction is collapsed
.prompt
: Label for input field when expanded
.prompt.placeholder
: Placeholder text for input field
.apply
: Text for action/submit button
Configuration Options
The plugin accepts the following configuration options:
text2video | Provider | Provider[] | Provider(s) for text-to-video generation. When multiple providers are provided, users can select between them | undefined |
image2video | Provider | Provider[] | Provider(s) for image-to-video transformation. When multiple providers are provided, users can select between them | undefined |
debug | boolean | Enable debug logging | false |
dryRun | boolean | Simulate generation without API calls | false |
middleware | Function[] | Array of middleware functions for the generation | undefined |
Middleware Configuration
The middleware
option allows you to add pre-processing and post-processing capabilities to the generation process:
import VideoGeneration from '@imgly/plugin-ai-video-generation-web';
import FalAiVideo from '@imgly/plugin-ai-video-generation-web/fal-ai';
import { loggingMiddleware, rateLimitMiddleware } from '@imgly/plugin-ai-generation-web';
const logging = loggingMiddleware();
const rateLimit = rateLimitMiddleware({
maxRequests: 5,
timeWindowMs: 300000,
onRateLimitExceeded: (input, options, info) => {
console.log(`Video generation rate limit exceeded: ${info.currentCount}/${info.maxRequests}`);
return false;
}
});
const customMiddleware = async (input, options, next) => {
console.log('Before generation:', input);
const modifiedInput = {
...input,
customField: 'custom value'
};
const result = await next(modifiedInput, options);
console.log('After generation:', result);
return result;
};
cesdk.addPlugin(
VideoGeneration({
text2video: FalAiVideo.MinimaxVideo01Live({
proxyUrl: 'http://your-proxy-server.com/api/proxy'
}),
middleware: [logging, rateLimit, customMiddleware]
})
);
Built-in middleware options:
- loggingMiddleware: Logs generation requests and responses
- rateLimitMiddleware: Limits the number of generation requests in a time window
You can also create custom middleware functions to meet your specific needs.
Using a Proxy
For security reasons, it's recommended to use a proxy server to handle API requests to fal.ai. The proxy URL is required when configuring providers:
text2video: FalAiVideo.MinimaxVideo01Live({
proxyUrl: 'http://your-proxy-server.com/api/proxy',
headers: {
'x-custom-header': 'value',
'x-client-version': '1.0.0'
}
});
The headers
option allows you to include custom HTTP headers in all API requests. This is useful for:
- Adding custom client identification headers
- Including version information
- Passing through metadata required by your API
- Adding correlation IDs for request tracing
You'll need to implement a proxy server that forwards requests to fal.ai and handles authentication.
API Reference
Main Plugin
VideoGeneration(options: PluginConfiguration): EditorPlugin
Creates and returns a plugin that can be added to CreativeEditor SDK.
Plugin Configuration
interface PluginConfiguration {
text2video?: AiVideoProvider | AiVideoProvider[];
image2video?: AiVideoProvider | AiVideoProvider[];
debug?: boolean;
dryRun?: boolean;
middleware?: GenerationMiddleware;
}
Fal.ai Providers
MinimaxVideo01Live
FalAiVideo.MinimaxVideo01Live(config: {
proxyUrl: string;
headers?: Record<string, string>;
debug?: boolean;
}): AiVideoProvider
MinimaxVideo01LiveImageToVideo
FalAiVideo.MinimaxVideo01LiveImageToVideo(config: {
proxyUrl: string;
headers?: Record<string, string>;
debug?: boolean;
}): AiVideoProvider
MinimaxHailuo02StandardImageToVideo
FalAiVideo.MinimaxHailuo02StandardImageToVideo(config: {
proxyUrl: string;
headers?: Record<string, string>;
debug?: boolean;
}): AiVideoProvider
PixverseV35TextToVideo
FalAiVideo.PixverseV35TextToVideo(config: {
proxyUrl: string;
headers?: Record<string, string>;
debug?: boolean;
}): AiVideoProvider
KlingVideoV21MasterTextToVideo
FalAiVideo.KlingVideoV21MasterTextToVideo(config: {
proxyUrl: string;
debug?: boolean;
}): AiVideoProvider
KlingVideoV21MasterImageToVideo
FalAiVideo.KlingVideoV21MasterImageToVideo(config: {
proxyUrl: string;
debug?: boolean;
}): AiVideoProvider
ByteDanceSeedanceV1ProImageToVideo
FalAiVideo.ByteDanceSeedanceV1ProImageToVideo(config: {
proxyUrl: string;
debug?: boolean;
}): AiVideoProvider
ByteDanceSeedanceV1ProTextToVideo
FalAiVideo.ByteDanceSeedanceV1ProTextToVideo(config: {
proxyUrl: string;
debug?: boolean;
}): AiVideoProvider
Veo3TextToVideo
FalAiVideo.Veo3TextToVideo(config: {
proxyUrl: string;
debug?: boolean;
}): AiVideoProvider
UI Integration
The plugin automatically registers the following UI components:
- Generation Panel: A sidebar panel for text-to-video generation
- Quick Actions: Canvas menu items for image-to-video transformations
- History Library: Displays previously generated videos
- Dock Component: A button in the dock area to open the video generation panel
Panel IDs
- Main panel:
ly.img.ai.video-generation
- Canvas quick actions:
ly.img.ai.video.canvasMenu
- Provider-specific panels:
- MinimaxVideo01Live:
ly.img.ai.fal-ai/minimax/video-01-live
- MinimaxVideo01LiveImageToVideo:
ly.img.ai.fal-ai/minimax/video-01-live/image-to-video
- MinimaxHailuo02StandardImageToVideo:
ly.img.ai.fal-ai/minimax/hailuo-02/standard/image-to-video
- PixverseV35TextToVideo:
ly.img.ai.fal-ai/pixverse/v3.5/text-to-video
- KlingVideoV21MasterTextToVideo:
ly.img.ai.fal-ai/kling-video/v2.1/master/text-to-video
- KlingVideoV21MasterImageToVideo:
ly.img.ai.fal-ai/kling-video/v2.1/master/image-to-video
- ByteDanceSeedanceV1ProImageToVideo:
ly.img.ai.fal-ai/bytedance/seedance/v1/pro/image-to-video
- ByteDanceSeedanceV1ProTextToVideo:
ly.img.ai.fal-ai/bytedance/seedance/v1/pro/text-to-video
- Veo3TextToVideo:
ly.img.ai.fal-ai/veo3
Asset History
Generated videos are automatically stored in asset sources with the following IDs:
- MinimaxVideo01Live:
fal-ai/minimax/video-01-live.history
- MinimaxVideo01LiveImageToVideo:
fal-ai/minimax/video-01-live/image-to-video.history
- MinimaxHailuo02StandardImageToVideo:
fal-ai/minimax/hailuo-02/standard/image-to-video.history
- PixverseV35TextToVideo:
fal-ai/pixverse/v3.5/text-to-video.history
- KlingVideoV21MasterTextToVideo:
fal-ai/kling-video/v2.1/master/text-to-video.history
- KlingVideoV21MasterImageToVideo:
fal-ai/kling-video/v2.1/master/image-to-video.history
- ByteDanceSeedanceV1ProImageToVideo:
fal-ai/bytedance/seedance/v1/pro/image-to-video.history
- ByteDanceSeedanceV1ProTextToVideo:
fal-ai/bytedance/seedance/v1/pro/text-to-video.history
- Veo3TextToVideo:
fal-ai/veo3.history
Dock Integration
The plugin automatically registers a dock component with a sparkle icon that opens the video generation panel. To customize the component's position in the dock, use the setDockOrder
method:
cesdk.ui.setDockOrder([
'ly.img.ai.video-generation.dock',
...cesdk.ui.getDockOrder()
]);
const currentOrder = cesdk.ui.getDockOrder();
currentOrder.splice(2, 0, 'ly.img.ai.video-generation.dock');
cesdk.ui.setDockOrder(currentOrder);
Translations
For customization and localization, see the translations.json file which contains provider-specific translation keys for video generation interfaces.
Related Packages
License
This plugin is part of the IMG.LY plugin ecosystem for CreativeEditor SDK. Please refer to the license terms in the package.