Flash & SWF Support

Paintapp includes a built-in SWF player that can open and play back .swf files directly in the canvas without any browser plugin. The player is a custom JavaScript implementation of the Flash runtime, covering the display list, ActionScript VMs, and several video codecs.

Adobe Flash Player reached end-of-life in December 2020 and is no longer distributed by browsers. Paintapp's SWF support lets you open and view legacy Flash content for archival and asset-extraction purposes.

SWF Format Versions

SWF files carry a version byte in their header (SWF 1 through SWF 43 covers the full commercial lifetime of Flash). Paintapp reads all versions — the version byte controls which ActionScript VM is used at runtime:

SWF versionFlash Player equivalentActionScript VM
1 – 8 Flash Player 1 – 8 AVM1 (ActionScript 1 & 2)
9 – 43 Flash Player 9 – 32 AVM2 (ActionScript 3)

SWF 9 and later files may also contain embedded AVM1 clips (DoAction tags). These are executed by the AVM1 sub-interpreter running alongside AVM2.

File Compression

A .swf file may be stored uncompressed or compressed in one of two ways. Paintapp opens all three.

CompressionUsed byStatus
Uncompressed SWF 1 and later Supported
Deflate (zlib) SWF 6 and later — the most common Supported
LZMA SWF 13 and later — published for Flash Player 11+ Supported

LZMA-compressed movies usually end up smaller than deflate-compressed ones.

ActionScript 1 / 2 — AVM1

AVM1 is a stack-based interpreter that executes bytecode from DoAction and DoInitAction tags. The implementation covers 89 opcodes including arithmetic, string operations, object property access, function calls, and control flow.

FeatureStatus
Core opcode set (89 opcodes)Supported
Function definitions (DefineFunction, DefineFunction2)Supported
with blocksSupported
Try / catch (partial)Partial
Variable scope chainPartial
GetURL / loadMovieLimited
SetTarget path navigationNot supported

ActionScript 3 — AVM2

AVM2 is a fully-featured bytecode VM with an explicit call stack, proper scope chains, exception handling, and namespace-aware multiname resolution. ABC (ActionScript Byte Code) blocks from DoABC / DoABCDefine tags are parsed into a constant pool, method table, and class hierarchy, then executed by the interpreter.

VM featureStatus
ABC bytecode interpreterSupported
Class definitions, inheritance, static membersSupported
Instance variables / slots, getters & settersSupported
Closures / nested functionsSupported
Exceptions (throw / try / catch / finally)Supported
Type coercions (coerce, convert_*)Supported
is / instanceofSupported
Namespaces / multinamesPartial
InterfacesPartial
for-in / for-each-inPartial
Vector.<T>Not supported
Debugger breakpoints (step-into / step-over)Supported
Workers (flash.system.Worker)Supported

Standard Library Coverage

The following flash.* packages are implemented (fully or partially). See the full support matrix below for a per-symbol breakdown.

PackageCoverage
flash.displayDisplayList, MovieClip, Sprite, Shape, Bitmap, Stage, Loader — mostly supported; some child-order and Stage focus APIs missing
flash.eventsEventDispatcher, Event, MouseEvent, broadcast events (enterFrame, addedToStage) — supported; KeyboardEvent, FocusEvent, TimerEvent not yet implemented
flash.geomPoint, Rectangle, Matrix, ColorTransform, Transform — core classes supported; 3D geometry (Vector3D, Matrix3D) not implemented
flash.utilsByteArray, Dictionary, Endian, setTimeout/setInterval/getTimer — supported; Timer class and AMF not implemented
flash.netURLLoader, URLRequest, NetConnection, NetStream, MessageChannel — partial; SharedObject, Socket not implemented
flash.systemSecurity, Capabilities, Worker, WorkerDomain — supported
flash.mediaVideo (partial); Sound and camera classes not implemented
flash.filtersBlurFilter (partial); other filters not implemented
flash.externalExternalInterface.available/addCallback/call — partial
flash.errorsStandard error classes — supported
flash.cryptogenerateRandomBytes — supported

AVM2 globals — Math, Array, String, Number, Boolean, int, uint, RegExp — are backed directly by JavaScript built-ins and are fully supported. Date and XML (E4X) are partially supported. Vector.<T> is not yet implemented.

SWF Tag Decoding

All commonly used SWF tags are decoded. Notable coverage:

Video Codecs

SWF video streams and embedded FLV content use Flash-specific codecs decoded in JavaScript:

CodecUsed inStatus
Sorenson H.263SWF video streams, FLVSupported
Screen Video (v1 & v2)SWF video streams, FLVSupported
On2 VP6 / VP6 with alphaFLVNot supported
H.264 / AAC in FLVFLVNot supported (browser Media Source used instead)

Rendering

The SWF display list is rendered into Paintapp's WebGL 2 canvas. Shapes are tessellated and uploaded as GPU geometry; bitmaps are uploaded as textures. Rendering features:

Full Support Matrix

A searchable, filterable table covering every flash.* class and SWF tag is maintained in the SWF module. Open it in a new tab:

swf/as3-support.html — AS3 API & SWF Tag Support Matrix

Known Limitations