< Flutter UIKit />
UTD Video Effects Kit
Real-time beauty filters, LUT color grading, and face effects.
import 'package:utd_video_effects_kit/utd_video_effects_kit.dart';
final fx = VideoEffectsProcessor.create();
final track = await LocalVideoTrack.createCameraTrack(
CameraCaptureOptions(processor: fx),
);
await fx.setSmoothing(0.6);
await fx.setFilter('teal_orange', intensity: 0.8);
await fx.setBackgroundBlur(0.4);
await fx.setEyeColor('#3366CC', opacity: 0.6);
await fx.setLipstick('#CC2244');
// Or use the built-in UI:
VideoEffectsSheet.show(context, processor: fx);46+
LUT filters
9
Accessories
6
Makeup looks
GPU
Real-time
< utd_video_effects_kit />
Key features
Real-time video effects and beauty filters for LiveKit-based Flutter apps. Effects run through a TrackProcessor on native GPU pipelines (Android/iOS), bundling 46+ LUT color filters, skin smoothing/whitening, background blur, and MediaPipe-powered face effects (eye color, makeup, accessories). Includes a built-in VideoEffectsSheet UI with Beauty/Filters/Makeup/Accessories tabs.
46+ LUT color filters (curated + in-house looks)
Beauty effects: skin smoothing (frequency separation), whitening, background blur
Face effects via MediaPipe: eye color, makeup (lipstick/eyeshadow/blush), 9 accessories
Color post-processing: glow/bloom (Orton), film grain, vignette
Skin retouch: texture detail, clarity, selective brightening
Face reshape: landmark-driven warp (eye enlarge, face slim, nose narrow, …)
Drop-in VideoEffectsSheet UI (Beauty/Filters/Makeup/Accessories tabs)
Curated makeup looks and skin-tone presets
Adaptive frame-budget management with device performance tiers
Zero-glue LiveKit TrackProcessor attachment to LocalVideoTrack
< utd_video_effects_kit />
Get started
Install
dependencies:
utd_video_effects_kit: ^0.5.0< utd_video_effects_kit />
API reference
Main processor
The single public entry point: a LiveKit TrackProcessor that applies GPU beauty/filter effects natively.
VideoEffectsProcessorclassabstract class VideoEffectsProcessor extends TrackProcessor<VideoProcessorOptions>LiveKit-compatible video processor that applies GPU beauty/filter effects natively and exposes the result via processedTrack. Has no per-frame process() hook; pixel work runs natively.
VideoEffectsProcessor.createconstructorfactory VideoEffectsProcessor.create({EffectsState initial = const EffectsState()})Builds the default native-backed implementation. The only way to construct a processor.
Parameters
initialEffectsStateDefault = const EffectsState()Initial effect settings the processor starts with.
Returns: VideoEffectsProcessor — A native-backed processor instance.
stategetterValueListenable<EffectsState> get stateLive, read-only snapshot of current effect settings. Bind UI to this.
Returns: ValueListenable<EffectsState> — Listenable of the current immutable EffectsState.
isSupportedgetterbool get isSupportedWhether this device/platform can actually process pixels. False means processedTrack is a passthrough (original camera frames flow unmodified).
Returns: bool — True if native pixel processing is available.
disposemethodvoid dispose()Final teardown: releases the effect-state listenable. Call when the live session ends. Distinct from LiveKit's per-capture destroy().
Returns: void — Nothing.
Adaptive performance & telemetry
Frame-budget signals and on-device measurement/parity harness.
budgetExceededgetterValueListenable<bool> get budgetExceededTrue while the native pipeline sheds work to hold the frame budget (degrade level > 0). Emits only on change. Always false on unsupported platforms.
Returns: ValueListenable<bool> — Listenable performance-mode flag.
degradeLevelgetterValueListenable<int> get degradeLevelCurrent adaptive frame-budget degrade level: 0 (full quality) .. 4 (max shedding). 0 on unsupported platforms.
Returns: ValueListenable<int> — Listenable degrade level 0..4.
deviceTiergetterValueListenable<int> get deviceTierStatic device performance tier classified natively at attach: 0 Budget, 1 Low, 2 Mid, 3 Flagship. 3 on unsupported platforms or before first attach.
Returns: ValueListenable<int> — Listenable device tier 0..3.
perfStatsmethodasyncFuture<EffectsPerfStats?> perfStats({bool reset = false})Pulls a snapshot of native frame-budget telemetry (over-budget rate + frame-time distribution). Returns null on web/unsupported or with no native session.
Parameters
resetboolDefault = falseClear counters after reading so the next call measures a fresh window.
Returns: Future<EffectsPerfStats?> — Telemetry snapshot, or null if unavailable.
renderTestFramemethodasyncFuture<EffectsTestFrame?> renderTestFrame(Uint8List rgba, {required int width, required int height})Runs an RGBA8888 image through the native COLOR grade with current settings and returns the processed RGBA8888 (CPU-vs-GPU parity harness). Call with effects disabled. Returns null if unavailable.
Parameters
rgbaUint8ListrequiredRGBA8888 row-major input, width*height*4 bytes.
widthintrequiredInput image width in pixels.
heightintrequiredInput image height in pixels.
Returns: Future<EffectsTestFrame?> — Graded output frame, or null if unavailable.
Beauty & color setters
Skin smoothing, whitening, LUT filters, and the color-post (glow/grain/vignette) tail.
setEnabledmethodasyncFuture<void> setEnabled(bool enabled)Master on/off switch. When off the native pipeline is a 1:1 passthrough.
Parameters
enabledboolrequiredWhether effects are applied.
Returns: Future<void> — Completes when applied.
setSmoothingmethodasyncFuture<void> setSmoothing(double amount)Skin-smoothing strength, 0.0..1.0 (frequency-separation / bilateral).
Parameters
amountdoublerequiredSmoothing strength, 0.0..1.0 (0 = off).
Returns: Future<void> — Completes when applied.
setWhiteningmethodasyncFuture<void> setWhitening(double amount)Whitening / brightness strength, 0.0..1.0.
Parameters
amountdoublerequiredWhitening strength, 0.0..1.0 (0 = off).
Returns: Future<void> — Completes when applied.
setFiltermethodasyncFuture<void> setFilter(String? lutAssetKey, {double intensity = 1.0})Apply a LUT color filter by key (null clears it). See VideoEffectsFilters.
Parameters
lutAssetKeyString?requiredFilter key (e.g. 'warm'), or null to clear.
intensitydoubleDefault = 1.0Blend amount, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setBackgroundBlurmethodasyncFuture<void> setBackgroundBlur(double amount)Background-blur strength, 0.0..1.0 (selfie segmentation + blur).
Parameters
amountdoublerequiredBlur strength, 0.0..1.0 (0 = off).
Returns: Future<void> — Completes when applied.
setGlowmethodasyncFuture<void> setGlow(double amount)Soft glow / bloom (Orton) strength, 0.0..1.0. The highest-impact beauty color post effect.
Parameters
amountdoublerequiredGlow strength, 0.0..1.0 (0 = off).
Returns: Future<void> — Completes when applied.
setGrainmethodasyncFuture<void> setGrain(double amount)Film-grain amount, 0.0..1.0 (animated per frame).
Parameters
amountdoublerequiredGrain amount, 0.0..1.0 (0 = off).
Returns: Future<void> — Completes when applied.
setVignettemethodasyncFuture<void> setVignette(double amount)Vignette strength, 0.0..1.0 (darkens frame corners).
Parameters
amountdoublerequiredVignette strength, 0.0..1.0 (0 = off).
Returns: Future<void> — Completes when applied.
setTextureDetailmethodasyncFuture<void> setTextureDetail(double amount)Pore/texture retained by frequency-separation smoothing, 0.0..1.0 (0 = plastic, 1 = full texture). Only affects skin when smoothing > 0.
Parameters
amountdoublerequiredTexture retention, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setClaritymethodasyncFuture<void> setClarity(double amount)Local-contrast clarity, signed -1.0..1.0. Positive = punchy/pop, negative = soft dreamy skin. 0 = off.
Parameters
amountdoublerequiredSigned clarity, -1.0..1.0.
Returns: Future<void> — Completes when applied.
Skin retouch & tone
Selective brightening (teeth/eye/under-eye) and skin-tone presets/shift.
setTeethWhiteningmethodasyncFuture<void> setTeethWhitening(double amount)Teeth-whitening strength, 0.0..1.0 (0 = off).
Parameters
amountdoublerequiredTeeth-whitening strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setEyeBrighteningmethodasyncFuture<void> setEyeBrightening(double amount)Eye-white (sclera) brightening, 0.0..1.0 (0 = off).
Parameters
amountdoublerequiredEye-white brightening strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setUnderEyeBrighteningmethodasyncFuture<void> setUnderEyeBrightening(double amount)Under-eye (tear-trough) brightening, 0.0..1.0 (0 = off).
Parameters
amountdoublerequiredUnder-eye brightening strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setSkinColormethodasyncFuture<void> setSkinColor(String? presetKey)Apply a skin-tone preset by key (null clears it). See VideoEffectsSkinTones.
Parameters
presetKeyString?requiredSkin-tone preset key (e.g. 'nuanbai'), or null to clear.
Returns: Future<void> — Completes when applied.
setSkinToneShiftmethodasyncFuture<void> setSkinToneShift(double amount)Skin-tone shift, signed -1.0..1.0: warms (+) or cools (-) skin via hue rotation gated by the adaptive skin mask. 0 = off.
Parameters
amountdoublerequiredSigned skin-tone shift, -1.0..1.0.
Returns: Future<void> — Completes when applied.
setSegmentationSkinmethodasyncFuture<void> setSegmentationSkin(bool enabled)Use multiclass segmentation to refine the skin region so skin effects apply to actual skin. Loads a larger/slower model. Default off.
Parameters
enabledboolrequiredWhether segmentation-refined skin masking is on.
Returns: Future<void> — Completes when applied.
Makeup, sculpt & reshape setters
Landmark-driven makeup recolor, dodge/burn sculpt, and liquify reshape.
setEyeColormethodasyncFuture<void> setEyeColor(String? hex, {double opacity = 0.5})Recolor the iris with hex (e.g. '#3366CC', null clears it).
Parameters
hexString?requiredIris color hex, or null to clear.
opacitydoubleDefault = 0.5Recolor strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setLipstickmethodasyncFuture<void> setLipstick(String? hex, {double opacity = 0.6, String finish = 'satin', String style = 'full'})Apply lipstick in hex (null clears it). finish: matte/satin/gloss. style: full/ombre/blurred.
Parameters
hexString?requiredLipstick color hex, or null to clear.
opacitydoubleDefault = 0.6Strength, 0.0..1.0.
finishStringDefault = 'satin'matte, satin, or gloss.
styleStringDefault = 'full'full, ombre, or blurred.
Returns: Future<void> — Completes when applied.
setEyeshadowmethodasyncFuture<void> setEyeshadow(String? hex, {double opacity = 0.45, String? color2, double shimmer = 0})Apply eyeshadow in hex (null clears it). color2 gives a two-tone gradient; shimmer adds sparkle.
Parameters
hexString?requiredEyeshadow color hex, or null to clear.
opacitydoubleDefault = 0.45Strength, 0.0..1.0.
color2String?Default = nullSecond hex for a two-tone (darker lash-line) gradient.
shimmerdoubleDefault = 0Sparkle amount, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setBlushmethodasyncFuture<void> setBlush(String? hex, {double opacity = 0.4})Apply blush in hex (null clears it).
Parameters
hexString?requiredBlush color hex, or null to clear.
opacitydoubleDefault = 0.4Strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setEyelinermethodasyncFuture<void> setEyeliner(String? hex, {double opacity = 0.7, String style = 'classic'})Apply eyeliner in hex (null clears it). style: classic or wing (adds an outer flick).
Parameters
hexString?requiredEyeliner color hex, or null to clear.
opacitydoubleDefault = 0.7Strength, 0.0..1.0.
styleStringDefault = 'classic'classic or wing.
Returns: Future<void> — Completes when applied.
setMakeupLookmethodasyncFuture<void> setMakeupLook(MakeupLook? look)Apply a coordinated MakeupLook in one call (lipstick + finish, eyeshadow, blush, eye color). Null clears all makeup regions. See VideoEffectsMakeup.looks.
Parameters
lookMakeupLook?requiredThe look to apply, or null to clear all makeup.
Returns: Future<void> — Completes when applied.
setContourmethodasyncFuture<void> setContour(double amount)Contour (cool-gray cheek/nose burn) strength, 0.0..1.0 (0 = off).
Parameters
amountdoublerequiredContour strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setHighlightmethodasyncFuture<void> setHighlight(double amount)Highlight (warm-white dodge on high points) strength, 0.0..1.0 (0 = off).
Parameters
amountdoublerequiredHighlight strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setEyeEnlargemethodasyncFuture<void> setEyeEnlarge(double amount)Eye-enlarge reshape strength, 0.0..1.0 (0 = off).
Parameters
amountdoublerequiredEye-enlarge strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setFaceSlimmethodasyncFuture<void> setFaceSlim(double amount)Face-slim reshape strength, 0.0..1.0 (0 = off).
Parameters
amountdoublerequiredFace-slim strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setNoseNarrowmethodasyncFuture<void> setNoseNarrow(double amount)Nose-narrow reshape strength, 0.0..1.0 (0 = off).
Parameters
amountdoublerequiredNose-narrow strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setLipPlumpmethodasyncFuture<void> setLipPlump(double amount)Lip-plump reshape strength, 0.0..1.0 (0 = off).
Parameters
amountdoublerequiredLip-plump strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
setChinShortenmethodasyncFuture<void> setChinShorten(double amount)Chin-shorten reshape strength, 0.0..1.0 (0 = off).
Parameters
amountdoublerequiredChin-shorten strength, 0.0..1.0.
Returns: Future<void> — Completes when applied.
Accessories setters
Toggle landmark-positioned PNG overlays. One toggle per accessory.
setGlassesmethodasyncFuture<void> setGlasses(bool enabled)Toggle the glasses accessory overlay.
Parameters
enabledboolrequiredWhether the glasses overlay is shown.
Returns: Future<void> — Completes when applied.
setSunglassesmethodasyncFuture<void> setSunglasses(bool enabled)Toggle the sunglasses accessory overlay.
Parameters
enabledboolrequiredWhether the sunglasses overlay is shown.
Returns: Future<void> — Completes when applied.
setCrownmethodasyncFuture<void> setCrown(bool enabled)Toggle the crown accessory overlay.
Parameters
enabledboolrequiredWhether the crown overlay is shown.
Returns: Future<void> — Completes when applied.
setCatEarsmethodasyncFuture<void> setCatEars(bool enabled)Toggle the cat-ears accessory overlay.
Parameters
enabledboolrequiredWhether the cat-ears overlay is shown.
Returns: Future<void> — Completes when applied.
setFlowerCrownmethodasyncFuture<void> setFlowerCrown(bool enabled)Toggle the flower-crown accessory overlay.
Parameters
enabledboolrequiredWhether the flower-crown overlay is shown.
Returns: Future<void> — Completes when applied.
setPartyHatmethodasyncFuture<void> setPartyHat(bool enabled)Toggle the party-hat accessory overlay.
Parameters
enabledboolrequiredWhether the party-hat overlay is shown.
Returns: Future<void> — Completes when applied.
setBunnyEarsmethodasyncFuture<void> setBunnyEars(bool enabled)Toggle the bunny-ears accessory overlay.
Parameters
enabledboolrequiredWhether the bunny-ears overlay is shown.
Returns: Future<void> — Completes when applied.
setMustachemethodasyncFuture<void> setMustache(bool enabled)Toggle the mustache accessory overlay.
Parameters
enabledboolrequiredWhether the mustache overlay is shown.
Returns: Future<void> — Completes when applied.
setHalomethodasyncFuture<void> setHalo(bool enabled)Toggle the halo accessory overlay.
Parameters
enabledboolrequiredWhether the halo overlay is shown.
Returns: Future<void> — Completes when applied.
Built-in UI
Drop-in bottom sheet that drives a processor with Beauty/Filters/Makeup/Accessories tabs.
VideoEffectsSheetclassclass VideoEffectsSheetSelf-contained beauty & filters bottom sheet (Beauty / Filters / Makeup / Accessories tabs) that drives a VideoEffectsProcessor. Dark over-video styling; accent from theme primary; auto Arabic labels.
VideoEffectsSheet.showmethodasyncstatic Future<void> show(BuildContext context, {required VideoEffectsProcessor processor, double heightFactor = defaultHeightFactor})Opens the beauty & filters sheet for processor. Turns the master switch on (idempotent), then shows a modal bottom sheet. Returns when dismissed.
Parameters
contextBuildContextrequiredBuild context to show the modal in.
processorVideoEffectsProcessorrequiredThe processor the sheet controls.
heightFactordoubleDefault = defaultHeightFactor (0.25)Sheet height as a fraction of screen height.
Returns: Future<void> — Completes when the sheet is dismissed.
defaultHeightFactorpropertystatic const double defaultHeightFactor = 0.25Default sheet height as a fraction of the screen height (1/4).
Returns: double — 0.25
Catalogs (filters, skin tones, accessories, makeup)
Pure-data catalogs of bundled LUT filters, skin-tone presets, accessories, and makeup shades/looks.
VideoEffectsFiltersclassclass VideoEffectsFiltersCatalog of bundled LUT color filters (45+ entries). Static-only (private constructor).
VideoEffectsFilters.allpropertystatic const List<VideoEffectFilter> allAll bundled LUT filters, in display order (fresh, night, autumn, clean_girl, teal_orange, etc.).
Returns: List<VideoEffectFilter> — Bundled filter catalog.
VideoEffectsFilters.assetFormethodstatic String? assetFor(String? key)The LUT asset path for a filter key, or null for an unknown/cleared key.
Parameters
keyString?requiredFilter key to resolve.
Returns: String? — Asset path or null.
VideoEffectsFilters.previewFormethodstatic String previewFor(String? key)Preview thumbnail asset path for a filter key (portrait with filter applied). Null gives the unfiltered 'none' preview.
Parameters
keyString?requiredFilter key, or null for the 'none' preview.
Returns: String — Preview asset path.
VideoEffectsFilters.skinPreviewFormethodstatic String skinPreviewFor(String? key)Preview thumbnail asset path for a skin-tone preset (same portrait, skin LUT grade).
Parameters
keyString?requiredSkin-tone key, or null for the 'none' preview.
Returns: String — Preview asset path.
VideoEffectFilterclassclass VideoEffectFilter { const VideoEffectFilter(this.key, this.label, this.asset); }A bundled LUT color filter: stable key, human label, and 512x512 LUT PNG asset path.
Parameters
keyStringrequiredStable key passed to setFilter, e.g. 'fresh'.
labelStringrequiredHuman-readable label, e.g. 'Fresh'.
assetStringrequiredPackaged asset path of the LUT PNG.
VideoEffectsSkinTonesclassclass VideoEffectsSkinTonesCatalog of bundled skin-tone presets (Warm/Cool/Pink/Wheat/Tan). Static-only. Has all (List<VideoEffectSkinTone>) and byKey(String?).
VideoEffectsSkinTones.byKeymethodstatic VideoEffectSkinTone? byKey(String? key)Look up a skin-tone preset by key, or null for unknown/null.
Parameters
keyString?requiredSkin-tone preset key.
Returns: VideoEffectSkinTone? — Preset or null.
VideoEffectsAccessoriesclassclass VideoEffectsAccessoriesCatalog of bundled PNG accessories (glasses, crown, catEars, sunglasses, flowerCrown, partyHat, bunnyEars, mustache, halo). Static-only.
VideoEffectsAccessories.allpropertystatic const List<VideoEffectAccessory> allAll bundled accessories, each with a key matching the EffectsState toggle.
Returns: List<VideoEffectAccessory> — Accessory catalog.
VideoEffectsAccessories.assetFormethodstatic String? assetFor(String? key)The PNG asset path for an accessory key, or null for an unknown key.
Parameters
keyString?requiredAccessory key to resolve.
Returns: String? — Asset path or null.
VideoEffectsMakeupclassclass VideoEffectsMakeupCurated makeup shades + full looks. Static-only. Exposes lipstick, eyeshadow, blush, eyeColor (List<MakeupShade>) and looks (List<MakeupLook>).
VideoEffectsMakeup.lookspropertystatic const List<MakeupLook> looksCoordinated full looks (lip + eyeshadow + blush [+ eye color]): natural, glam, soft_rose, bold_berry, sunkissed, smoky_night.
Returns: List<MakeupLook> — Curated full looks.
VideoEffectsMakeup.lookByKeymethodstatic MakeupLook? lookByKey(String? key)Look up a coordinated MakeupLook by key, or null for unknown/null.
Parameters
keyString?requiredLook key.
Returns: MakeupLook? — Look or null.
Models & data types
Immutable state snapshot, catalog item types, and telemetry/parity result types.
EffectsStateclassclass EffectsState { const EffectsState({bool enabled = false, double smoothing = 0, ... bool halo = false}); }Immutable snapshot of active video-effect settings (~50 fields: enabled, smoothing, whitening, filterKey/filterIntensity, makeup hex+opacity, sculpt/reshape scalars, accessory bools). All intensities normalized 0.0..1.0.
Parameters
enabledboolDefault = falseMaster switch.
smoothingdoubleDefault = 0Skin-smoothing strength.
filterKeyString?Default = nullActive LUT filter key, or null.
filterIntensitydoubleDefault = 1.0Blend amount for filterKey.
……Plus whitening, glow, grain, vignette, clarity, makeup hex/opacity fields, reshape/sculpt scalars, and accessory bools.
copyWithmethodEffectsState copyWith({bool? enabled, double? smoothing, Object? filterKey = _unset, ...})Returns a copy with the given fields changed. Nullable fields use an _unset sentinel so passing null clears (vs leaving unchanged).
Parameters
……Any subset of EffectsState fields to override.
Returns: EffectsState — A new modified state.
toMapmethodMap<String, dynamic> toMap()Serialized form sent to the native pipeline over the method channel.
Returns: Map<String, dynamic> — All effect fields as a map.
VideoEffectSkinToneclassconst VideoEffectSkinTone(this.key, this.label, this.skinAsset, this.bgAsset)A skin-tone preset (dual-LUT grade): a skin LUT over skin regions plus a background LUT elsewhere.
Parameters
keyStringrequiredStable preset key, e.g. 'nuanbai'.
labelStringrequiredHuman label, e.g. 'Warm'.
skinAssetStringrequiredSkin-region LUT asset path.
bgAssetStringrequiredBackground LUT asset path.
VideoEffectAccessoryclassconst VideoEffectAccessory(this.key, this.label, this.asset)A landmark-positioned PNG accessory overlay.
Parameters
keyStringrequiredStable key matching the EffectsState toggle, e.g. 'glasses'.
labelStringrequiredHuman-readable label.
assetStringrequiredPackaged transparent PNG asset path.
MakeupShadeclassconst MakeupShade(this.key, this.label, this.hex, this.opacity)A curated makeup shade: a hex color plus recommended opacity for one region. Feed hex+opacity into the matching setter.
Parameters
keyStringrequiredStable key, e.g. 'classic_red'.
labelStringrequiredHuman label, e.g. 'Classic Red'.
hexStringrequired#RRGGBB color.
opacitydoublerequiredRecommended strength, 0.0..1.0.
MakeupLookclassconst MakeupLook(this.key, this.label, {String? lipstick, double lipstickOpacity = 0.6, String lipFinish = 'satin', String? eyeshadow, ...})A full makeup look bundling coordinated shades across regions. Apply with setMakeupLook. Has a preview getter for the thumbnail asset path.
Parameters
keyStringrequiredStable look key.
labelStringrequiredHuman label.
lipstickString?Default = nullLipstick hex.
lipFinishStringDefault = 'satin'matte, satin, or gloss.
eyeshadowString?Default = nullEyeshadow hex (plus blush, eyeColor, and per-region opacities).
EffectsPerfStatsclassclass EffectsPerfStats { const EffectsPerfStats({required int frames, ... required double frameMs}); }Immutable snapshot of native frame-budget telemetry: frame counts, over-budget/over-frame counts, raise/lower events, per-level frames, mean/p50/p95/p99/max ms, histogram bins, device tier, and budget/frame thresholds.
Parameters
framesintrequiredTotal frames timed since last reset.
overBudgetintrequiredFrames slower than budgetMs.
……Plus overFrame, raiseEvents, lowerEvents, levelFrames, meanMs, maxMs, p50/p95/p99Ms, binMs, bins, tier, budgetMs, frameMs.
overBudgetRategetterdouble get overBudgetRateFraction of frames slower than budgetMs (0.0..1.0). The primary perf signal.
Returns: double — Over-budget fraction.
overFrameRategetterdouble get overFrameRateFraction of frames slower than frameMs — i.e. frames that actually dropped.
Returns: double — Dropped-frame fraction.
EffectsPerfStats.fromMapmethodstatic EffectsPerfStats? fromMap(Map<String, dynamic>? m)Builds a snapshot from the native channel map; null for a null/empty map.
Parameters
mMap<String, dynamic>?requiredNative telemetry map.
Returns: EffectsPerfStats? — Snapshot or null.
EffectsTestFrameclassconst EffectsTestFrame({required Uint8List rgba, required int width, required int height})Result of renderTestFrame: an RGBA8888 image produced by running a known input through the native color grade with current settings.
Parameters
rgbaUint8ListrequiredGraded pixels, RGBA8888 row-major, alpha opaque.
widthintrequiredImage width in pixels.
heightintrequiredImage height in pixels.
FrameDiffclassclass FrameDiff { const FrameDiff({required int maxDelta, required double meanDelta, required int pixels, required int diffPixels, required int threshold}); }A per-channel difference summary between two RGBA8888 buffers (pure Dart, offline-testable). Has diffFraction getter and a static compare().
Parameters
maxDeltaintrequiredLargest absolute per-channel delta (0..255).
meanDeltadoublerequiredMean absolute per-channel delta over RGB.
pixelsintrequiredTotal pixels compared.
diffPixelsintrequiredPixels differing by more than threshold.
thresholdintrequiredPer-channel delta counted as different.
FrameDiff.comparemethodstatic FrameDiff compare(Uint8List a, Uint8List b, {int threshold = 2})Compares two RGBA8888 buffers on RGB channels (alpha ignored). Returns a zeroed diff when sizes mismatch or are empty.
Parameters
aUint8ListrequiredFirst RGBA8888 buffer.
bUint8ListrequiredSecond RGBA8888 buffer.
thresholdintDefault = 2Per-channel delta above which a pixel counts as different.
Returns: FrameDiff — The difference summary.
Ready to build with UTD?
Create your account, fund your master wallet, and turn on the services you need.