- Framework
- Getting Started
- Quick Start
Quick Start
Get up and running with the DesignCombo Video Editor SDK in minutes.
Basic Example
Here's a minimal example to get you started:
import React, { useEffect, useRef } from 'react';import StateManager from '@designcombo/state';import Timeline from '@designcombo/timeline';import { dispatch } from '@designcombo/events';import { ADD_TEXT, ADD_IMAGE } from '@designcombo/state';function SimpleVideoEditor() {const canvasRef = useRef<HTMLCanvasElement>(null);useEffect(() => {if (!canvasRef.current) return;// Initialize state managerconst stateManager = new StateManager({size: { width: 1920, height: 1080 },fps: 30});// Initialize timelineconst timeline = new Timeline(canvasRef.current, {scale: { unit: 300, zoom: 1/300, segments: 5, index: 7 },duration: 10000,state: stateManager});// Add a text elementdispatch(ADD_TEXT, {payload: {text: 'Welcome to DesignCombo!',fontSize: 48,fontFamily: 'Arial',color: '#ffffff'},options: {targetTrackIndex: 0,isSelected: true}});// Cleanupreturn () => {timeline.purge();stateManager.purge();};}, []);return (<div><h1>DesignCombo Video Editor</h1><canvasref={canvasRef}width={1200}height={400}style={{ border: '1px solid #ccc' }}/></div>);}export default SimpleVideoEditor;
Adding Different Elements
Text Elements
import { ADD_TEXT } from '@designcombo/state';// Add textdispatch(ADD_TEXT, {payload: {text: 'Hello World',fontSize: 48,fontFamily: 'Arial',color: '#ffffff',textAlign: 'center'},options: {targetTrackIndex: 0,isSelected: true}});
Image Elements
import { ADD_IMAGE } from '@designcombo/state';// Add imagedispatch(ADD_IMAGE, {payload: {src: 'https://example.com/image.jpg',alt: 'Sample image',width: 400,height: 300},options: {targetTrackIndex: 1,scaleMode: 'fit',isSelected: true}});
Video Elements
import { ADD_VIDEO } from '@designcombo/state';// Add videodispatch(ADD_VIDEO, {payload: {src: 'https://example.com/video.mp4',duration: 10000},options: {targetTrackIndex: 2,scaleMode: 'fit',isSelected: true}});
Audio Elements
import { ADD_AUDIO } from '@designcombo/state';// Add audiodispatch(ADD_AUDIO, {payload: {src: 'https://example.com/audio.mp3',duration: 5000},options: {targetTrackIndex: 3,isSelected: false}});
Working with Elements
Selecting Elements
import { LAYER_SELECT } from '@designcombo/state';// Select elements by IDdispatch(LAYER_SELECT, {payload: {trackItemIds: ['element-1', 'element-2', 'element-3']}});
Updating Elements
import { EDIT_OBJECT } from '@designcombo/state';// Update text contentdispatch(EDIT_OBJECT, {payload: {'text-element-id': {details: {text: 'Updated text content',fontSize: 64,color: '#ff0000'}}}});// Update display timingdispatch(EDIT_OBJECT, {payload: {'element-id': {display: {from: 2000,to: 8000}}}});
Deleting Elements
import { LAYER_DELETE } from '@designcombo/state';// Delete elementsdispatch(LAYER_DELETE, {payload: {trackItemIds: ['element-1', 'element-2']}});
Timeline Controls
Timeline Scale
import { TIMELINE_SCALE_CHANGED } from '@designcombo/state';// Change timeline zoom leveldispatch(TIMELINE_SCALE_CHANGED, {payload: {scale: {index: 7,unit: 300,zoom: 1 / 300,segments: 5}}});
History Controls
import { HISTORY_UNDO, HISTORY_REDO } from '@designcombo/state';// Undo last actiondispatch(HISTORY_UNDO, {});// Redo last undone actiondispatch(HISTORY_REDO, {});
State Management
Subscribing to Changes
// Subscribe to active element changesconst subscription = stateManager.subscribeToActiveIds(({ activeIds }) => {console.log('Active elements:', activeIds);});// Subscribe to track changesconst trackSubscription = stateManager.subscribeToTracks(({ tracks, changedTracks }) => {console.log('Tracks updated:', tracks);console.log('Changed tracks:', changedTracks);});// Subscribe to track item changesconst itemSubscription = stateManager.subscribeToUpdateTrackItem(({ trackItemsMap }) => {console.log('Track items updated:', trackItemsMap);});// Subscribe to timing changesconst timingSubscription = stateManager.subscribeToUpdateTrackItemTiming(({ trackItemsMap, changedTrimIds, changedDisplayIds }) => {console.log('Timing updated:', { changedTrimIds, changedDisplayIds });});// Cleanup subscriptionssubscription.unsubscribe();trackSubscription.unsubscribe();itemSubscription.unsubscribe();timingSubscription.unsubscribe();
Getting Current State
// Get current stateconst state = stateManager.getState();// Get all track itemsconst trackItems = state.trackItemsMap;// Get active elementsconst activeElements = state.activeIds;// Get timeline scaleconst scale = state.scale;// Get project settingsconst settings = {size: state.size,fps: state.fps,duration: state.duration};
Export and Rendering
Export Design
// Export complete designconst designData = stateManager.exportState();// Import designstateManager.importState(designData);
Design Loading
import { DESIGN_LOAD } from '@designcombo/state';// Load a complete designdispatch(DESIGN_LOAD, {payload: {fps: 30,tracks: [...],size: { width: 1920, height: 1080 },trackItemIds: [...],trackItemsMap: {...},transitionIds: [...],transitionsMap: {...}}});
Design Resizing
import { DESIGN_RESIZE } from '@designcombo/state';// Resize the design canvasdispatch(DESIGN_RESIZE, {payload: {width: 1920,height: 1080}});
Advanced Features
Audio Visualizations
import { ADD_RADIAL_AUDIO_BARS, ADD_LINEAL_AUDIO_BARS } from '@designcombo/state';// Add radial audio visualizationdispatch(ADD_RADIAL_AUDIO_BARS, {payload: {audioData: [0.1, 0.3, 0.5, 0.7, 0.9, 0.8, 0.6, 0.4]},options: {targetTrackIndex: 4}});// Add linear audio visualizationdispatch(ADD_LINEAL_AUDIO_BARS, {payload: {audioData: [0.2, 0.4, 0.6, 0.8, 0.7, 0.5, 0.3, 0.1]},options: {targetTrackIndex: 5}});
Progress Elements
import { ADD_PROGRESS_BAR, ADD_PROGRESS_FRAME } from '@designcombo/state';// Add progress bardispatch(ADD_PROGRESS_BAR, {payload: {progress: 0.75},options: {targetTrackIndex: 6}});// Add progress framedispatch(ADD_PROGRESS_FRAME, {payload: {progress: 0.5},options: {targetTrackIndex: 7}});
Bulk Operations
import { EDIT_BULK } from '@designcombo/state';// Perform multiple operations in a single transactiondispatch(EDIT_BULK, {payload: {actions: [{type: ADD_TEXT,payload: { text: "First item" }},{type: ADD_IMAGE,payload: { src: "image.jpg" }}]}});
Next Steps
- Explore Core Concepts to understand the architecture
- Learn about State Management
- Check out Track Items for advanced element handling
- See Examples for more complex use cases