Photo Mug Maker - fotojockovic.com/mug ====================================== Photos and text on a white 330 ml (11 oz) ceramic mug: placement (left, front, right, both sides, repeat, wrap-around), crop and zoom, text, a 3D preview, a 300 DPI print template (PNG, PDF), mockups and a turntable video. Everything runs in the browser; no photo leaves the device. Our own work (MIT, Foto Jocković): the product definitions (products.js), the layout engine (layout.js), the PNG (pHYs / sRGB) and PDF writers (export.js), the procedural 3D mug model, its studio lighting and contact shadow (src/view3d.js; no third-party models, textures or HDRIs), the UI, texts and translations, og.jpg and the hub card pictures (rendered by this tool). video.js is our own encoder helper, the same as /engraving's. Third-party code shipped to the browser: 1. three.js r186 (npm three 0.186.1), incl. OrbitControls from its examples, three.js authors - MIT. https://github.com/mrdoob/three.js Bundled and minified into view3d.js (loaded when the 3D view starts). Licence: LICENSE-three.txt 2. mp4-muxer (Vanilagy) - MIT. https://github.com/Vanilagy/mp4-muxer Only for the turntable video; the site's vendored copy in /static/tools/engraving/mp4-muxer.js (licence: /static/tools/engraving/LICENSE-mp4-muxer.txt). 3. Fonts (SIL Open Font License 1.1), self-hosted under /static/tools/common/fonts// with each OFL.txt: Inter Tight, Instrument Serif (UI); Montserrat, Playfair Display, Caveat, Pacifico, Lobster, Noto Sans (text on the mug). Rules in fonts.css. 4. Shared site code: /static/tools/common/i18n.js, rail.js, sheets.js, apphdr.js (Foto Jocković). Sample photos (not modified except where noted; thumbnails in img/ were made from them): img/pano.jpg a panoramic crop of "Cloudy Skies Over Mountains (Unsplash).jpg", Wikimedia Commons, CC0 1.0 (the /collage sample mountains.jpg) portrait.jpg "Smile with Freckles (Unsplash).jpg" by Gabriel Silverio, Wikimedia Commons, CC0 1.0 https://commons.wikimedia.org/wiki/File:Smile_with_Freckles_(Unsplash).jpg (/collage sample) butterfly.jpg "Agraulis vanillae at Isla Margarita.jpg", Wikimedia Commons, CC0 1.0 https://commons.wikimedia.org/wiki/File:Agraulis_vanillae_at_Isla_Margarita.jpg (/collage sample) wave.jpg Katsushika Hokusai, "Under the Wave off Kanagawa (The Great Wave)", The Metropolitan Museum of Art, Open Access, CC0 (/puzzle sample) Build-time only (not shipped): esbuild (MIT); puppeteer-core (Apache-2.0) and ffmpeg for tests and images.