turbina_sdk 1.2.4
turbina_sdk: ^1.2.4 copied to clipboard
Turbina Video SDK for Flutter - Professional video processing, editing, and AR effects with native C++ performance via FFI
Turbina SDK for Flutter #
Professional Video Processing, Editing, and AR Effects for Flutter
Features • Installation • Quick Start • Documentation • Examples
🎯 Features #
📹 Real-time Video Processing #
- 11 GPU-accelerated filters (Vintage, Cinematic, B&W, Sepia, Warm, Cool, etc.)
- Real-time camera capture with front/back switching
- Face tracking with 468 landmarks (MediaPipe)
- AR effects (Beautification, Masks, Filters)
- Video recording with H.264/H.265 encoding
🎬 38+ Video Editing Operations #
- Basic: Trim, Split, Merge, Reverse
- Time: Speed Control (0.25x-4x), Slow Motion
- Transform: Rotate, Flip, Crop, Aspect Ratio
- Color: Brightness, Contrast, Saturation, Hue, Temperature, LUTs
- Audio: Add Music, Volume Control, Extract Audio, Mute, Audio Effects
- Text & Graphics: Text Overlay, Watermark, Animated Text
- Effects: Blur, Vignette, Sharpen, Grain, Fade, Mirror, Chroma Key
- Advanced: Transitions, Picture-in-Picture, Keyframes, Zoom, Stabilization
🖼️ 26+ Image/Video Processing Utilities #
- Video Metadata: Duration, Resolution, FPS, Bitrate, Codecs
- Thumbnails: Generate thumbnails with 3 quality levels
- Frame Extraction: Extract single or multiple frames
- Image Resize: Fit, Fill, Stretch, Scale modes
- Image Compression: JPEG, PNG, WebP, BMP
- Image Filters: Apply all filters to static images
- Image Transform: Rotate, Flip, Crop, Blur
🔐 License & Analytics #
- License validation with backend
- MAU (Monthly Active Users) tracking
- Usage analytics and quota management
📦 Installation #
Add Turbina SDK to your pubspec.yaml:
dependencies:
turbina_sdk: ^1.1.0
Run:
flutter pub get
🚀 Native Performance (FFI) #
Turbina SDK v1.1.0+ uses FFI (Foreign Function Interface) for direct C++ core integration, offering 10-15x better performance than traditional MethodChannel.
First Launch:
- Automatically downloads native binaries (~2-5 MB) from GitHub Releases
- Cached locally for instant subsequent launches
- No app size increase - only downloaded when needed
Architecture:
Flutter App (Dart)
↓ FFI
C++ Core (Native)
↓
Hardware (GPU/CPU)
🚀 Quick Start #
1. Initialize the SDK (FFI - High Performance) #
import 'package:turbina_sdk/turbina_sdk.dart';
// Use TurbinaSDKFFI for native C++ performance (Recommended)
final turbina = TurbinaSDKFFI();
// Initialize with your license
await turbina.initialize(TurbinaConfig(
licenseKey: 'sk_live_your_key', // Production key
appId: 'com.yourcompany.yourapp',
debug: false, // Set to true only during development
));
// API URL is auto-detected based on license key prefix:
// sk_live_* -> production, sk_test_* -> staging, sk_dev_* -> localhost
📦 Binary Distribution
Pre-compiled C++ binaries are automatically downloaded from our public GitHub repository:
- Repository:
Chancilson/turbina-binaries - Secure, fast, and reliable
- No authentication required
- Cached locally after first download
2. Start Camera with Filters #
// Start camera
await turbina.startCamera(CameraConfig(
facing: CameraFacing.front,
resolution: CameraResolution.high,
fps: 30,
));
// Apply a filter
await turbina.applyFilter(FilterType.cinematic, intensity: 0.8);
// Switch camera
await turbina.switchCamera();
3. Record Video #
// Start recording
await turbina.startRecording(
'output.mp4',
RecordingConfig(
codec: VideoCodec.h264,
bitrate: 5000000, // 5 Mbps
quality: 80,
),
);
// Stop recording
final outputPath = await turbina.stopRecording();
print('Video saved: $outputPath');
4. Edit Videos #
// Trim video
await turbina.trimVideo(
inputPath: 'input.mp4',
outputPath: 'output.mp4',
startTime: 5.0,
endTime: 15.0,
);
// Merge videos
await turbina.mergeVideos(
inputPaths: ['video1.mp4', 'video2.mp4'],
outputPath: 'merged.mp4',
);
// Apply slow motion
await turbina.slowMotion(
inputPath: 'input.mp4',
outputPath: 'output.mp4',
slowFactor: 2.0,
useInterpolation: true,
);
// Add music
await turbina.addMusic(
videoPath: 'video.mp4',
audioPath: 'music.mp3',
outputPath: 'output.mp4',
volume: 0.5,
fadeIn: 2.0,
fadeOut: 2.0,
loop: true,
);
5. Face Tracking & AR Effects #
// Enable face tracking
await turbina.enableFaceTracking();
// Get face landmarks (468 points)
final landmarks = await turbina.getFaceLandmarks();
if (landmarks != null) {
print('Detected ${landmarks.faceCount} face(s)');
print('Confidence: ${landmarks.confidence}');
}
// Apply AR effect
await turbina.applyEffect(
EffectType.beautification,
EffectParams(intensity: 0.7),
);
6. Image Processing #
// Resize image
await turbina.resizeImage(
inputPath: 'input.jpg',
outputPath: 'output.jpg',
width: 1920,
height: 1080,
mode: 0, // 0 = fit
);
// Compress image
await turbina.compressImage(
inputPath: 'input.jpg',
outputPath: 'output.jpg',
quality: 80,
);
// Apply filter to image
await turbina.applyFilterToImage(
inputPath: 'input.jpg',
outputPath: 'output.jpg',
filter: FilterType.vintage,
);
7. Video Metadata #
// Get video information
final info = await turbina.getVideoInfo('video.mp4');
print('Duration: ${info.duration}s');
print('Resolution: ${info.width}x${info.height}');
print('FPS: ${info.fps}');
print('Codec: ${info.codec}');
// Generate thumbnail
await turbina.generateThumbnail(
videoPath: 'video.mp4',
outputPath: 'thumbnail.jpg',
timestamp: -1, // -1 = middle of video
quality: 2, // 0 = low, 1 = medium, 2 = high
);
8. License & Analytics #
// Validate license
final license = await turbina.validateLicense();
print('Tier: ${license.tier}');
print('Status: ${license.status}');
print('Expires: ${license.expiresAt}');
// Track MAU
await turbina.trackMAU('user-123');
📚 API Reference #
Core SDK #
| Method | Description |
|---|---|
initialize(config) |
Initialize the SDK with license and config |
dispose() |
Dispose SDK resources |
getVersion() |
Get SDK version string |
Camera #
| Method | Description |
|---|---|
startCamera([config]) |
Start camera capture |
stopCamera() |
Stop camera capture |
switchCamera() |
Switch front/back camera |
Filters #
| Method | Description |
|---|---|
applyFilter(filter, intensity) |
Apply real-time filter |
removeFilter() |
Remove current filter |
getAvailableFilters() |
Get available filters for license |
Face Tracking #
| Method | Description |
|---|---|
enableFaceTracking() |
Enable face tracking |
disableFaceTracking() |
Disable face tracking |
getFaceLandmarks() |
Get 468 face landmarks |
Effects #
| Method | Description |
|---|---|
loadEffect(effectId) |
Load an AR effect |
applyEffect(effect, params) |
Apply AR effect |
removeEffect() |
Remove current effect |
Recording #
| Method | Description |
|---|---|
startRecording(path, config) |
Start video recording |
stopRecording() |
Stop recording, returns path |
Video Editing #
| Method | Description |
|---|---|
trimVideo({...}) |
Trim video start/end |
mergeVideos({...}) |
Merge multiple videos |
changeSpeed({...}) |
Change playback speed |
slowMotion({...}) |
Apply slow motion effect |
rotateVideo({...}) |
Rotate video (90°, 180°, 270°) |
flipVideo({...}) |
Flip video (horizontal/vertical) |
addMusic({...}) |
Add background music |
adjustVolume({...}) |
Adjust video volume |
Video Processing #
| Method | Description |
|---|---|
getVideoInfo(path) |
Get video metadata |
generateThumbnail({...}) |
Generate thumbnail from video |
extractFrame({...}) |
Extract frame at timestamp |
Image Processing #
| Method | Description |
|---|---|
resizeImage({...}) |
Resize image with mode |
compressImage({...}) |
Compress image (JPEG quality) |
applyFilterToImage({...}) |
Apply filter to static image |
License & Analytics #
| Method | Description |
|---|---|
validateLicense() |
Validate current license |
trackMAU(userId) |
Track Monthly Active User |
🎨 Filter Types #
FilterType.none // No filter
FilterType.vintage // Vintage film look
FilterType.cinematic // Cinematic color grading
FilterType.blackWhite // Black and white
FilterType.sepia // Sepia tone
FilterType.warm // Warm color temperature
FilterType.cool // Cool color temperature
FilterType.vivid // Vivid and saturated
FilterType.dramatic // Dramatic high contrast
FilterType.noir // Film noir style
FilterType.fade // Faded colors
🎭 Effect Types #
EffectType.none // No effect
EffectType.beautification // Face beautification
EffectType.catEars // Cat ears overlay
EffectType.glasses // Glasses overlay
📱 Platform Support #
| Platform | Version | Status |
|---|---|---|
| iOS | 13.0+ | ✅ Supported |
| Android | API 24+ (7.0+) | ✅ Supported |
| Web | - | ❌ Not supported |
| Desktop | - | ⚠️ Future |
🔐 License Tiers #
| Tier | MAU Limit | Filters | Effects | Editing | Price |
|---|---|---|---|---|---|
| Starter | 10,000 | Basic (5) | None | Basic | $99/mo |
| Pro | 100,000 | All (11) | All | All | $299/mo |
| Enterprise | Unlimited | All (11) | All | All | Custom |
📖 Documentation #
- Full API Documentation
- iOS Integration Guide
- Android Integration Guide
- Video Editing Guide
- Face Tracking Guide
🎨 Ready-to-Use Widgets #
Turbina provides production-ready widgets for instant integration:
TurbinaCamera - Complete Camera Widget #
TurbinaCamera(
showControls: true, // Built-in controls
showFilterButton: true, // Filter picker
showEffectButton: true, // Effect picker
showRecordButton: true, // Record button
onCameraReady: () => print('Ready!'),
)
VideoEditor - Video Editing Widget #
VideoEditor(
videoPath: '/path/to/video.mp4',
onExportComplete: (path) => print('Exported: $path'),
)
Platform Utilities #
// Platform detection
print('Platform: ${PlatformInfo.platformName}');
print('Processors: ${DeviceInfo.numberOfProcessors}');
print('Recommended FPS: ${DeviceInfo.recommendedFPS}');
// Performance monitoring
final monitor = PerformanceMonitor();
await monitor.measureAsync('video_process', () async {
await turbina.trimVideo(...);
});
print('Average: ${monitor.getAverageDurationMs('video_process')} ms');
💡 Examples #
Check out the example folders for complete demos:
/example- Basic example with core features/example_complete- Complete app with:- TurbinaCamera widget demo
- VideoEditor widget demo
- Image processing demo
- Performance benchmarks
- All features showcased
Run the complete example:
cd sdk/flutter/example_complete
flutter run
🧪 Testing #
Widget Tests #
cd sdk/flutter
flutter test test/widget_test.dart
E2E Tests #
flutter drive --target=test_driver/app.dart
Performance Benchmarks #
dart run benchmark/performance_benchmark.dart
🐛 Troubleshooting #
iOS Build Issues #
If you encounter iOS build issues, add to ios/Podfile:
platform :ios, '13.0'
Android Build Issues #
Ensure minSdkVersion is 24+ in android/app/build.gradle:
android {
defaultConfig {
minSdkVersion 24
}
}
🤝 Support #
- 📧 Email: support@turbina.live
- 📚 Documentation: https://www.turbina.live/docs
- 🐛 Issues: GitHub Issues
📄 License #
This SDK requires a commercial license. Visit turbina.live to get started.
Copyright © 2025 Turbina, Inc. All rights reserved.
Made with ❤️ by Turbina