Turbina SDK for Flutter

pub package License

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


๐ŸŽจ 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


๐Ÿ“„ License

This SDK requires a commercial license. Visit turbina.live to get started.

Copyright ยฉ 2025 Turbina, Inc. All rights reserved.


Made with โค๏ธ by Turbina

Website โ€ข Documentation โ€ข Dashboard

Libraries

turbina_sdk
Turbina Video SDK for Flutter