Sialk plays two kinds of sketch today, and it names them. Anything else is refused by name rather than loaded and hoped over.
That refusal is deliberate. "Does it work with X?" used to be answerable only with probably, because a layer was "a file, or a folder that is already a page", which is a description of a shape, not a claim anyone can check. A named runtime can be tested in a minute and described in a sentence.
GLSL
A folder with a sketch.glsl in it. No page, no render loop, no
boilerplate - Sialk supplies all of that, and the audio as uniforms.
Dragging a .glsl file in directly works too; the folder is incidental.
Both dialects are accepted: GLSL ES 3.00 and GLSL ES 1.00, which is what most shaders on the internet still are. Sialk works out which one you wrote from what is in it.
p5
A folder with a sketch.js that declares setup() or draw().
That is global mode, the shape the p5 web editor produces and the shape nearly
every p5 sketch on the internet is in. Sialk supplies p5 itself, so your folder
needs no library, no index.html, and no network connection.
See writing a p5 sketch.
Video (arrives with v1)
A video file, or a folder with one video in it. .mp4, .m4v, .webm or
.mov - drop the clip itself on the window, or a folder holding it.
It is a layer, not a deck. Same opacity, blend, placement and parameters as any other layer, in the same stack as your sketches, which is the part a clip player cannot do. It also declares two of its own: Speed, which the music can drive, and Restart, which a beat can fire.
The codecs, plainly. H.264, HEVC, VP9 and AV1 play. HAP and ProRes do not - Sialk hosts your clip in a browser engine, and no browser decodes either. HAP is what most commercial VJ packs ship in, so if that is your footage, convert it first:
ffmpeg -i clip.mov -c:v libx264 -pix_fmt yuv420p -an clip.mp4
Transparency, and what to encode for a show
Use VP9 with alpha, in a .webm. A clip with a transparent background sits
over your sketches instead of covering them, which is most of what a clip is
worth in a stack.
Measured on an Apple M3 Max, at 60 fps, playing several copies at once, because a set is never one clip. 4K first, because that is the resolution a show runs at:
3840 × 2160 · frames per second per clip
| Encoding | Alpha | 1 | 2 | 4 | 6 |
|---|---|---|---|---|---|
| VP9 + alpha (webm) | yes | 60 | 60.1 | 58.8 | 58.4 |
| HEVC + alpha (mp4) | yes | 60 | 60.1 | 59.1 | 59.0 |
| VP8 + alpha (webm) | yes | 58.8 | 50.5 | 26.2 | 17.2 |
| H.264 (no alpha) | no | 60 | 60.2 | 59.7 | 60.2 |
1920 × 1080
| Encoding | 1 | 8 | 12 | Size (8 s) |
|---|---|---|---|---|
| VP9 + alpha | 60.4 | 60.4 | 60.7 | 15.4 MB |
| HEVC + alpha | 60.4 | 60.5 | 59.5 | 7.3 MB |
| VP8 + alpha | 60.4 | 42.8 | 28.6 | 8.1 MB |
| H.264 (no alpha) | 60.4 | 60.4 | 60.4 | 11.7 MB |
Alpha is close to free, even at 4K. Six simultaneous 4K clips with transparency hold 58-59 fps against H.264's 60 without it, a frame or two, for a channel that lets a clip sit over your sketches instead of covering them.
VP8 is the trap. It looks fine on one clip and has lost two thirds of its frame rate by six at 4K. That is the failure that appears on the night rather than in rehearsal, so do not use it.
HEVC with alpha matches VP9 and is smaller at 1080p, and it is the better choice if everything you play is on a Mac.
# VP9 with alpha - the one to standardise on
ffmpeg -i source.mov -c:v libvpx-vp9 -pix_fmt yuva420p -b:v 0 -crf 30 -row-mt 1 -an out.webm
# HEVC with alpha - smaller, macOS
ffmpeg -i source.mov -c:v hevc_videotoolbox -alpha_quality 0.9 -tag:v hvc1 -pix_fmt bgra -an out.mp4
Your source needs a real alpha channel to begin with, export ProRes 4444 or QuickTime Animation from your editor, then convert.
Those numbers are one machine, and a fast one. A venue laptop will be slower; what holds is the ordering, not the figures.
A folder holding two or more videos is not a video layer. Choosing between them silently is how a show plays the wrong thing in front of a room; point at the one you mean.
What is coming
Named, in the order they arrive:
- Three.js
- Cables.gl
- Rive
- Spline
Drop one of these on Sialk today and it will tell you it recognises the kind and that support is coming soon.
Deliberately without a version number. A version in a refusal is a promise made to you by a build that has already shipped, it cannot be corrected, and it will be quoted back. Coming soon says the only two things worth saying: it is not forgotten, and it is not today.
Why these two first
GLSL is the engine's own substrate, and the cheapest honest proof that the audio reaches a shader at 60 fps.
p5 has the largest community and the worst existing options for getting a
sketch onto a stage, and its compatibility claim is the crispest one available:
if your sketch.js declares setup or draw, it runs.
What about a web page?
A folder that is a whole web page, an index.html with its own scripts, is
not a kind. Sialk will list it and refuse to start it. A page is a platform,
not a runtime with a testable claim, and "we run web pages" is exactly the
promise that turns into probably.