Ambient loops for the full-screen pomodoro wallpapers and the app-wide ambient sound (lib/ambient-sound.ts, RECORDED_SOURCES). These are the "Recorded" option. The "Synth" option next to it is generated at runtime from filtered noise and oscillators, and has no assets and no licence question at all — which is why it exists and why it stays. Every scene has the synth, so nothing in the product depends on a file below. Seven of the eight scenes are listed here. **Alpha waves has no file and never will**: it is a 10 Hz binaural tone, so a "recording" of it would be this repo's own output rendered to mp3 — 1.4MB to say something the browser says for free, behind a button labelled "Recorded" that would then be a lie. Its entry in RECORDED_SOURCES is an explicit `null`, and the Synth / Recorded pair is hidden wherever that scene is selected. The licence lives with the assets, following public/world/LICENSE.txt and public/sounds/keyboard/LICENSE. ⚠️ TWO DIFFERENT SITUATIONS BELOW, AND THEY NEED DIFFERENT THINGS FROM YOU. rain / ocean / thunder — PROVENANCE INFERRED FROM THE ORIGINAL FILENAMES AND NOT VERIFIED against a download page or a receipt. Those licences are believed to permit commercial use without attribution, but nobody has confirmed that these specific files came from those sources. birds / fire / crickets / cafe — provenance verified (each was downloaded from the URL recorded below on 2026-09-16), and each is CREATIVE COMMONS BY: commercial use is allowed and the licence is irrevocable, but ATTRIBUTION IS REQUIRED. Credit is given on the page that plays them — see the "Sound credits" block under /pomodoro — and this file must stay reachable at https://mugup.app/ambient/LICENSE.txt. Removing either breaks the licence. None of them is ShareAlike, so nothing here attaches a condition to MugUp's own code. See docs/private/project-notes.md if a record ever gets made for the first three. -------------------------------------------------------------------------------- public/ambient/rain.mp3 Original: liecio-calming-rain-257596.mp3 Source: Pixabay (https://pixabay.com/sound-effects/) — the filename follows Pixabay's {contributor}-{title}-{id} convention; contributor "liecio", asset id 257596. Licence: Pixabay Content License (https://pixabay.com/service/license-summary/) — royalty-free, commercial use allowed, attribution not required. Edits: Trimmed 2.5s off the head and 4s off the tail (the original has a fade-in and a fade-out, so it does not loop as supplied), then self-crossfaded 3s to close the loop, then -7.0 dB to match the other two. 108.7s → 99.2s. Encoded 128 kbps CBR MP3, 44.1 kHz stereo. public/ambient/ocean.mp3 Original: mixkit-close-sea-waves-loop-1195.wav Source: Mixkit free sound effects (https://mixkit.co/free-sound-effects/) — filename follows Mixkit's mixkit-{name}-{id} convention, id 1195. Licence: Mixkit Free License (https://mixkit.co/license/#sfxFree) — commercial use allowed, attribution not required; reselling the sound itself as a standalone asset is not. Edits: Content untouched (it loops as supplied). -4.5 dB to match. Encoded 128 kbps CBR MP3, 44.1 kHz stereo. 29.0s. public/ambient/thunder.mp3 Original: mixkit-thunderstorm-and-rain-loop-2402.wav Source: Mixkit free sound effects, id 2402. As above. Licence: Mixkit Free License. As above. Edits: Content and level untouched — its thunder peaks reach -0.2 dBFS, so it is the one with no headroom, and the other two were matched down to it rather than it being raised. Encoded 128 kbps CBR MP3, 44.1 kHz stereo. 52.8s. public/ambient/birds.mp3 Original: Dawn_chorus_at_Glencairnie_big_bungalow_Craigmore_DM.ogg Title: "Dawn chorus at Glencairnie big bungalow Craigmore DM" Author: DivyaCM (https://commons.wikimedia.org/wiki/User:DivyaCM) Source: Wikimedia Commons, downloaded 2026-09-16 from https://commons.wikimedia.org/wiki/File:Dawn_chorus_at_Glencairnie_big_bungalow_Craigmore_DM.ogg Recorded 2025-04-27 near Craigmore, Kullakamby, Nilgiris, India. Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) — commercial use allowed, ATTRIBUTION REQUIRED, no ShareAlike. Edits: Took 80s from 0:09 (the evenest stretch of the 8-minute original — after 1:40 single birds come close to the mic and the level jumps 12 dB), high-passed at 90 Hz, self-crossfaded 3s to close the loop, +12.3 dB to -24 LUFS. Encoded 128 kbps CBR MP3, 44.1 kHz stereo. public/ambient/fire.mp3 Original: WWS_Bonfireburning.ogg Title: "Bonfire burning" — a Finnish Midsummer's eve bonfire Author: Work With Sounds / Werstas (https://commons.wikimedia.org/wiki/Commons:Work_With_Sounds) Source: Wikimedia Commons, downloaded 2026-09-16 from https://commons.wikimedia.org/wiki/File:WWS_Bonfireburning.ogg Licence: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) — commercial use allowed, ATTRIBUTION REQUIRED, no ShareAlike. Edits: Took 46s from 0:01.5, self-crossfaded 3s to close the loop, -0.1 dB to -24 LUFS. Encoded 128 kbps CBR MP3, 44.1 kHz stereo. The source has ~116 samples at or over full scale (intersample overs from the Vorbis decode); on broadband fire they are inaudible and the file is played far below unity anyway, so they were left alone rather than limited. public/ambient/crickets.mp3 Original: 823215AronowPlaceNocturnalInsects1059PM20210831032807.flac Title: "Aronow Pl, Mahwah, NJ 07430, USA — Nocturnal Insect Chorus" Author: SoundHunter, for radio aporee ::: maps Source: Internet Archive, downloaded 2026-09-16 from https://archive.org/details/aporee_54306_62112 Licence: CC BY 3.0 (https://creativecommons.org/licenses/by/3.0/) — commercial use allowed, ATTRIBUTION REQUIRED, no ShareAlike. Edits: Took 90s from 0:25, high-passed at 140 Hz (the original carries distant road rumble below that, and a cricket has no energy there), self-crossfaded 3s to close the loop, -6.6 dB to -24 LUFS. Encoded 128 kbps CBR MP3, 44.1 kHz stereo. public/ambient/cafe.mp3 Original: parissoleildor020115h00.mp3 Title: "75004 Paris, France — Paris café" Author: Vincent Duseigne, for radio aporee ::: maps Source: Internet Archive, downloaded 2026-09-16 from https://archive.org/details/aporee_42422_48382 Recorded 2019-01-02. Licence: CC BY 3.0 (https://creativecommons.org/licenses/by/3.0/) — commercial use allowed, ATTRIBUTION REQUIRED, no ShareAlike. Edits: Took 90s from 0:28, high-passed at 120 Hz (the room's own low hum, which a loop makes into a drone), self-crossfaded 3s to close the loop, +1.5 dB to -24 LUFS. Encoded 128 kbps CBR MP3, 44.1 kHz stereo. Note: Checked for background music before it was picked, because a café recording with a record playing in it would need a licence for the record as well as for the recording — no bin in the 150 Hz-4 kHz range is persistently prominent, so there is none. The murmur is in French, which for an English-speaking listener is the point: speech you can make out is the worst possible background for concentrating, and speech you cannot is just a room. -------------------------------------------------------------------------------- All seven are normalised to within 0.7 LU of each other (-23.8 / -24.2 / -24.4 / -24.4 / -24.5 / -24.3 / -24.4 LUFS integrated), so switching between them does not jump in volume. That matching is the reason for the gain edits above; if you replace a file, measure it with `ffmpeg -i -af ebur128 -f null -` and match it to -24 LUFS rather than normalising it to peak. The synth ambiences are matched to the same -24 by measurement too; the note on SYNTH_GAIN in lib/ambient-sound.ts says how, and it is worth reading before changing a gain in there. Every one of them loops without a click, and none of them does so by accident: the last 3 seconds of the source are faded into the first 3 of the kept clip, so sample 0 is literally the sample that followed the last one kept. That is the same construction as `makeSeamlessLoop` in lib/ambient-sound.ts, which does it at runtime for the synth noise, and the reason is the same — a 46-second loop with a discontinuity at the seam is an audible tick every 46 seconds.