.skyc (Skybrush, default export), .zip (CSV bundle, one file per drone), .mat (MATLAB), or .jsdm (JSON show file). Max 500 MB.Your intellectual property stays yours. SkyRender never claims ownership of uploaded show files. See our Privacy Policy.
Free during beta. Includes 12 months of QR hosting and unlimited revisions inside this project.
SkyRender accepts four formats. Pick whichever your tooling exports — they all produce the same .bin under the hood.
The default export from Skybrush Studio. No conversion needed — just drag the file Skybrush produces straight into the uploader. Trajectories (cubic-Bezier waypoints) and LED programs are both read directly from the archive.
Coordinate convention is whatever you set in Skybrush; altitude maps to the vertical axis in the player. Source rate is sampled at 30 fps internally; output runtime is 6 fps to match the iOS app.
Bundle every per-drone CSV into a single zip. Naming examples: Drone 1.csv, drone_42.csv, 1.csv (any name with a digit before .csv works). Drones in nested folders are fine.
Each CSV must have this header and one row per frame at 30 fps (33 ms intervals):
Time [msec],x [m],y [m],z [m],Red,Green,Blue 0,14.34,-13.40,84.85,152,149,141 33,14.34,-13.40,84.85,152,149,141 66,14.36,-13.40,84.88,160,149,141 99,...
x/y/z in meters. RGB columns are 0–255 and optional — if missing, drones default to black (0, 0, 0).
Required variables: x, y, z — each a num_drones × num_frames matrix of floats. Optional: r, g, b (same shape, 0–255). Source sample rate: 30 fps.
% MATLAB example — 500 drones, 9000 frames (5 min @ 30 fps)
x = randn(500, 9000); % size: [num_drones × num_frames]
y = randn(500, 9000);
z = abs(randn(500, 9000));
r = uint8(255 * ones(500, 9000));
g = uint8( 0 * ones(500, 9000));
b = uint8( 0 * ones(500, 9000));
save('show.mat', 'x', 'y', 'z', 'r', 'g', 'b');
NaN positions are allowed for "not yet active" drones — we forward-fill from the first real frame.
A JSON-based drone show description. Export directly from your design tool — no edits needed. We parse planeCount + frameCount and walk pointFrames / channelFrames in time order.
{
"planeCount": 1200,
"frameCount": 6600,
"pointFrames": [
{ "time": 0, "points": [
{ "no": 1, "x": 0, "y": 0, "z": 0 },
{ "no": 2, "x": 1.5, "y": 0, "z": 0 }
]},
{ "time": 30, "points": [ ... ] }
],
"channelFrames": [
{ "time": 0, "channels": [
{ "no": 1, "c1": 255, "c2": 0, "c3": 0 },
{ "no": 2, "c1": 0, "c2": 255, "c3": 0 }
]}
]
}
no is 1-indexed drone number. c1/c2/c3 are R/G/B (0–255).
We'll email the QR with instructions to download the SkyRender app and scan it. Enter the client's email below.