SVGA Preview

Compare one SVGA across six source-backed player profiles, frame by frame.

Upload a local .svga

Drop a file here or choose one. Processing stays in this browser.

Direct links only. The file host must allow browser CORS requests; no proxy is used.

Samples

Canvas settings

Background
Canvas size
Aspect ratio
Fit mode

File information

Dimensions
File size
Frames
FPS
Duration
Runtime memory
Bitmaps
Format

Compatibility report

Load an SVGA to run compatibility checks.

SVGA player compatibility matrix

Each cell shows the locked player version, verification status, implementation note, and source location used for this comparison.

CapabilitySVGAPlayer-WebOfficial playerRepositorySVGAPlayer-Web-LiteOfficial playerRepositoryAndroidSimulated (source-backed)RepositoryiOSSimulated (source-backed)RepositoryFlutterSimulated (source-backed)Repository
Version: svgaplayerweb@2.3.2 (a218cbe)Version: svga@2.1.1 (5a4ad9d)Version: master@662d0dc (2023-02-06)Version: SVGAPlayer 2.5.7 + master@2e469f1Version: svgaplayer_flutter@2.2.0 (de7de70)
Matte masks

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified partial

Matte composition is available when the matte source is the first sprite and follows the key convention.

Source: src/Canvas/renderer.js:117-153 - `matteSprites` / `destination-in`

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified unsupported

The Lite schema omits matteKey, so matte masks are not rendered.

Source: src/parser/svga-proto.ts:33-44 - `SpriteEntity` omits `matteKey`

Android / Version: master@662d0dc (2023-02-06)

Verified partial

Matte rendering requires Android API 21 or newer and a qualifying first sprite.

Source: library/src/main/java/com/opensource/svgaplayer/drawer/SVGACanvasDrawer.kt:38-58 - requires first `.matte` Sprite and Android API 21+

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Verified supported

The player installs matte content as a CALayer mask.

Source: Source/SVGAPlayer.m:194-220 - matte content is installed as a CALayer mask

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified unsupported

The painter does not consume matteKey, so matte masks are not rendered.

Source: lib/painter.dart:61-68 - `matteKey` read is commented out

.matte suffix requirement

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified supported

The renderer recognizes matte sources through the .matte marker in the image key.

Source: src/Canvas/renderer.js:122-127 - `imageKey.indexOf(".matte")`

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified unsupported

No matte path reads or applies the .matte suffix.

Source: src/player/render.ts:40-45 - sprites draw linearly without matte handling

Android / Version: master@662d0dc (2023-02-06)

Verified supported

The matte source image key must end with .matte.

Source: library/src/main/java/com/opensource/svgaplayer/drawer/SVGACanvasDrawer.kt:38-58 - `endsWith(".matte")`

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Verified supported

The matte source requires a .matte suffix.

Source: Source/SVGAPlayer.m:208-214 - matte source requires `.matte` suffix

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified unsupported

No active matte path checks the .matte suffix.

Source: lib/painter.dart:61-68 - painter never consumes `matteKey`

SVGA 1.x format

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified supported

The ZIP parsing path reads legacy movie.spec assets.

Source: src/mockWorker.js:108-127 - `_decodeAssets` reads `movie.spec` from ZIP

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified unsupported

The parser rejects files whose header is not SVGA version 2.

Source: src/parser/index.ts:46-48 - rejects every header except SVGA version 2

Android / Version: master@662d0dc (2023-02-06)

Verified supported

The ZIP parser includes a legacy movie.spec path.

Source: library/src/main/java/com/opensource/svgaplayer/SVGAParser.kt:276-291,434-459 - ZIP `movie.spec` path

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Verified supported

The ZIP cache can load legacy movie.spec data.

Source: Source/SVGAParser.m:128-164 - ZIP cache reads `movie.binary` or `movie.spec`

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified unsupported

The parser always inflates protobuf data and has no legacy ZIP path.

Source: lib/parser.dart:31-42 - unconditional zlib inflate then protobuf decode

Embedded audio playback

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified partial

Embedded audio uses the Howler path, so browser audio policy can still block autoplay.

Source: src/Canvas/renderer.js:59-82,244-267 - Howler-backed audio path

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified unsupported

Audio assets are skipped during parsing and never reach playback.

Source: src/parser/index.ts:50-53 - keys starting with `audio` are skipped

Android / Version: master@662d0dc (2023-02-06)

Verified supported

The video entity prepares embedded audio for playback.

Source: library/src/main/java/com/opensource/svgaplayer/SVGAVideoEntity.kt:192-207 - embedded audio setup

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Verified supported

Embedded data is passed to AVAudioPlayer.

Source: Source/SVGAAudioLayer.m:22-32 - AVAudioPlayer reads embedded data

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified unsupported

The package prepares images only and exposes no embedded audio playback path.

Source: lib/parser.dart:72-84; lib/player.dart - images only, no audio preparation or playback

Audio lookup from audios field

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified supported

Audio entries resolve data by the declared audioKey.

Source: src/Canvas/renderer.js:244-253 - `audios` entries look up `audio.audioKey`

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified unsupported

The decoded movie model omits the audios collection.

Source: src/parser/svga-proto.ts:290-310 - `MovieEntity` omits `audios`

Android / Version: master@662d0dc (2023-02-06)

Verified supported

Audio data is resolved from each declared audioKey.

Source: library/src/main/java/com/opensource/svgaplayer/SVGAVideoEntity.kt:229-240 - lookup by `audio.audioKey`

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Verified supported

Each audio item uses audioKey to find its data.

Source: Source/SVGAAudioLayer.m:27-30 - `audioItem.audioKey` indexes `audiosData`

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified unsupported

The player and painter do not read MovieEntity.audios.

Source: lib/player.dart; lib/painter.dart - no reads of `MovieEntity.audios`

Vector KEEP shapes

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified supported

KEEP frames reuse the last decoded vector shapes.

Source: src/frameEntity.js:56-136 - KEEP resolves to `FrameEntity.lastShapes`

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified supported

KEEP shapes are resolved from the previous shape set during parsing.

Source: src/parser/video-entity.ts:170-174 - KEEP reuses `lastShapes` during parsing

Android / Version: master@662d0dc (2023-02-06)

Verified supported

The parser replaces KEEP entries with the previous shape set.

Source: library/src/main/java/com/opensource/svgaplayer/entities/SVGAVideoSpriteEntity.kt:39-56 - parser replaces KEEP shapes

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Verified supported

The vector layer keeps a frame cache for KEEP shapes.

Source: Source/SVGAVectorLayer.m:37-85 - render-layer KEEP frame cache

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified supported

KEEP entries reuse the previous shape during parsing.

Source: lib/parser.dart:55-69 - KEEP is replaced with `lastShape` during parsing

Vector stroke styles

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified supported

Canvas rendering applies stroke width, cap, join, miter, and dash settings.

Source: src/Canvas/renderer.js:270-293 - stroke, width, cap, join, miter and dash

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified supported

Canvas rendering applies the decoded vector stroke styles.

Source: src/player/render.ts:134-155 - Canvas stroke styles are applied

Android / Version: master@662d0dc (2023-02-06)

Verified supported

Decoded vector shapes retain their stroke settings.

Source: library/src/main/java/com/opensource/svgaplayer/entities/SVGAVideoShapeEntity.kt:224-267 - stroke styles decoded

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Verified supported

CAShapeLayer receives the decoded stroke styles.

Source: Source/SVGAVectorLayer.m:307-356 - CAShapeLayer stroke styles applied

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified supported

The painter applies width, cap, join, miter, and dash settings.

Source: lib/painter.dart:174-231 - stroke width, cap, join, miter and dash

Bitmap sizing rule

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified supported

Embedded bitmaps draw at intrinsic dimensions instead of stretching to frame layout.

Source: src/Canvas/renderer.js:173-199 - embedded bitmap uses intrinsic `drawImage(img, 0, 0)`

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified supported

Bitmaps stretch to the frame layout width and height.

Source: src/player/render.ts:72-81 - bitmap draws to frame layout width and height

Android / Version: master@662d0dc (2023-02-06)

Verified supported

Bitmaps are pre-scaled to match the frame layout.

Source: library/src/main/java/com/opensource/svgaplayer/drawer/SVGACanvasDrawer.kt:221-229 - bitmap pre-scaled to layout

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Verified supported

Bitmap contents use frame bounds with aspect-fit resizing.

Source: Source/SVGAContentLayer.m:40-79; Source/SVGABitmapLayer.m:22-28 - layout bounds with resize-aspect contents

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified supported

drawImageRect targets the frame layout rectangle.

Source: lib/painter.dart:97-131 - `drawImageRect` targets frame layout

Non-PNG bitmaps

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified partial

PNG and JPEG signatures are accepted, but the forced PNG MIME path makes other formats uncertain.

Source: src/Canvas/renderer.js:42-55,177-179 - PNG/JPEG signatures accepted but PNG MIME forced

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified partial

ImageBitmap can decode multiple formats, while the fallback path remains PNG-only.

Source: src/parser/index.ts:54-58; src/player/index.ts:141-145 - generic ImageBitmap path, PNG-only fallback

Android / Version: master@662d0dc (2023-02-06)

Verified supported

Android BitmapFactory decodes the embedded byte array without a PNG-only gate.

Source: library/src/main/java/com/opensource/svgaplayer/bitmap/SVGABitmapByteArrayDecoder.kt:11-15 - generic `BitmapFactory.decodeByteArray`

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Verified supported

UIImage decodes embedded data without a PNG-only gate.

Source: Source/SVGAVideoEntity.m:173-181 - generic `UIImage initWithData` without PNG gate

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified supported

The generic image decoder has no PNG-only gate.

Source: lib/parser.dart:87-101 - generic `decodeImageFromList` without PNG gate

MovieParams resizeRatio

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified unsupported

The bundled MovieParams schema does not include field 5.

Source: src/proto.js:2 - `MovieParams` descriptor only contains fields 1 through 4

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified unsupported

The bundled MovieParams schema omits field 5.

Source: src/parser/svga-proto.ts:13-31 - `MovieParams` omits field 5

Android / Version: master@662d0dc (2023-02-06)

Verified unsupported

The generated MovieParams schema stops at field 4.

Source: library/src/main/java/com/opensource/svgaplayer/proto/MovieParams.java:186-213 - generated schema has fields 1 through 4 only

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Verified unsupported

The generated MovieParams schema stops at field 4.

Source: Source/pbobjc/Svga.pbobjc.h:136-140 - `MovieParams` fields stop at 4

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified unsupported

The generated MovieParams schema stops at field 4.

Source: lib/proto/svga.pb.dart:28-38 - `MovieParams` generated fields stop at 4

Playback fill mode

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified supported

Playback defaults to Forward fill mode.

Source: src/Canvas/player.js:8-10,189 - default `fillMode = "Forward"` drives animator fillRule

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified supported

Player configuration defaults to forwards fill mode.

Source: src/player/index.ts:37-47,84-87 - config defaults to `PLAYER_FILL_MODE.FORWARDS`

Android / Version: master@662d0dc (2023-02-06)

Verified supported

SVGAImageView defaults to Forward fill mode.

Source: library/src/main/java/com/opensource/svgaplayer/SVGAImageView.kt:29-47 - default `FillMode.Forward`

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Unverified

Completion reads fillMode, but the inspected initialization path does not set a default.

Source: Source/SVGAPlayer.m:60-63,377-383 - `fillMode` is read after completion but `initPlayer` does not initialize it

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified unsupported

SVGAImage exposes fit and clearing behavior, but no fillMode setting.

Source: lib/player.dart:16-45 - `SVGAImage` exposes fit and clearsAfterStop but no fillMode

Clear after stop

SVGAPlayer-Web / Version: svgaplayerweb@2.3.2 (a218cbe)

Verified supported

The player clears its canvas after animation completion by default.

Source: src/Canvas/player.js:8-10,206-210 - default true clears on animation end

SVGAPlayer-Web-Lite / Version: svga@2.1.1 (5a4ad9d)

Verified supported

Calling stop always clears the rendering container.

Source: src/player/index.ts:219-223 - `stop()` always calls `clearContainer()`

Android / Version: master@662d0dc (2023-02-06)

Verified supported

SVGAImageView keeps the final frame because clearing after stop defaults to false.

Source: library/src/main/java/com/opensource/svgaplayer/SVGAImageView.kt:40-47,66-70 - default false

iOS / Version: SVGAPlayer 2.5.7 + master@2e469f1

Verified supported

Player initialization enables clearing after stop.

Source: Source/SVGAPlayer.m:60-63 - `initPlayer` sets `clearsAfterStop = YES`

Flutter / Version: svgaplayer_flutter@2.2.0 (de7de70)

Verified supported

The completed state clears by default.

Source: lib/player.dart:37-45,173-176 - default true clears on completed status

Compare an SVGA in four steps

  1. Upload an SVGA file or paste a direct URL that allows cross-origin access.
  2. Choose two player profiles for a focused comparison.
  3. Drag the shared timeline to inspect the same frame on both sides.
  4. Review the compatibility report, then open the editor to repair confirmed issues.

SVGA preview questions

Why does my SVGA look correct on iOS but lose its mask on Web?

Matte support differs by player. Web-Lite omits matteKey entirely, while other players impose source-order or naming rules. Check the exact player column before changing the file.

Why must a matte layer end with .matte?

Several official renderers identify matte source layers through that suffix. SVGA DIY itself can match matteKey directly, so a file may look correct here and still fail elsewhere.

Why can SVGAPlayer-Web-Lite not play my file?

Web-Lite accepts SVGA 2.x protobuf files and omits several features, including matte masks and embedded audio. A legacy 1.x ZIP or unsupported feature can therefore fail or render differently.

Why is a decorative layer positioned differently across players?

Players do not all size embedded bitmaps the same way. Some use intrinsic pixels, some stretch to layout, and iOS uses an aspect-fit path. A layout and bitmap size mismatch exposes that difference.

Why is embedded audio silent in the browser?

Web-Lite and SVGA DIY do not play embedded audio. The full Web player can, but browser autoplay policy may still require a user gesture before sound starts.

Found a cross-player mismatch?

Open the same file in SVGA DIY to inspect layers, replace assets, and export a corrected version locally.

Open SVGA Editor