Nyans — third-party notices =========================== Nyans’ own source is proprietary (see LICENSE). The notices below cover components that are redistributed in a *built* deployment of Nyans (the contents of `dist/`) or bundled as assets in this repository. They do not change the license of Nyans’ own source. These obligations attach to *distributing the built app*, not to publishing the source. Keeping this repository private does not remove them: every visitor who opens a camera RAW file is served the LibRaw WebAssembly module, and that is redistribution. The notices below must therefore stay reachable by users of the hosted app, independently of whether anyone can see this file — which is why this file is served at /NOTICE, linked from the status bar, and declared as in the document head. Naming a licence is not the same as supplying it, and the MIT, Apache-2.0 and LGPL-2.1 terms below all require the licence text itself to accompany the distribution. The full texts are therefore served from /licenses/, listed against each component below. The fonts are the exception: their licence has to travel with the font files, so it sits at /fonts/OFL.txt instead. /licenses/LibRaw-COPYRIGHT.txt /licenses/lcms2-MIT.txt /licenses/LibRaw-LGPL-2.1.txt /licenses/libjpeg-IJG.txt /licenses/LibRaw-CDDL-1.0.txt /licenses/libraw-wasm-ISC.txt /licenses/OpenColorIO-ACES-Apache-2.0.txt /licenses/assimpjs-MIT.txt /licenses/Assimp-BSD-3-Clause.txt /licenses/three-MIT.txt /licenses/fflate-MIT.txt /fonts/OFL.txt The marketing site at nyans.app is deployed separately and distributes its own copies of the fonts and its demo photograph; its notices are its own, at https://nyans.app/NOTICE. 1. LibRaw, via libraw-wasm (runtime dependency, code-split into dist/) ----------------------------------------------------------------------- `libraw-wasm` (https://github.com/ybouane/LibRaw-Wasm) declares ISC for its own JavaScript wrapper (/licenses/libraw-wasm-ISC.txt; the upstream repository ships no LICENSE file, so that declaration is the package metadata's). Nyans rebuilds its 1.6.0 release with Emscripten's supported `DYNAMIC_EXECUTION=0` and `EMBIND_AOT=1` settings so the wrapper does not require JavaScript `unsafe-eval`; the decoder source and behavior are otherwise unchanged. The WebAssembly module is a compiled build of LibRaw and its dependencies. Those carry their own licenses, and a deployment that serves `dist/assets/libraw-*.wasm` is redistributing them: * LibRaw (https://www.libraw.org/) — dual licensed; a user may choose either: - GNU Lesser General Public License, version 2.1 (/licenses/LibRaw-LGPL-2.1.txt), or - Common Development and Distribution License (CDDL), version 1.0 (/licenses/LibRaw-CDDL-1.0.txt). LibRaw's own copyright notice is at /licenses/LibRaw-COPYRIGHT.txt. Nyans makes no modifications to LibRaw. It is loaded as a separate, dynamically imported WebAssembly module and is replaceable, which is the relinking freedom LGPL 2.1 §6 asks for. * libjpeg (Independent JPEG Group) — "Copyright (C) 2024, Thomas G. Lane, Guido Vollbeding", statically linked into the same module. Terms at /licenses/libjpeg-IJG.txt. * Little CMS (lcms2) — MIT, statically linked into the same module. /licenses/lcms2-MIT.txt Both were confirmed present in the module rather than assumed: the build carries libjpeg's decoder diagnostics and lcms2's tag-serialisation symbols. libpng and zlib are *not* linked into this build, though a general libraw-wasm build can include them — checked because over-claiming a dependency and under-claiming one are both wrong, and only one of them is discoverable later. The module is fetched only when a user actually opens a camera RAW file. A build that never loads RAW never serves it. 2. Bundled sample images (public/samples/) -------------------------------------------- Developed from camera raw files published by RawDB (https://rawdb.dnglab.org/) under Creative Commons CC0 1.0 Universal (public domain dedication). CC0 requires no attribution; the credit line shown in Nyans’ viewport is a courtesy. birches — Sony SLT-A99 — CC0 1.0 hydrangea — Sony SLT-A65 — CC0 1.0 alps — Sony DSC-RX10M5 — CC0 1.0 RawDB hosts sets under CC0 1.0 *and* under CC BY-NC-SA 4.0. The latter is non-commercial and share-alike and must not be bundled here. Verify the `license` field of any set before adding a new sample: curl -s 'https://rawdb.dnglab.org/api/sets?maker=Sony' | grep license 3. Preset preview photograph ----------------------------- The preset browser uses a cropped and mildly tone-adjusted derivative of “Woman in Red Sweater Posing Next to Leaves” by Nino Sanger, downloaded from Pexels and served as /preset-preview-reference.jpg: https://www.pexels.com/photo/woman-in-red-sweater-posing-next-to-leaves-15102026/ Pexels permits free use and modification under the Pexels License. Attribution is not required by that license, but the photographer and source are credited both here and directly beneath the preset browser: https://www.pexels.com/license/ 4. Web fonts (redistributed — served from public/fonts/) ----------------------------------------------------------------------- Nyans no longer loads fonts from a CDN: an app whose promise is that nothing leaves your machine should not open a connection to a font host on startup. The two files below are therefore *redistributed* with the built app, which brings the OFL's obligations with them. * Geist and Geist Mono — SIL Open Font License 1.1 Copyright (c) 2023 Vercel, in collaboration with basement.studio https://github.com/vercel/geist-font The font files also carry a second copyright line in their name table (name ID 0), naming "The Geist Project Authors", alongside a licence declaration (name ID 13) and the OFL's URL (name ID 14). Both attributions are upstream's own; the text above is the header of upstream's LICENSE.txt, reproduced verbatim. Both are subset from the upstream variable fonts (geist@1.7.2 on npm — Geist Version 1.800, Geist Mono Version 1.700) to latin + latin-ext with the weight axis intact, by `tools/subset-fonts.py`. Subsetting is a modification, which the OFL permits; upstream's copyright line declares no Reserved Font Name, so the subsets keep the family names. That script retains every name record, which matters: pyftsubset drops name ID 13 by default, and a font that has lost it renders perfectly, so nothing catches the loss. The site's copies had lost it. `npm test` now fails if either app's subsets go stale against the vendored upstream. The full license text ships alongside them at `public/fonts/OFL.txt` and is served at /fonts/OFL.txt — the copy the OFL requires to travel with the font files. Name ID 13 is a declaration and a URL, not the text, so the served copy is doing real work rather than duplicating the binary. 5. ACES 2 and camera input transforms ------------------------------------- The compact runtime assets in `src/assets/aces2-sdr-33.f16` and `src/assets/camera-idt-2048.f16` are generated from the official OpenColorIO 2.5 builtin transform registry. They implement Academy Color Encoding System (ACES) 2.0 output transforms and camera input transforms for Apple, ARRI, Canon, Panasonic, RED and Sony log/gamut encodings. OpenColorIO and ACES core are distributed under the Apache License 2.0: * OpenColorIO — Copyright Contributors to the OpenColorIO Project (https://github.com/AcademySoftwareFoundation/OpenColorIO) * ACES core — Copyright Contributors to the ACES Project (https://github.com/aces-aswf/aces-core) License text at /licenses/OpenColorIO-ACES-Apache-2.0.txt. Apache-2.0 §4(a) requires it to accompany the distribution, which serving the generated .f16 assets is. 6. Browser-local 3D import and preview -------------------------------------- The model viewer is loaded only when a user opens a 3D scene. It never uploads the scene or its textures. Its code-split runtime consists of: * AssimpJS — MIT, Copyright (c) 2021 Viktor Kovacs (/licenses/assimpjs-MIT.txt). Nyans builds the bindings itself with Emscripten's `DYNAMIC_EXECUTION=0` and ahead-of-time Embind wrappers so the importer does not require JavaScript `unsafe-eval`. * Open Asset Import Library (Assimp) 6.0.5 — modified 3-clause BSD, Copyright (c) 2006-2026 assimp team. The same text includes the notice for Poly2Tri code compiled into the module (/licenses/Assimp-BSD-3-Clause.txt). Build provenance and exact hashes are recorded in `vendor/assimp-wasm/PROVENANCE.md`. * three.js — MIT, Copyright © 2010-2026 three.js authors (/licenses/three-MIT.txt). It renders the normalized scene into the live raster surface that Nyans grades. * fflate — MIT, Copyright (c) 2026 Arjun Barrett (/licenses/fflate-MIT.txt). It expands model packages locally when texture files are supplied beside the scene in a ZIP. 7. Development dependencies ---------------------------- Vite, TypeScript, Vitest and Wrangler are build-time only and are not redistributed in `dist/`.