Long Exposure Camera - fotojockovic.com/longexposure ==================================================== Turns a few seconds of video (live from the camera or a clip you already have) into one long-exposure photo: silky water, light trails, star trails, comet trails, people removal, darken. Everything runs in the browser; no picture or video leaves the device. Our own work (MIT): the alignment engine in src-rs/ compiled to wasm/lxalign.wasm (pyramidal inverse-compositional Lucas-Kanade on affine-predicted patches, reliability-weighted RANSAC homography with Gauss-Newton refinement, rolling-shutter residual mesh), the WebGL2 engine in engine.js (frame ring with asynchronous read-back, warping, the accumulators for mean / light / max / min / comet / running median / robust mean, GPU optical flow and the tile-max velocity motion fill, the develop shader with highlight roll-off, the keep-sharp mask), the MP4/MOV demuxer for WebCodecs (mp4demux.js), the EXIF writer (exif.js), the before/after video composer (bavideo.js), the UI, the texts and the translations. Everything else that ships to the browser: 1. mp4-muxer 5.2.2, Vanilagy - MIT. https://github.com/Vanilagy/mp4-muxer (mp4-muxer.js, used for the before/after MP4) MIT License Copyright (c) 2023 Vanilagy Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2. Sample clips (demo/*.mp4: cut, scaled and re-encoded to H.264; demo/*.jpg are stills and results made from them). Wikimedia Commons, both CC0 1.0 (public domain dedication, checked 2026-10-16): demo/waterfall.mp4 - "Mt Nimrod Scenic Reserve - Waterfall on Nimrod Stream (video)", David Nind, 2025 https://commons.wikimedia.org/wiki/File:Mt_Nimrod_Scenic_Reserve_-_Waterfall_on_Nimrod_Stream_(video).webm (first 4.6 s, handheld) demo/highway.mp4 - "Berlin Bundesautobahn 100 2026-03-25 mov04", LarsMueller, 2026 https://commons.wikimedia.org/wiki/File:Berlin_Bundesautobahn_100_2026-03-25_mov04.webm (first 10 s, handheld) og.jpg is made from these clips with this tool. 3. Fonts from Google Fonts (self-hosted), SIL Open Font License 1.1: Inter Tight (Rasmus Andersson et al.), Instrument Serif (Instrument). 4. Shared helpers of the fotojockovic.com tools (/static/tools/common/i18n.js, sheets.js, rail.js): our own. Language flags: simplified drawings made for these tools; the national flags are public-domain symbols. The Rust kernel has no third-party crates. No GPL code is shipped. No machine-learning model is used. Self-hosted web fonts (2026-10-19): Inter Tight, Instrument Serif. SIL Open Font License 1.1. The woff2 files are the ones Google Fonts serves (latin, latin-ext, cyrillic, greek subsets where the family has them), stored on our own server under /static/tools/common/fonts// with each family's licence text (OFL.txt) next to them; stylesheet /static/tools/common/fonts/ui.css. No font request goes to Google.