Photo Stone Maker - fotojockovic.com/stone ========================================== A photo and text on a sublimation photo stone / slate: eight stone types (rectangle, square, natural slate, one natural edge, heart, round, oval, arch, wooden frame) in the sizes of products.js, crop and zoom inside the stone's shape, text, a 3D preview, a 300 DPI print file (PNG, PDF with the outline on a non-printing layer, outline SVG, optionally mirrored) and mockups. Everything runs in the browser; no photo leaves the device. Our own work (MIT, Foto Jocković): the product definitions (products.js), the layout engine and stone outlines (layout.js), the procedural 3D stone (slab with chipped, layered edges; slate face, edge and back textures; wooden stand and frame, all generated from seeded noise at run time in src/view3d.js; no third-party models, textures, photos of stones or HDRIs), the studio lighting, the UI, texts and translations, og.jpg and the hub card pictures (rendered by this tool). The PNG (pHYs / sRGB), PDF (with an optional-content guide layer) and SVG writers are the site's shared /static/tools/common/printfile.js (also used by /mug). Product sizes: the names and sizes of a sublimation-blank supplier's "foto kamen" list were read (text only, no images) to choose realistic types and sizes; the 3D shapes are our own models (see products.js, [V]/[I] notes). Third-party code shipped to the browser: 1. three.js r186 (npm three 0.186.1), incl. OrbitControls and RoundedBoxGeometry 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. 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 stone). Rules in /static/tools/mug/fonts.css (shared with the mug maker). 3. Shared site code: /static/tools/common/i18n.js, rail.js, sheets.js, apphdr.js, printfile.js and the text-font list of /static/tools/mug/layout.js (Foto Jocković). Sample photos (not modified; thumbnails in img/ were made from them): wave.jpg Katsushika Hokusai, "Under the Wave off Kanagawa (The Great Wave)", The Metropolitan Museum of Art, Open Access, CC0 (/puzzle sample) 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) mountains.jpg "Cloudy Skies Over Mountains (Unsplash).jpg", Wikimedia Commons, CC0 1.0 (/collage sample) Build-time only (not shipped): esbuild (MIT); puppeteer-core (Apache-2.0) and ffmpeg for tests and images.