From bdd508bfbb19aa980a5da37bbb5ad1fcde50360b Mon Sep 17 00:00:00 2001 From: Tal <83217276+talwat@users.noreply.github.com> Date: Sat, 9 Aug 2025 19:18:50 +0200 Subject: [PATCH] feat: chillhop scraper (#94) * feat: start work on chillhop scraper only the basic get request with caching has actually been implemented, but the rest shouldn't be too complicated. * feat: finish chillhop scraper * chore: remove vscode dir * chore: upload new chillhop list for comparison * fix: improve scraper and remove duplicates * style: reorganize release scan function slightly * fix: make lowfi compile on non-linux * feat: make scraper fully reproducable (hopefully) * chore: remove useless mut * feat: add scrape feature flag * chore: update deps * chore: i hate macos * chore: add .DS_Store to gitignore * fix: ignore two tracks with lyrics * fix: seperate get function from chillhop scraper * fix: linux audio output stream * chore: replace chillhop old list --- .gitignore | 2 + Cargo.lock | 346 ++++-- Cargo.toml | 22 +- data/chillhop.txt | 2505 +++++++++++++++++++++----------------- scripts/fix_cache.sh | 4 + src/main.rs | 14 +- src/player/audio.rs | 8 +- src/scrapers.rs | 76 +- src/scrapers/chillhop.rs | 221 ++++ src/scrapers/lofigirl.rs | 20 +- 10 files changed, 1981 insertions(+), 1237 deletions(-) create mode 100644 scripts/fix_cache.sh create mode 100644 src/scrapers/chillhop.rs diff --git a/.gitignore b/.gitignore index ea8c4bf..f5298cd 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ /target +/cache +.DS_Store \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index fd93975..059ecb2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,15 +29,15 @@ checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "ahash" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", - "getrandom", + "getrandom 0.3.3", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.8.26", ] [[package]] @@ -471,6 +471,19 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "console" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e09ced7ebbccb63b4c65413d821f2e00ce54c5ca4514ddc6b3c892fdbcbc69d" +dependencies = [ + "encode_unicode", + "libc", + "once_cell", + "unicode-width", + "windows-sys 0.60.2", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -609,9 +622,9 @@ checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" [[package]] name = "derive_more" -version = "0.99.18" +version = "0.99.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f" dependencies = [ "proc-macro2", "quote", @@ -672,9 +685,9 @@ dependencies = [ [[package]] name = "dtoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" +checksum = "d6add3b8cff394282be81f3fc1a0605db594ed69890078ca6e2cab1c408bcf04" [[package]] name = "dtoa-short" @@ -691,6 +704,12 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c6ba7d4eec39eaa9ab24d44a0e73a7949a1095a8b3f3abb11eddf27dbb56a53" +[[package]] +name = "encode_unicode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0" + [[package]] name = "encoding_rs" version = "0.8.35" @@ -949,9 +968,9 @@ dependencies = [ [[package]] name = "getopts" -version = "0.2.21" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +checksum = "cba6ae63eb948698e300f645f87c70f76630d505f23b8907cf1e193ee85048c1" dependencies = [ "unicode-width", ] @@ -964,7 +983,19 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", ] [[package]] @@ -1017,17 +1048,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] -name = "html5ever" -version = "0.29.0" +name = "html-escape" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e15626aaf9c351bc696217cbe29cb9b5e86c43f8a46b5e2f5c6c5cf7cb904ce" +checksum = "6d1ad449764d627e22bfd7cd5e8868264fc9236e07c752972b4080cd351cb476" +dependencies = [ + "utf8-width", +] + +[[package]] +name = "html5ever" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b7410cae13cbc75623c98ac4cbfd1f0bedddf3227afc24f370cf0f50a44a11c" dependencies = [ "log", "mac", "markup5ever", - "proc-macro2", - "quote", - "syn", + "match_token", ] [[package]] @@ -1297,6 +1335,19 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "indicatif" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" +dependencies = [ + "console", + "portable-atomic", + "unicode-width", + "unit-prefix", + "web-time", +] + [[package]] name = "ipnet" version = "2.10.1" @@ -1410,6 +1461,8 @@ dependencies = [ "dirs", "eyre", "futures", + "html-escape", + "indicatif", "lazy_static", "libc", "mpris-server", @@ -1417,6 +1470,8 @@ dependencies = [ "reqwest", "rodio", "scraper", + "serde", + "serde_json", "thiserror 2.0.12", "tokio", "unicode-segmentation", @@ -1440,9 +1495,9 @@ dependencies = [ [[package]] name = "markup5ever" -version = "0.14.0" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c88c6129bd24319e62a0359cb6b958fa7e8be6e19bb1663bc396b90883aca5" +checksum = "c7a7213d12e1864c0f002f52c2923d4556935a43dec5e71355c2760e0f6e7a18" dependencies = [ "log", "phf", @@ -1452,6 +1507,17 @@ dependencies = [ "tendril", ] +[[package]] +name = "match_token" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "memchr" version = "2.7.4" @@ -1490,7 +1556,7 @@ checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ "libc", "log", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -1839,7 +1905,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" dependencies = [ "phf_macros", - "phf_shared 0.11.3", + "phf_shared", ] [[package]] @@ -1848,18 +1914,8 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand", + "phf_generator", + "phf_shared", ] [[package]] @@ -1868,7 +1924,7 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" dependencies = [ - "phf_shared 0.11.3", + "phf_shared", "rand", ] @@ -1878,29 +1934,20 @@ version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" dependencies = [ - "phf_generator 0.11.3", - "phf_shared 0.11.3", + "phf_generator", + "phf_shared", "proc-macro2", "quote", "syn", ] -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher 0.3.11", -] - [[package]] name = "phf_shared" version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" dependencies = [ - "siphasher 1.0.1", + "siphasher", ] [[package]] @@ -1947,13 +1994,19 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "portable-atomic" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + [[package]] name = "ppv-lite86" version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -1989,6 +2042,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + [[package]] name = "rand" version = "0.8.5" @@ -2016,7 +2075,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] @@ -2034,7 +2093,7 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom", + "getrandom 0.2.15", "libredox", "thiserror 1.0.69", ] @@ -2120,7 +2179,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", @@ -2293,18 +2352,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -2313,9 +2372,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.135" +version = "1.0.142" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0d7ba2887406110130a978386c4e1befb98c674b4fba677954e4db976630d9" +checksum = "030fedb782600dcbd6f02d479bf0d817ac3bb40d644745b769d6a96bc3afc5a7" dependencies = [ "itoa", "memchr", @@ -2348,9 +2407,9 @@ dependencies = [ [[package]] name = "servo_arc" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae65c4249478a2647db249fb43e23cec56a2c8974a427e7bd8cb5a1d0964921a" +checksum = "204ea332803bd95a0b60388590d59cf6468ec9becf626e2451f1d26a1d972de4" dependencies = [ "stable_deref_trait", ] @@ -2402,12 +2461,6 @@ dependencies = [ "libc", ] -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - [[package]] name = "siphasher" version = "1.0.1" @@ -2459,26 +2512,25 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" [[package]] name = "string_cache" -version = "0.8.7" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" dependencies = [ "new_debug_unreachable", - "once_cell", "parking_lot", - "phf_shared 0.10.0", + "phf_shared", "precomputed-hash", "serde", ] [[package]] name = "string_cache_codegen" -version = "0.5.2" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" +checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", + "phf_generator", + "phf_shared", "proc-macro2", "quote", ] @@ -2702,7 +2754,7 @@ checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", "fastrand", - "getrandom", + "getrandom 0.2.15", "once_cell", "rustix", "windows-sys 0.59.0", @@ -2952,9 +3004,15 @@ checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.14" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" +checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c" + +[[package]] +name = "unit-prefix" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323402cff2dd658f39ca17c789b502021b3f18707c91cdf22e3838e1b4023817" [[package]] name = "untrusted" @@ -2985,6 +3043,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" +[[package]] +name = "utf8-width" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -3034,6 +3098,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" version = "0.2.99" @@ -3111,6 +3184,16 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "winapi" version = "0.3.9" @@ -3162,6 +3245,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + [[package]] name = "windows-registry" version = "0.2.0" @@ -3237,6 +3326,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.3", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -3276,13 +3374,30 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.0", + "windows_aarch64_msvc 0.53.0", + "windows_i686_gnu 0.53.0", + "windows_i686_gnullvm 0.53.0", + "windows_i686_msvc 0.53.0", + "windows_x86_64_gnu 0.53.0", + "windows_x86_64_gnullvm 0.53.0", + "windows_x86_64_msvc 0.53.0", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.42.2" @@ -3301,6 +3416,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -3319,6 +3440,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -3337,12 +3464,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -3361,6 +3500,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -3379,6 +3524,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -3397,6 +3548,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -3415,6 +3572,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" + [[package]] name = "winnow" version = "0.6.22" @@ -3424,6 +3587,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.6.0", +] + [[package]] name = "write16" version = "1.0.0" @@ -3539,7 +3711,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +dependencies = [ + "zerocopy-derive 0.8.26", ] [[package]] @@ -3553,6 +3734,17 @@ dependencies = [ "syn", ] +[[package]] +name = "zerocopy-derive" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zerofrom" version = "0.1.5" diff --git a/Cargo.toml b/Cargo.toml index 2220be4..594ed18 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,21 +19,18 @@ repository = "https://github.com/talwat/lowfi" [features] mpris = ["dep:mpris-server"] extra-audio-formats = ["rodio/default"] +scrape = ["dep:serde", "dep:serde_json", "dep:html-escape", "dep:scraper", "dep:indicatif"] [dependencies] # Basics clap = { version = "4.5.21", features = ["derive", "cargo"] } -eyre = { version = "0.6.12" } +eyre = "0.6.12" rand = "0.8.5" thiserror = "2.0.12" color-eyre = { version = "0.6.5", default-features = false } # Async -tokio = { version = "1.41.1", features = [ - "macros", - "rt-multi-thread", - "fs" -], default-features = false } +tokio = { version = "1.41.1", features = ["macros", "rt-multi-thread", "fs"], default-features = false } futures = "0.3.31" arc-swap = "1.7.1" @@ -48,9 +45,18 @@ mpris-server = { version = "0.8.1", optional = true } dirs = "5.0.1" # Misc -scraper = "0.21.0" Inflector = "0.11.4" lazy_static = "1.5.0" -libc = "0.2.167" url = "2.5.4" unicode-segmentation = "1.12.0" + +# Scraper +serde = { version = "1.0.219", features = ["derive"], optional = true } +serde_json = { version = "1.0.142", optional = true } +scraper = { version = "0.21.0", optional = true } +html-escape = { version = "0.2.13", optional = true } +indicatif = { version = "0.18.0", optional = true } + +[target.'cfg(target_os = "linux")'.dependencies] +libc = "0.2.167" + diff --git a/data/chillhop.txt b/data/chillhop.txt index be7387a..f7902cd 100644 --- a/data/chillhop.txt +++ b/data/chillhop.txt @@ -1,1132 +1,1375 @@ https://stream.chillhop.com/mp3/ -9476!Stan Forebee - Apple Juice -8448!Gyvus - Tôzen -8878!Deeb - Swiss -8603!Deeb - Like This One, & Then Some -8598!Deeb - Secret Meetings -8596!Deeb - Fluid Dynamics -8562!Deeb - Theme From Endless Sunset -8591!Deeb - Outskirts -8587!Deeb - Squba -8582!Deeb - The Story -8769!Flitz&Suppe - OdeToYou -8788!Philanthrope - Pueblo -8905!Knowmadic - Fade -8908!Gorila - Trouble -8941!Tesk - With You -8938!Tesk - Lego -8924!Tesk - Orbit -8935!Tesk - Thoughts -8932!Tesk - Lament -8931!Tesk - Moods -8927!Tesk - Doin It -8925!Tesk - Snapback -8922!Tesk - Green Stamps -8921!Tesk - Twrk -8917!Tesk - Floating Vibes -8914!Tesk - Waves -8912!Tesk - Sometimesoon -8909!Tesk - Tell Me -8943!Fujitsu - Wondering -8906!L'Indécis - Soundscapes -8421!L'Indécis - Wine & Roses -8469!L'Indécis - Interlude -8464!L'Indécis - Underwater -8221!L'Indécis - The Creator -8467!L'Indécis - Cloud Steps -8459!L'Indécis - Breathless -48099!L'Indécis - The God Behind The Pines -9026!L'Indécis - Staying There -48100!L'Indécis - Urban Canopy -9022!L'Indécis - Her -8990!Fujitsu - Spring Vale -9097!Fujitsu - Reefs -9094!Fujitsu - Driftwood -9091!Fujitsu - Motions -9089!Fujitsu - Azure -9131!Birocratic - Boys' Bop -8518!Philanthrope - The End -9154!Philanthrope - Heartburn -9151!Philanthrope - Rematch -8440!Philanthrope - Leavin' -9149!Philanthrope - Sodium -9146!Philanthrope - Frameworks, Pt.2 -9144!Philanthrope - Rebirth -9140!Philanthrope - RealEstate -9138!Philanthrope - Trust -8298!Philanthrope - Hope -9136!Philanthrope - Frameworks, Pt.1 -8780!Philanthrope - Flke -9133!Philanthrope - Clockwork -8122!Philanthrope - Blue -8533!Philanthrope - Birth -8940!Kupla - Saudade -8472!Kupla - Evening Tide -8947!Kupla - Nowhere Else -8942!Kupla - Trip To The Mountains -8944!Kupla - Mercadia -8950!Kupla - Can You See The Rhino In The Clouds? -8936!Kupla - Thoughts -8255!Kupla - Hold My Hand -8937!Kupla - New Beginnings -9213!invention_ - Farewell -8358!invention_ - There.Is.A.Place -47674!invention_ - T00.Mch_t00.Lttl -8661!invention_ - Albedo -8187!invention_ - Vscrl_ -9207!invention_ - Brzzy_bump -9109!invention_ - Imgnry -8415!invention_ - Raft -9205!invention_ - Hijack -9204!invention_ - Black[Ice] -9202!invention_ - Permafr0st -8960!invention_ - Dw3ll -9201!invention_ - Skyrate -8349!Kendall Miles - Isla Bella -8303!oddfish - Indelible -8730!Moose Dawa - Everydayluvin -9252!Moose Dawa - Yesorno -9249!Moose Dawa - Remember -8412!Moose Dawa - Nomatter -9246!Moose Dawa - Chances -9067!Moose Dawa - Backhome -9244!Moose Dawa - Menti -8748!Moose Dawa - Bravo -8929!Fujitsu - Steady -8470!j'san - Movie Scene -9194!Aso - Horizons Form From The Soul -8915!Aso - Requiem -9256!Aso - Sun Child -8911!Aso - Closer -8609!Aso - Seasons -8907!Aso - Dreamer -8757!Aso - Waiting On You -9260!invention_ - landrace -8160!Ruck P - Destination -8637!FloFilz - Smooth Wit' Any Groove -8450!L'Indécis - Playtime -9273!L'Indécis - Rekindling -8456!L'Indécis - Crossing Borders -8746!L'Indécis - Le Sud -8453!L'Indécis - Blind -8092!L'Indécis - Soulful -8457!L'Indécis - Check It Out -8286!blnkspc_ - Sticky -8497!cocabona - Daybreak -9276!Sarcastic Sounds - Runaway -9301!digitalluc - Float -9306!Gonza - Relax Your Mind -8183!Supertask - Divide -8926!Stan Forebee - Springside -9310!Distant.Lo - In Your Heart -8090!Seneca B - Sunshine -8181!Misha - Feel -8437!Oatmello - No Way Back -9313!Bao - 11 / Eleven -8545!Pandrezz - Exactly -8177!The BREED - Destiny -8964!The BREED - Apple Pie & Honey -8966!The BREED - Eggs Sunny Side Up -8972!The BREED - Go For A Blow -8175!The BREED - Chocolate Covered Dreams -8968!The BREED - Morning Love Affair -8961!The BREED - Smunchiiez -8970!The BREED - Funk Flowers -8172!The BREED - I Just Love Your Smile -8958!The BREED - Praliné -9257!Shy Cope - Drive Home -8407!Ben Bada Boom - Gaia -8446!L'Indécis - Passage -8170!Ian Ewing - LuvnYou -8441!SwuM - Nothing's Gonna Hurt U -8352!Cloudchord - Stay Puff -8355!Cloudchord - Silent Color -8350!Cloudchord - Smoke Patrol -8167!Cloudchord - Stevia Wonder -8356!Cloudchord - Sleep Shop -8165!Cloudchord - Aqui -8359!Cloudchord - Surf Report -8361!Cloudchord - Sentimental -8364!Cloudchord - Morning Crackle -8367!Cloudchord - 7th Inning Stretch -8118!Cloudchord - Too Young For Secrets -8162!Cloudchord - Noodlez -9269!Ruck P - Le Voyage Du Coeur -8157!Ruck P - As Long As I Got You -8540!Ruck P - 3UO -8956!Kupla - Tiger -9315!Feiertag - Sticks & Stones -8933!Evil Needle - Sunrise -8156!Masked Man - Coo Lullaby -8436!santpoort - you left a trace in the sand -8433!santpoort - the great ocean road -8431!santpoort - dune child -8429!santpoort - clay castle ruins -8176!santpoort - nomads of the sea -8055!santpoort - wading through the wetlands -8916!Cap Kendricks - Vino -8953!SwuM - this again.. -8767!Leavv - Home -8370!Leavv - Valley -8366!Leavv - Tomorrow -8362!Leavv - Meadow -8231!Leavv - Lacuna -9158!Leavv - Within -8354!Leavv - Mind Garden -8351!Leavv - Voyage -8374!Leavv - Lighthouse -8775!Sofasound - By The Shore -8425!Toonorth - Silience -8447!Es-K - Phase -8548!Ian Ewing - Fall Down - Instrumental -9262!Ian Ewing - Fall Down -8551!Monma - Fira -8494!Nymano - Gone Again -8489!Nymano - Evening Routine -8487!Nymano - Prom Night -8476!Nymano - Back Home -8151!Nymano - This Is Love -8078!Pandrezz - A Day at the Beach -8479!Nymano - Fireworks -8491!Nymano - Hometown -8484!Nymano - Train Station -8543!Smeyeul. - Distant Travels -8498!H.1 - Again -8770!C Y G N - Nobody Can See Me -8763!C Y G N - Love Is Weakness -8766!C Y G N - Mindfulness -8149!C Y G N - Cold Heart Women -8148!C Y G N - Heartbreak -8773!C Y G N - Remember -8274!C Y G N - Lazy Pacific -8144!C Y G N - Digital Sex -8768!C Y G N - White Cadillac -8141!C Y G N - All Your Love -8140!C Y G N - San Junipero -8760!C Y G N - Body N Soul -8481!Tesk - Hideout -8279!Jussi Halme - Brazil -8558!mommy - meadow -43868!mommy - dirty shoelace -9245!mommy - walnut -9238!mommy - light strands -9239!mommy - throwback port -9243!mommy - takoyaki promenade -8875!mommy - embrace -9247!mommy - everything you say -9242!mommy - soupeddd! -9236!mommy - thinking of you -8427!Harris Cole - Rosewood -7857!Delayde - Settled -7872!Delayde - Downtime -7901!Delayde - A Million Miles -8756!Sleepy Fish - Away with the Fairies -8473!sadtoi - Melting Ice -8781!Nokiaa - All Us -9372!Barnes Blvd. - Love from NGC 7318 -8554!Knowmadic - Faces -8005!drkmnd - Interstellar -8001!SwuM - The Dream -7998!SwuM - Stay. -7994!SwuM - Don't know why -7991!SwuM - Chinatown -7987!Yasper - Arcade -7984!Ouska - Alive -7979!Vhsceral - Fat Bao -7977!Tom Doolie - Lemon -7975!Moods - Where I Met You -7971!laqueus - Patio -7951!Swørn - Far Away -7948!Swørn - Flower -7945!Swørn - Protected -7943!Swørn - Butterfly -7969!less.people - noisy world -7965!less.people - Eternal now -7962!less.people - Oh Badu -7957!less.people - what will you do? -7953!j'san - Awakening -7939!Aso - Packing My Bags -7934!Aso - Sleeping In -7931!Aso - Home -7927!Aso - Leaving -7924!Aso - Thinking Chair -7920!Aso - Blankets -7915!Aso - B Urself -7912!Aso - Ur Ok -7909!Aso - moving in -9316!Loupo - I'm Ready -8207!Ruck P - Vibin' Out -8135!L'Indécis - Overnight -8128!L'Indécis - Flowing -8126!L'Indécis - Looking for the Sun -8123!L'Indécis - Sailing Through -8119!L'Indécis - Departure -8116!L'Indécis - Spleen & Malt -8112!L'Indécis - Arcade Mode -8111!L'Indécis - Sideways -8107!L'Indécis - From The Top -7828!L'Indécis - Big Blue -7825!L'Indécis - Overcome -7824!L'Indécis - Fried Potatoes -7821!L'Indécis - Second Wind -7818!L'Indécis - Intro -9471!Supertask - Stagnant -8019!blnkspc_ - Quietly -8094!Psalm Trees - Clocks Forward -7816!Toonorth - Effervescent -8104!Saib - Rainforest -8058!Saib - Coral Dreams -8099!Saib - Whale Call -8311!Allem Iversom - Pickt -8307!Allem Iversom - Gray -8312!Allem Iversom - Mr. Balloon Hands -8919!Allem Iversom - Action -8152!goosetaf - Timelapse -8902!goosetaf - Reminisce -8899!goosetaf - Memories -8179!goosetaf - Clouded Thoughts -8292!Evil Needle - Flow -8289!Evil Needle - Moonlight -8216!Evil Needle - Illusion -8285!Evil Needle - Wake up -8220!Evil Needle - On my mind -8697!Sofasound - Back to Life -7897!Middle School - Late Again -8281!Middle School - Plush Pocket -7889!Middle School - FrEsH -7898!Middle School - Power Lines -7895!Middle School - I Wish It Were (You) -7887!Middle School - Do You Want To Pretend We're In Love Sometime? -7892!Middle School - Helplessly -7902!Middle School - The Finish Line -7885!Yasper - Welcome Back -7883!Yasper - The Oldest Man In The Room -8975!Yasper - Moody -7879!Yasper - Hummus and Bread -7876!Yasper - Playful -7873!Yasper - Build -7869!Yasper - Nightwatch -7867!Yasper - Tips and Tricks -8904!weird inside - Be Alright -7865!cocabona - Howl -7862!Misha - Birds -7859!Misha - Drift -7858!cocabona - 6Th Station -7855!Monma - Black Garlic -7853!Monma - Through -7851!Misha - In The Sky -9268!Monma - Moon -7848!cocabona - Wonder -7845!Philanthrope - Searching -8410!Strehlow - Sadie -8411!Strehlow - Private Island -8414!Strehlow - Jupiter Moons -8418!Strehlow - Dream Girl -8420!Strehlow - Hibiscus Emoji -7839!Toonorth - New Light -7837!Toonorth - Lost Love -7834!Toonorth - Foggy Road -7832!Toonorth - Isolated -7830!Toonorth - Wistful -7842!Toonorth - Nimbus -7841!Toonorth - Chiaroscuro -8860!The Kount - Yo -8252!The Kount - Customs -8222!The Kount - Function -8856!The Kount - Place 2 Be -8369!The Kount - Yay -8323!junior state - Townie -8422!junior state - Persuasion -8206!junior state - Nice and Easy -8326!junior state - Levitate -9271!junior state - Mighty -8329!junior state - Nostalgic -7826!Ajmw - Back Home -7823!Ajmw - Whistle Song -7822!Ajmw - Hope -7820!Ajmw - Riviere -7819!Ajmw - Holwell -7817!Ajmw - Old Cartoons -7827!Ajmw - Ease Out -8854!Kupla - Moss -8851!Kupla - Coastal Town -8789!Kupla - Droplet -7937!Kupla - Tiny Sailboat -8225!Ian Ewing - 17 -8871!Ian Ewing - Meaux -8226!Ian Ewing - Rucker Park -7964!Ian Ewing - Like I Am -8230!Ian Ewing - Midnight -8785!Ian Ewing - Cambria -7815!Sleepy Fish - Our Reflection -7813!Sleepy Fish - Railways -7812!Sleepy Fish - Broken Clocks -7811!Sleepy Fish - Dandelion -7810!Sleepy Fish - Never Felt The Same -7809!Sleepy Fish - Through Walls -7808!Sleepy Fish - Forgot It Was Monday -7806!Sleepy Fish - Procrastinating -8866!Kyle McEvoy - Homecoming -8267!Kyle McEvoy - Bloom -8863!Kyle McEvoy - Tumble's Lullaby -8787!Kyle McEvoy - Onteora Lake -8784!Kyle McEvoy - Davita -8848!C Y G N - Ocean 5 -8240!C Y G N - Astro Love -8243!C Y G N - Dream About U -48102!C Y G N - La Plage -8245!C Y G N - Blue Sky -8248!C Y G N - I Can't Be There -8250!C Y G N - Missing You -8253!C Y G N - Feelin' Alright -48103!C Y G N - Let's Forget Things We Said -8254!C Y G N - Know About It -8256!C Y G N - Ocean Drive -7958!Miscél - Woods -9130!Miscél - Spring -9128!Miscél - Oceans -9126!Miscél - Love -8062!Miscél - Clouds -9504!Psalm Trees - Sombre -7805!Psalm Trees - Céleste -7804!Psalm Trees - Make You Hers -7803!Psalm Trees - Rain -9071!Dontcry - Eastway -9069!Dontcry - Tin Toys -9066!Dontcry - Purple -8465!Dontcry - Click -8065!dryhope - White Oak -9085!dryhope - Focus -9083!dryhope - Envision -8100!dryhope - Landing -9076!dryhope - One Reason -9494!Mr. Käfer - Subaquatic -9492!Mr. Käfer - Bus Taxi -9490!Mr. Käfer - Sun Sets -8910!Mr. Käfer - 223° -9501!Mr. Käfer - Blue Skys -9498!Mr. Käfer - Quiet Mornings -9497!Mr. Käfer - Celebrations -9070!Mr. Käfer - Under Leaves -8604!Aviino - Sleepwell -9485!Aviino - Dusk -9484!Aviino - Slowdrive -9446!Aviino - Quietly, Now -8321!Aviino - Loved -7880!Aviino - Get Up and Go -9488!Aviino - Goodmorning -8097!fantompower - My Own World -9025!fantompower - Self Affray -9023!fantompower - Where Home Is -9020!fantompower - Cloud Neon -9019!fantompower - Endless Ether -8864!fantompower - We Let Go -9065!fantompower - At Our Core -9062!fantompower - From Nothing -9035!xander. - My Love For Her -9033!xander. - Daydream -8306!xander. - Our Adventures -9337!xander. - Wistfulness -8113!xander. - Night Walk -10003!Moods - Breakfast w Bastien -10002!Moods - Vibe Vibe -9997!Moods - Demo 13 v2 -10001!Moods - Sofa Stories -10000!Moods - Pick Up -9041!No Spirit - Careless -9038!No Spirit - Slightly Improvised -8133!No Spirit - Something Warm -8508!No Spirit - Forest Lake Walk -8068!No Spirit - Morning In The Cafe -9055!Hanz - Forward -9053!Hanz - Slope -9051!Hanz - Bewildered -8264!Hanz - Leaving For Good -9048!Blue Wednesday - Embers -8131!Blue Wednesday - Dusk -9045!Blue Wednesday - Mother Nature -8930!Blue Wednesday - Cloud Dance -9049!Blue Wednesday - Island Boy -8102!Blue Wednesday - Into The Wind -8974!Arbour - Sundown -8036!Philanthrope - Ocean Patio -8115!Ward Wills - When To Say Goodbye -8718!Ward Wills - Can't Find the Words -9011!Ward Wills - Because I Was Lonely -9008!Ward Wills - Be Okay -8026!Ward Wills - Comfort -9014!Ward Wills - Tsuki's Tears -7988!Sleepy Fish - Velocities -8776!Aso - Caught In The Rain -8891!Allem Iversom - Awake -8837!B-Side - Never Forget -8657!fantompower - blankets -7980!Sleepy Fish - The Shore and You -8824!Miscél - Remember -8109!HM Surf - Apple Flower -7974!Sleepy Fish - Small Things -8991!G Mills - Blur -7919!yutaka hirasaka - Mirai -8567!Aso - Snug -9077!HM Surf - Horse Betting -7982!Sleepy Fish - Watercolor -7985!Sleepy Fish - Collages -7976!Sleepy Fish - Fireplace -7972!Sleepy Fish - Winter Winter -7968!Sleepy Fish - Nights Like These -7993!Sleepy Fish - Swimming -7990!Sleepy Fish - Sunbreak -8105!Sugi.wa - After Dark -8085!Psalm Trees - bringmesun -8134!weird inside - doing laundry -8200!G Mills - Cruisin' -8127!Toonorth - Far From Home -8075!invention_ - Hypnagogia -8288!invention_ - Sonar -8291!invention_ - Persist -9421!No Spirit - Peaceful Sleep -8388!No Spirit - Snacks Pt. 1 -9423!No Spirit - Aerials -9424!No Spirit - Pacific -9428!No Spirit - Let's Stay Inside -8027!brillion. - Hibernation -8023!Knowmadic - digital dreams -7843!mommy - polarbeer -8021!santpoort - rolling down this lazy wave -8033!Aso - by & by -8013!Miscél - In Time -7992!Nokiaa - Viaduct -8040!Allem Iversom - Wash -8039!Peter Bark - Ochre -8016!dryhope - Ever Forward -8030!mommy - Flashes of Calm -7997!SwuM - Faraway -8000!SwuM - Too Late -8002!SwuM - Dojo -8003!SwuM - Ukon -8010!SwuM - Swing For Me -8006!SwuM - Let It Go -8008!SwuM - Aries -7995!Sitting Duck - Fond Memories -9021!Psalm Trees - fiveyearsago -9459!sadtoi - A Beautiful Salad Bowl -8685!sadtoi - Dans la Salle à Manger -9450!sadtoi - Dessous -9451!sadtoi - Camille & Leo (interlude) -8810!sadtoi - Du Bassin au Muret -9454!sadtoi - 1999 -9324!sadtoi - Les Vacances -9455!sadtoi - Les Bonnes Choses -9367!Yasper - Birds Fly Higher Than The Moon -9401!goosetaf - Last Night -9203!xander. - Where We Met -9383!xander. - Warmer Days -9379!xander. - Awake -9377!xander. - Childhood Days -9374!xander. - Fog -9052!xander. - Warm Feeling -8815!xander. - Fate -9027!xander. - Times Ahead -9392!xander. - Life Is a Dream -9389!xander. - Wake Up -9385!xander. - Traveling Through Time -9360!Strehlow - Ocean Alley -9357!Strehlow - Crema Cafe -9352!Strehlow - Cocktail Hour -8607!Strehlow - Tamarind -9364!Strehlow - Central Coast -9355!Strehlow - Sails -8266!Strehlow - Lagoons -9363!Strehlow - Jazz Cabbage -9285!ØDYSSEE - Calm -9250!Delayde - Staring at the Sun -8547!Delayde - Little Spirit -7967!Delayde - Sundew -9320!Miscél - Wake Up -9305!Miscél - Need Someone -9322!Miscél - Inside -8147!Miscél - Fuzz -9280!Aiguille - Nightglow -9148!Aiguille - Nightfall -9278!Aiguille - Day and Night -9275!Aiguille - Daydream -9272!Aiguille - Daylight -9447!Clap Cotton - Vinho Verde -9219!Swørn - Growing Apart -7925!Swørn - Upset (hold it in) -9222!Swørn - Keep Going -9217!Swørn - Feeling Lost -9228!Swørn - Reflection -9225!Swørn - Tumbling -9224!Swørn - Fox -9406!Ajmw - Fields -8261!Brock Berrigan - Drifter -9334!Felty - Caffeine -8985!Comodo - Mozambique -8707!Nymano - autumn breeze -8080!Tane - YesPlease -8391!goosetaf - Chasin Daisys -7922!Ruck P - A Tribe Called Tenz -7840!Aso - Sunsets -8827!Sugi.wa - Changing Lanes -7833!G Mills - Sunlit -8117!Middle School - back when it all made sense -9003!Montell Fish - jam session -7914!Aviino - London Love Letters -8405!Toonorth - Chrysalism -9175!Sitting Duck - Driftaway -9651!Sitting Duck - Waiting for You -9785!Sitting Duck - Time to Shine -8095!Sitting Duck - Finally Home -9448!Sitting Duck - Long Time Ago -7981!Sitting Duck - Glory Days -9781!Sitting Duck - Happy Place -8650!Sitting Duck - Journeys -9652!Sitting Duck - Never Ending -9331!Ezzy - ny90 -9332!Montell Fish - Imagination -10078!Middle School - Firefly Field -10077!Middle School - Cap's Café -10074!Middle School - Under the City Stars -10076!Middle School - Beaver Creek -10075!Middle School - Canary Forest -10034!Sleepy Fish - Way Away -10027!Sleepy Fish - Feather -10035!Sleepy Fish - The Noise in Pictures -10033!Sleepy Fish - Woodpecker -10031!Sleepy Fish - Lunar Cycles -10032!Sleepy Fish - Backyard Puddles -10022!Sleepy Fish - Bookshelves -10023!Sleepy Fish - Colors Fade -10021!Sleepy Fish - Butterfly -10017!Sleepy Fish - Witch Hat -10015!Sleepy Fish - Rest Until Dark -10135!Nymano - Blurry -10150!Nymano - Cold Outside -10144!Nymano - Perfume -10142!Nymano - New Horizons -10152!Nymano - Distance -10139!Nymano - Sunday Mornings -10128!Nymano - The Ride Home (interlude) -10148!Nymano - False Hope -10134!Nymano - One Last Call -10140!Nymano - Train Ride -10136!Nymano - Mirage -10130!Nymano - Sleepover -9232!Amparo - Unlisted -8192!Osvaldo - Embers in the Dark -9444!Aviino - A Deeper Understanding -10315!Miscél - String Along -8761!Mono:Massive - Blue Dawn -8888!Nokiaa - Ful Off -10247!Philanthrope - Trenches -8777!Tesk - First Lights -8137!Tesk - burn my mind -10265!Philanthrope - Habitat -10259!Philanthrope - Anemone -10262!Philanthrope - Willow -10254!Philanthrope - Soil -10255!Philanthrope - Plants -10257!Philanthrope - Droplets -10251!Philanthrope - Pine and Oak -10249!Philanthrope - Serendipity -10245!Philanthrope - Upstate -10263!Philanthrope - Wildlife -10243!Philanthrope - Maple Leaf Pt.2 -9917!Leavv - Flushing the Stairs -10459!Aviino - Still Life Dreamtime -10458!Aviino - Magenta Forever -10452!Aviino - Hotel Lobby Birthday Party -10446!Aviino - Bluetooth Ringtone (interlude) -10450!Aviino - Not A Cloud In Sight -10460!Aviino - Deeper -10454!Aviino - Creswick -10448!Aviino - Slim Bobby -11251!The Field Tapes - Through Trees -11249!The Field Tapes - Flowers -11248!The Field Tapes - Cloud Carpets -11247!The Field Tapes - Loving Someone You Lost -11246!The Field Tapes - Peaches -11245!The Field Tapes - Harbor -11244!The Field Tapes - Lilo -11243!The Field Tapes - Sugarless -11771!Makzo - Departure -11777!Makzo - Longing -11768!Makzo - Oasis -11778!Makzo - Melancholy -11773!Makzo - Seascape -11770!Makzo - Hereafter -7923!Aviino - Such Great Heights -9395!Middle School - Casual -9284!Dotlights - Anywhere But Here -8072!Aso - comfortable -7929!weird inside - Wrong Way -7955!xander. - Cozy Fire -10320!G Mills - Ocean View -7966!chromonicci - Oceania -7930!SAINT WKND - Girls Just Wanna Have Sun -9299!Juan Rios - Cascada -8171!Tesk - p i c k m e u p -9921!Leavv - Aqueduct -9307!G Mills - Harvest -9261!Mama Aiuto - All In Good Spirit -9923!Leavv - What Was Before -11743!chromonicci - Reality. -11741!chromonicci - Vivid. -11737!chromonicci - Parallel. -11742!chromonicci - Fantasy. -11735!chromonicci - Limitless. -12129!Mama Aiuto - Where The Streets Are Cold & Lonely -12128!Mama Aiuto - Today Feels Like Everyday -12124!Mama Aiuto - Small Town Palm Trees -12125!Mama Aiuto - Lax Incense -7814!Blue Wednesday - Murmuration -11235!Blue Wednesday - Bloom -11233!Blue Wednesday - Home Court -11231!Blue Wednesday - Day One -11229!Blue Wednesday - Déjà Vu -11227!Blue Wednesday - Toofpick -11225!Blue Wednesday - Flashback -9212!Sundreamer - bright mornings -8193!chief. - be here now -9663!D0d. - Spring -8918!Ian Ewing - Midnight Service -8995!Melodiesinfonie - feelinglow -8920!dryhope - Finding You -8698!Masked Man - grandiose soul -7871!Yasper - Last Snow -9303!No Spirit - Reliving -9304!iamalex - Yerry Hill -9145!Evil Needle - Adieu -8519!Masked Man - Coupe_90 -9735!Slo Loris - Truthful -9913!Leavv - Hidden Structure -10321!Loop Schrauber - Cruisin -10547!Psalm Trees - Holding No Hands -10279!Stan Forebee - Snowland Sunset -10311!Shopan - There and Back -10335!Ezzy - Focus -10339!Melodiesinfonie - You and I -9335!Sundreamer - vhs tapes 1993-1996 -8398!Mo Anando - Green House -13005!Aarigod - Golden -10556!Psalm Trees - Peninsula -9297!Saib - Beyond Clouds -9061!Plusma - sopha -8741!invention_ - ebb//flo -13001!Aarigod - Coda -13009!Aarigod - Momentary Loss -12999!Aarigod - Ambleside -13003!Aarigod - Barrows -13015!Aarigod - Maple -13007!Aarigod - Evenfall -13013!Aarigod - Splendour -13014!Aarigod - Woodnote -12997!Aarigod - Kinsfolk -12136!Blue Wednesday - Runaway -13092!Knowmadic - Cascade -14981!C Y G N - Lonely Waves -15001!C Y G N - 70 Avenue -15000!C Y G N - Zodiac -14998!C Y G N - Naked Sunday -14995!C Y G N - Dreamlover -14994!C Y G N - Taste of Heaven -14983!C Y G N - Playful Obsession -14991!C Y G N - Blue Moon -14989!C Y G N - Lost Soul -14987!C Y G N - Spiritual Mind -14985!C Y G N - Roses n Flames -15235!SwuM - Self Luv -15238!SwuM - Reflect -15230!SwuM - Wish -15228!SwuM - Mario Kart -15237!SwuM - On The Moon -15236!SwuM - Samething -15226!SwuM - Skates -15224!SwuM - By Chance -21781!Chillhop Music - Almost Home -21785!Chillhop Music - Slopes -21783!Chillhop Music - Belly Breathing -21784!Chillhop Music - LuvnYou -21782!Chillhop Music - Be Here Now -20121!Makzo - Airplane Mode -20332!Makzo - Magnitude -20126!Makzo - Badlands -20125!Makzo - Wayfare -20127!Makzo - Tether -20124!Makzo - Layover -20123!Makzo - Safe Haven -20120!Makzo - Trainspotting -20122!Makzo - Caravan -20119!Makzo - Viatecture -21646!Juan Rios - Esfera -21658!Juan Rios - Puesta De Sol -21657!Juan Rios - Cueva -21656!Juan Rios - Ámbar -21773!Juan Rios - Esfera -21655!Juan Rios - Dando Vueltas -21654!Juan Rios - Leña -21653!Juan Rios - Libélula -21652!Juan Rios - Pie in the Sky -21651!Juan Rios - Luz -21650!Juan Rios - Saudade -21649!Juan Rios - What If I Told You -21648!Juan Rios - Glaciar -21647!Juan Rios - Cabaña -21661!Ruck P - Reason -20565!Ruck P - Shine -20563!Ruck P - Places -20561!Ruck P - Fallin' -21660!Ruck P - Memories Pt.2 -21659!Ruck P - Memories Pt.1 -22940!Middle School - Chop City -22939!Middle School - Halklow -22938!Middle School - Passing Notes -22937!Middle School - By The Window -22936!Middle School - The Way We Were -22935!Middle School - Same Old Circles -22934!Middle School - Chit Chat -22933!Middle School - When I Get Up In the Morning -23189!Delayde - Little Windows -23190!Delayde - Driftwood -23191!Delayde - Bird In The Floorboards -23192!Delayde - There and Back -23193!Delayde - Inside a Saltwater Room -23194!Delayde - Time Went By -23195!Delayde - Blue -23196!Delayde - Southwesterly -23188!Delayde - Where The Sun Goes -23348!Smile High - Pathways -23347!Smile High - Undiscovered -23346!Smile High - Rowengartner -23345!Smile High - Ultraviolet -23344!Smile High - Roominate -23343!Smile High - Lake Winnipesaukee -23342!Smile High - Leches On the Menjay -23341!Smile High - Transparent -23340!Smile High - Deja -21742!Smile High - Sirens -23338!Smile High - This Too Shall Pass -23337!Smile High - Odyssey -23336!Smile High - Seeds for Tomorrow -23335!Smile High - Looking In -24832!Sleepy Fish - Getting Soup -24831!Sleepy Fish - I Will Never Stop Writing Songs About the Rain -24830!Sleepy Fish - Learning How to Skateboard -24829!Sleepy Fish - Fireworks Festival -24828!Sleepy Fish - Man I Miss My Cats -24827!Sleepy Fish - I Thought Graduating Would Feel Weirder -24826!Sleepy Fish - Setting Up Our Beds in Minecraft -24825!Sleepy Fish - Library Card -24824!Sleepy Fish - Tournament Arc -24823!Sleepy Fish - Just Put Up Some String Lights -24822!Sleepy Fish - I Main Samus Now -24699!Ezzy - Hung Up -27504!Parkbench Epiphany - Waiting -27503!Parkbench Epiphany - Turbulence -27502!Parkbench Epiphany - Waybackwhen -27501!Parkbench Epiphany - Everlight -27500!Parkbench Epiphany - Soulsounds -30130!Sleepy Fish - Leaf Contour -30137!Stan Forebee - Reunion -30141!mommy - Repent -30308!Aves - Green Tea -30140!SwuM - Riverside -31601!C Y G N - Solitude -31615!C Y G N - Chilled Memories -31611!C Y G N - Before Nightfall -31599!C Y G N - Quiet Night Rain -31598!C Y G N - Moody -31609!C Y G N - La Bohème -31600!C Y G N - Phone Call -31613!C Y G N - Stop Breaking My Heart -31614!C Y G N - I Need Your Attention -31610!C Y G N - Chill'n -31608!C Y G N - Vision Nocturne -31516!C Y G N - Tropical Midnight -31612!C Y G N - When I'm With U -31591!C Y G N - Night Fishing -31589!C Y G N - Lose Her Way -32888!Tesk - Glow -32978!Sugi.wa - Blue Moment -32885!Kissamilé - Timelapse -32854!King I Divine - Reflections -34372!auv - Montauk Paddling -28905!Plusma - Eclaircie -28903!Plusma - Bronea -28901!Plusma - Parasol -28899!Plusma - Pampaya -28897!Plusma - Valse -28895!Plusma - Kokon -35355!Teddy Roxpin - Summer in Cotuit -34242!Es-K - Nectarine -36650!Smile High - Rooftop Breeze -36925!Sleepy Fish - A Reminder -35507!Moods - Full Circle -36940!chromonicci - Low Tide -41648!Knowmadic - Gravity -41649!Knowmadic - Cycles -41650!Knowmadic - Street Lights -41651!Knowmadic - First Contact -41652!Knowmadic - Passing Time -41653!Knowmadic - Awaken -41654!Knowmadic - Changing Winds -41655!Knowmadic - Skipping Stones -41656!Knowmadic - Falling Out of Orbit -36942!Poldoore - After Hours -41693!Shrimpnose - Memories of When.... -41695!Shrimpnose - Clocks Running -41700!Shrimpnose - The Flash before my Eyes -41698!Shrimpnose - Halflife -41702!Shrimpnose - Hyperspace -41687!Shrimpnose - Sundials -41689!Shrimpnose - In Minutes -36919!Sleepy Fish - The Field from Spirited Away -34328!Toonorth - Monolith -41890!Aves - Everyday -41938!J.Folk - Berry Drive -42445!Philanthrope - Hold me Tight -43683!SwuM - Break -43682!SwuM - Starlink -43681!SwuM - Phases -43680!SwuM - Know by Now -43679!SwuM - Home -42056!Thomas Prime - Passing Storm -36916!Sleepy Fish - It'll Last a Million Years -37131!Sleepy Fish - Snoopy's House -36918!Sleepy Fish - Looking out the Bus Window -36921!Sleepy Fish - Arthur in Snow -37132!Sleepy Fish - Winter Soccer Practice -36922!Sleepy Fish - Treecko is a Cool Starter -37133!Sleepy Fish - Penpals Perhaps -37127!Sleepy Fish - Apple Turnover -41956!The BREED - Making a Way -43908!J.Folk - Memory -43907!J.Folk - Soft Spot -43906!J.Folk - Envy You -43905!J.Folk - New Places -43904!J.Folk - Orange Trees -43903!J.Folk - Flight Mode -43902!J.Folk - Sleep Walker -44900!ØDYSSEE - Lookaway -45233!Teddy Roxpin - About It -45232!Teddy Roxpin - Nightcrawler -45231!Teddy Roxpin - One for Mac -45230!Teddy Roxpin - Funky Record -45229!Teddy Roxpin - Oh Let's Ride -45073!Allem Iversom - Snuck Past the Fireplace -45071!Allem Iversom - Small Whispers -45069!Allem Iversom - Reginald -45067!Allem Iversom - Power Off -42247!Allem Iversom - Zoned -42245!Allem Iversom - Stopped Short -42243!Allem Iversom - Saved For Sunset -42241!Allem Iversom - One Eye Open -48117!Mr Slipz - Empty Rooms -48093!Mr Slipz - 6am -48092!Mr Slipz - Lights Off -48091!Mr Slipz - Bubble Bath -48090!Mr Slipz - Salt Lamp -48089!Mr Slipz - Sueños -48088!Mr Slipz - Another Day -48087!Mr Slipz - Early Rise -49441!El Train - Crush -49440!El Train - Up Early -49439!El Train - Spring -49438!El Train - Cosmos -49437!El Train - Slow Burn -49436!El Train - Sippin' -49429!El Train - Snap Back -49428!El Train - Lavender -49426!El Train - Kaleidoscope -49425!El Train - Dreaming -51080!Evil Needle - Oasis -51082!Evil Needle - Shorty -51084!Evil Needle - Twilight -51086!Evil Needle - In the Night -51088!Evil Needle - Summer Vibe -51078!Evil Needle - Cloud Zone -49381!Middle School - Delicate -55318!Aviino - allwehave -55319!Aviino - Peace Resting -55315!Aviino - See You Cross Country -55316!Aviino - Addison -55314!Aviino - Tying Knots -55312!Aviino - Ode to Scotty -55311!Aviino - Upstream -55317!Aviino - Fly High Newborn -55313!Aviino - Coffeebreak -55310!Aviino - Peaceful Dissociation -58841!J.Folk - Still Looking -58840!J.Folk - Longest Wait -58839!J.Folk - Follow the Rabbit -58838!J.Folk - Pending -58837!J.Folk - Offroad -58836!J.Folk - In Circles -58846!J.Folk - Trainride -58834!J.Folk - Steady -58833!J.Folk - Apple -58861!Shofel - Waiting for that Phonecall -58860!Shofel - Swell -58859!Shofel - Very Last -58858!Shofel - Daylight Drift -58857!Shofel - Sunny Side Up -58856!Shofel - Daydream -58855!Shofel - Shung -58854!Shofel - Thrillseeker -58853!Shofel - Balcony -55130!cocabona - Lost Woods -60622!C Y G N - Let it go -60621!C Y G N - Morning Star -60620!C Y G N - Sunset Drive -60619!C Y G N - You -60618!C Y G N - Sex on the Backseat -60617!C Y G N - Take it Eazy -60616!C Y G N - Piña Colada -60615!C Y G N - Late Night Drive -60614!C Y G N - Forever young -60573!C Y G N - Emotions -60572!C Y G N - Bikini Palm-trees -60571!C Y G N - Beautiful -62379!Arbour - Roadtrips -62171!Hanz - Tomorrow -62378!Knowmadic - Forgetting -62377!Knowmadic - Dusty Records -62376!Knowmadic - See You Soon -62375!Knowmadic - Distant Memories -62374!Knowmadic - What You Left Behind -62373!Knowmadic - Alone -62372!Knowmadic - The Breeze -62371!Knowmadic - I Miss You -62370!Knowmadic - Do Not Go -62280!Ezzy - Through Line -60832!Ezzy - Oslo-S -60834!Ezzy - Scholastique -60836!Ezzy - Earl Gray -60838!Ezzy - Super Chill Vibes 5000 -60840!Ezzy - Suzuki -60842!Ezzy - Mahogany -65379!Boukas - Let Go (Philanthrope Remix) -64125!Philanthrope - Fade out -64124!Philanthrope - Things Fall Apart Pt.2 -64123!Philanthrope - Serenade -68157!Philanthrope - Snug -64120!Philanthrope - Hindsight -64119!Philanthrope - Move Like That -64118!Philanthrope - Panda -64117!Philanthrope - Beavis pt.2 -64098!Leavv - Satin -64097!Leavv - Setbacks -64096!Leavv - Loner -64095!Leavv - Coast -64094!Leavv - Back Again -64093!Leavv - No Hassle -64092!Leavv - Bloom -64091!Leavv - Roam -65489!Boukas - Inhale/Ad Astra (Boukas Remix) -68327!The Doppelgangaz - Naturally Flavored -68324!The Doppelgangaz - Forward Movement -68323!The Doppelgangaz - Fall Out -68322!The Doppelgangaz - Clapper's Delight -68321!The Doppelgangaz - Back Track -68325!The Doppelgangaz - It All Connect -68328!The Doppelgangaz - Rest Assured -68326!The Doppelgangaz - Knocked -68353!Kreatev - Speedin' -68352!Kreatev - S2000 -68351!Kreatev - Night Moves -68350!Kreatev - Twin Turbo -68349!Kreatev - Interlude Ride -68348!Kreatev - Slow Lane -68347!Kreatev - Acura Coupe -68346!Kreatev - I-285 -68360!Boukas - Transition (El Train Remix) -58823!Boukas - The Tourist -55235!Boukas - Inhale/Ad Astra -53596!Boukas - Transition -53594!Boukas - The Tourist -53592!Boukas - Let Go -69640!Bao - Jade -69646!Bao - Last Hand -69641!Bao - Linha de Passe -69648!Venuz Beats - In Spirit -69645!Bao - Vers le Ciel -69642!Bao - Dreams & Reality -69924!Masked Man - Evian -69923!Masked Man - Every Cloud -69916!Masked Man - n64 -69915!Masked Man - Widen -69914!Masked Man - Push to Open -69913!Masked Man - Joop -69912!Masked Man - Winter Wonderland -69906!Ward Wills - rain world -69905!Ward Wills - melina -69904!Ward Wills - even though i tried -69903!Ward Wills - switch up / down for u -69902!Ward Wills - every way u say my name -69901!Ward Wills - palace -69900!Ward Wills - north -69899!Ward Wills - ranni -65383!Leavv - Winter Shore -69949!Parkbench Epiphany - Stay Like This -69947!Years From Now - Go back to the Jungle -69951!Ian Ewing - Stay Like This -69948!Poldoore - Transformations -69950!Leavv - Company -65411!Yasper - Stay -71629!Axian - Slinky -71644!Kreatev - High Beams -74258!Loyae - Kauai -74265!Mama Aiuto - Meadow Terrain -75139!Enough Cereals - L'aventure -75732!Enough Cereals - Spirals -75141!Enough Cereals - Lobby call -71621!Enough Cereals - Foresight -75135!Enough Cereals - Falling -75143!Enough Cereals - On the Run -75137!Enough Cereals - Impulse -75745!Birocratic - Looming -75835!Sweeps - Oregon Coast -73162!Arbour - Friends -78346!Arbour - December, Too -73166!Arbour - Always -73168!Arbour - Growing Pains -73164!Arbour - Sunkissed -75538!Psalm Trees - I Don't Want Love -64054!Spirit of Naima - I Don't Want Love -64040!Spirit of Naima - One for Florian -75541!Psalm Trees - Seu Trio -64045!Spirit of Naima - Cut Free -75544!Psalm Trees - You Bring Me Life -75547!Psalm Trees - Last One -75546!Psalm Trees - That Summer -75545!Psalm Trees - Hold it Down -75543!Psalm Trees - 1978 -75542!Psalm Trees - Hope -75540!Psalm Trees - When All I Heard Was Artifacts -75539!Psalm Trees - Cantar -64036!Spirit of Naima - Curtain Call -64038!Spirit of Naima - High Hope -64043!Spirit of Naima - In the Sun -64047!Spirit of Naima - Sleeping Norboo -64050!Spirit of Naima - Autumn Turned Winter -64052!Spirit of Naima - Light of World -64056!Spirit of Naima - Harp Trees -79272!lloom - Early June -74856!Psalm Trees - Light of World -77527!mommy - Guitar Shop -74855!Psalm Trees - High Hope -77541!J.Folk - Hope It's Not -74864!Psalm Trees - I Don't Want Love -79268!lloom - Farewell -79271!lloom - In My Room -79267!lloom - Back Home -74866!Psalm Trees - Curtain Call -74805!SwuM - requiem -74870!Psalm Trees - Light of World -75527!Psalm Trees - Sleeping Norboo -75526!Psalm Trees - I Don't Want Love -74867!Psalm Trees - Sleeping Norboo -74801!SwuM - traces -74803!SwuM - nightshift -74807!SwuM - miles away \ No newline at end of file +9476!Apple Juice +8448!Tôzen +8878!Swiss +8603!Like This One, & Then Some +8598!Secret Meetings +8596!Fluid Dynamics +8562!Theme From Endless Sunset +8591!Outskirts +8587!Squba +8582!The Story +8769!OdeToYou +8788!Pueblo +8905!Fade +8908!Trouble +8941!With You +8938!Lego +8924!Orbit +8935!Thoughts +8932!Lament +8931!Moods +8927!Doin It +8925!Snapback +8922!Green Stamps +8921!Twrk +8917!Floating Vibes +8914!Waves +8912!Sometimesoon +8909!Tell Me +8943!Wondering +8906!Soundscapes +8421!Wine & Roses +8469!Interlude +8464!Underwater +8221!The Creator +8467!Cloud Steps +8459!Breathless +48099!The God Behind The Pines +9026!Staying There +48100!Urban Canopy +9022!Her +8990!Spring Vale +9097!Reefs +9094!Driftwood +9091!Motions +9089!Azure +9131!Boys' Bop +8518!The End +9154!Heartburn +9151!Rematch +8440!Leavin' +9149!Sodium +9146!Frameworks, Pt.2 +9144!Rebirth +9140!RealEstate +9138!Trust +8298!Hope +9136!Frameworks, Pt.1 +8780!Flke +9133!Clockwork +8122!Blue +8533!Birth +8940!Saudade +8472!Evening Tide +8947!Nowhere Else +8942!Trip To The Mountains +8944!Mercadia +8950!Can You See The Rhino In The Clouds? +8936!Thoughts +8255!Hold My Hand +8937!New Beginnings +9213!Farewell +8358!There.Is.A.Place +47674!T00.Mch_t00.Lttl +8661!Albedo +8187!Vscrl_ +9207!Brzzy_bump +9109!Imgnry +8415!Raft +9205!Hijack +9204!Black[Ice] +9202!Permafr0st +8960!Dw3ll +9201!Skyrate +8349!Isla Bella +8303!Indelible +8730!Everydayluvin +9252!Yesorno +9249!Remember +8412!Nomatter +9246!Chances +9067!Backhome +9244!Menti +8748!Bravo +8929!Steady +8470!Movie Scene +9194!Horizons Form From The Soul +8915!Requiem +9256!Sun Child +8911!Closer +8609!Seasons +8907!Dreamer +8757!Waiting On You +9260!landrace +8160!Destination +8637!Smooth Wit' Any Groove +8450!Playtime +9273!Rekindling +8456!Crossing Borders +8746!Le Sud +8453!Blind +8092!Soulful +8457!Check It Out +8286!Sticky +8497!Daybreak +9276!Runaway +9301!Float +9306!Relax Your Mind +8183!Divide +8926!Springside +9310!In Your Heart +8090!Sunshine +8181!Feel +8437!No Way Back +9313!11 / Eleven +8545!Exactly +8177!Destiny +8964!Apple Pie & Honey +8966!Eggs Sunny Side Up +8972!Go For A Blow +8175!Chocolate Covered Dreams +8968!Morning Love Affair +8961!Smunchiiez +8970!Funk Flowers +8172!I Just Love Your Smile +8958!Praliné +9257!Drive Home +8407!Gaia +8446!Passage +8170!LuvnYou +8441!Nothing's Gonna Hurt U +8352!Stay Puff +8355!Silent Color +8350!Smoke Patrol +8167!Stevia Wonder +8356!Sleep Shop +8165!Aqui +8359!Surf Report +8361!Sentimental +8364!Morning Crackle +8367!7th Inning Stretch +8118!Too Young For Secrets +8162!Noodlez +9269!Le Voyage Du Coeur +8157!As Long As I Got You +8540!3UO +8956!Tiger +9315!Sticks & Stones +8933!Sunrise +8156!Coo Lullaby +8436!you left a trace in the sand +8433!the great ocean road +8431!dune child +8429!clay castle ruins +8176!nomads of the sea +8055!wading through the wetlands +8916!Vino +8953!this again.. +8767!Home +8370!Valley +8366!Tomorrow +8362!Meadow +8231!Lacuna +9158!Within +8354!Mind Garden +8351!Voyage +8374!Lighthouse +8775!By The Shore +8425!Silience +8447!Phase +8548!Fall Down - Instrumental +9262!Fall Down +8551!Fira +8494!Gone Again +8489!Evening Routine +8487!Prom Night +8476!Back Home +8151!This Is Love +8078!A Day at the Beach +8479!Fireworks +8491!Hometown +8484!Train Station +8543!Distant Travels +8498!Again +8770!Nobody Can See Me +8763!Love Is Weakness +8766!Mindfulness +8149!Cold Heart Women +8148!Heartbreak +8773!Remember +8274!Lazy Pacific +8144!Digital Sex +8768!White Cadillac +8141!All Your Love +8140!San Junipero +8760!Body N Soul +8481!Hideout +8279!Brazil +8558!meadow +43868!dirty shoelace +9245!walnut +9238!light strands +9239!throwback port +9243!takoyaki promenade +8875!embrace +9247!everything you say +9242!soupeddd! +9236!thinking of you +8427!Rosewood +7857!Settled +7872!Downtime +7901!A Million Miles +8756!Away with the Fairies +8473!Melting Ice +8781!All Us +9372!Love from NGC 7318 +8554!Faces +8005!Interstellar +8001!The Dream +7998!Stay. +7994!Don't know why +7991!Chinatown +7987!Arcade +7984!Alive +7979!Fat Bao +7977!Lemon +7975!Where I Met You +7971!Patio +7951!Far Away +7948!Flower +7945!Protected +7943!Butterfly +7969!noisy world +7965!Eternal now +7962!Oh Badu +7957!what will you do? +7953!Awakening +7939!Packing My Bags +7934!Sleeping In +7931!Home +7927!Leaving +7924!Thinking Chair +7920!Blankets +7915!B Urself +7912!Ur Ok +7909!moving in +9316!I'm Ready +8207!Vibin' Out +7821!Second Wind +9471!Stagnant +8019!Quietly +8094!Clocks Forward +7816!Effervescent +8104!Rainforest +8058!Coral Dreams +8099!Whale Call +7824!Fried Potatoes +8311!Pickt +8307!Gray +8312!Mr. Balloon Hands +8919!Action +8152!Timelapse +8902!Reminisce +8899!Memories +8179!Clouded Thoughts +8292!Flow +8289!Moonlight +8216!Illusion +8285!Wake up +8220!On my mind +8697!Back to Life +7897!Late Again +8281!Plush Pocket +7889!FrEsH +7898!Power Lines +7895!I Wish It Were (You) +7887!Do You Want To Pretend We're In Love Sometime? +7892!Helplessly +7902!The Finish Line +7885!Welcome Back +7883!The Oldest Man In The Room +8975!Moody +7879!Hummus and Bread +7876!Playful +7873!Build +7869!Nightwatch +7867!Tips and Tricks +8904!Be Alright +7865!Howl +7862!Birds +7859!Drift +7858!6Th Station +7855!Black Garlic +7853!Through +7851!In The Sky +9268!Moon +7848!Wonder +7845!Searching +8410!Sadie +8411!Private Island +8414!Jupiter Moons +8418!Dream Girl +8420!Hibiscus Emoji +7839!New Light +7837!Lost Love +7834!Foggy Road +7832!Isolated +7830!Wistful +7842!Nimbus +7841!Chiaroscuro +8860!Yo +8252!Customs +8222!Function +8856!Place 2 Be +8369!Yay +8323!Townie +8422!Persuasion +8206!Nice and Easy +8326!Levitate +9271!Mighty +8329!Nostalgic +7826!Back Home +7823!Whistle Song +7822!Hope +7820!Riviere +7819!Holwell +7817!Old Cartoons +7827!Ease Out +8854!Moss +8851!Coastal Town +8789!Droplet +7937!Tiny Sailboat +8225!17 +8871!Meaux +8226!Rucker Park +7964!Like I Am +8230!Midnight +8785!Cambria +7815!Our Reflection +7813!Railways +7812!Broken Clocks +7811!Dandelion +7810!Never Felt The Same +7809!Through Walls +7808!Forgot It Was Monday +7806!Procrastinating +8866!Homecoming +8267!Bloom +8863!Tumble's Lullaby +8787!Onteora Lake +8784!Davita +8848!Ocean 5 +8240!Astro Love +8243!Dream About U +48102!La Plage +8245!Blue Sky +8248!I Can't Be There +8250!Missing You +8253!Feelin' Alright +48103!Let's Forget Things We Said +8254!Know About It +8256!Ocean Drive +9143!Lilac +7958!Woods +9130!Spring +9128!Oceans +9126!Love +8062!Clouds +9134!Upstate +9504!Sombre +7805!Céleste +7804!Make You Hers +7803!Rain +7913!First Light +9071!Eastway +9069!Tin Toys +9066!Purple +8465!Click +9150!Precarious +8065!White Oak +9085!Focus +9083!Envision +8100!Landing +9076!One Reason +9494!Subaquatic +9492!Bus Taxi +9490!Sun Sets +8910!223° +9501!Blue Skys +9498!Quiet Mornings +9497!Celebrations +9070!Under Leaves +9077!Horse Betting +8604!Sleepwell +9485!Dusk +9484!Slowdrive +9446!Quietly, Now +8321!Loved +7880!Get Up and Go +9488!Goodmorning +9074!Layover +8097!My Own World +9025!Self Affray +9023!Where Home Is +9020!Cloud Neon +9019!Endless Ether +8864!We Let Go +9065!At Our Core +9062!From Nothing +9481!Bubbly +9479!Rendition +9433!Without You +9478!Believe In You +8590!Homecoming +9221!Opening +9308!While You Sleep +9035!My Love For Her +9033!Daydream +8306!Our Adventures +9337!Wistfulness +8113!Night Walk +9118!Migration +7875!Cliffside +9120!Walks By The Pond +9081!Destiny +9079!Simple Words +7919!Mirai +10003!Breakfast w Bastien +10002!Vibe Vibe +9997!Demo 13 v2 +10001!Sofa Stories +10000!Pick Up +9090!Flutter +9092!zzz... +9087!Continual +9041!Careless +9038!Slightly Improvised +8133!Something Warm +8508!Forest Lake Walk +8068!Morning In The Cafe +9055!Forward +9053!Slope +9051!Bewildered +8264!Leaving For Good +9048!Embers +8131!Dusk +9045!Mother Nature +8930!Cloud Dance +9049!Island Boy +8102!Into The Wind +8974!Sundown +8036!Ocean Patio +8115!When To Say Goodbye +8718!Can't Find the Words +9011!Because I Was Lonely +9008!Be Okay +8026!Comfort +9014!Tsuki's Tears +7988!Velocities +8776!Caught In The Rain +8891!Awake +8837!Never Forget +8657!blankets +7980!The Shore and You +8824!Remember +8109!Apple Flower +7974!Small Things +8991!Blur +8567!Snug +7982!Watercolor +7985!Collages +7976!Fireplace +7972!Winter Winter +7968!Nights Like These +7993!Swimming +7990!Sunbreak +8105!After Dark +8027!Hibernation +8085!bringmesun +8345!Kyiv +8341!And Now I've Found You +8134!doing laundry +8039!Ochre +8320!Is Nostalgia An Emotion? +8200!Cruisin' +8127!Far From Home +9435!In Loving Memory +8075!Hypnagogia +8288!Sonar +8291!Persist +8283!So Unnecessary +9421!Peaceful Sleep +8388!Snacks Pt. 1 +9423!Aerials +9424!Pacific +9428!Let's Stay Inside +8290!Cool Side Of The Pillow +8023!digital dreams +7843!polarbeer +8021!rolling down this lazy wave +8033!by & by +8013!In Time +7992!Viaduct +8040!Wash +8016!Ever Forward +8030!Flashes of Calm +7997!Faraway +8000!Too Late +8002!Dojo +8003!Ukon +8010!Swing For Me +8006!Let It Go +8008!Aries +9411!Asymptotic +7995!Fond Memories +9444!A Deeper Understanding +9021!fiveyearsago +7906!Uplift +9406!Fields +9459!A Beautiful Salad Bowl +8685!Dans la Salle à Manger +9450!Dessous +9451!Camille & Leo (interlude) +8810!Du Bassin au Muret +9454!1999 +9324!Les Vacances +9455!Les Bonnes Choses +9430!Goodnight +7923!Such Great Heights +9441!King Street +9438!Crickets +9432!Leaf And Wind +7996!When The Green Fades To Grey +9367!Birds Fly Higher Than The Moon +9413!Speed Of Warmth +9415!New Place, Same People +8867!Unshifted +7911!Bedscape +7910!Memory Ride +7908!Be Still +7903!Pleasant Beach +9401!Last Night +9418!Time +9196!Icepath +9203!Where We Met +9383!Warmer Days +9379!Awake +9377!Childhood Days +9374!Fog +9052!Warm Feeling +8815!Fate +9027!Times Ahead +9392!Life Is a Dream +9389!Wake Up +9385!Traveling Through Time +8263!Ode To Life +9404!Love +9408!Sky +8705!Everlasting +9360!Ocean Alley +9357!Crema Cafe +9352!Cocktail Hour +8607!Tamarind +9364!Central Coast +9355!Sails +8266!Lagoons +9363!Jazz Cabbage +8522!Late Days Of 96 +9343!As Tides Polish Stones +8694!Early Days Of 96 +9285!Calm +8987!River (Blue) +9250!Staring at the Sun +8547!Little Spirit +7967!Sundew +9395!Casual +9320!Wake Up +9305!Need Someone +9322!Inside +8147!Fuzz +9168!Nightscape +9334!Caffeine +8971!Hibiscus +9312!Toft +9325!Air Curvatures +9280!Nightglow +9148!Nightfall +9278!Day and Night +9275!Daydream +9272!Daylight +9259!Small (Gravity) +8536!Novel (Calm) +9255!Manner (Forms) +9447!Vinho Verde +9396!Upstream Color +8083!You're Asleep So I Gotta Keep It Down Shh +8688!Home Video +8514!Old Friends +9219!Growing Apart +7925!Upset (hold it in) +9222!Keep Going +9217!Feeling Lost +9228!Reflection +9225!Tumbling +9224!Fox +8037!Cliff Of The Horizon +8261!Drifter +8985!Mozambique +8707!autumn breeze +8080!YesPlease +8391!Chasin Daisys +7922!A Tribe Called Tenz +7840!Sunsets +8827!Changing Lanes +7833!Sunlit +8117!back when it all made sense +9003!jam session +7914!London Love Letters +8405!Chrysalism +9339!Highland +9237!Waterfall Eyes +9010!Origin +9341!Lily Pads +9229!Scout +8751!Midtown Rooftop +9232!Unlisted +9175!Driftaway +9651!Waiting for You +9785!Time to Shine +8095!Finally Home +9448!Long Time Ago +7981!Glory Days +9781!Happy Place +8650!Journeys +9652!Never Ending +8280!Stolen Time Capsule +9655!The Dawn Coloured Us In +9717!Point Of No Return +9384!Last Frontiers +9700!Oceanharp +8164!The Map Plotted Us In +8275!Life Force +9331!ny90 +9873!Tides Turn +9874!Two Moons +9872!Elsewhere +9332!Imagination +9729!Staying In +10078!Firefly Field +10077!Cap's Café +10074!Under the City Stars +10076!Beaver Creek +10075!Canary Forest +9295!Silk +9427!Pepper Lights +9475!Sleep First +10034!Way Away +10027!Feather +10035!The Noise in Pictures +10033!Woodpecker +10031!Lunar Cycles +10032!Backyard Puddles +10022!Bookshelves +10023!Colors Fade +10021!Butterfly +10017!Witch Hat +10015!Rest Until Dark +9639!Can't Hear... +10135!Blurry +10150!Cold Outside +10144!Perfume +10142!New Horizons +10152!Distance +10139!Sunday Mornings +10128!The Ride Home (interlude) +10148!False Hope +10134!One Last Call +10140!Train Ride +10136!Mirage +10130!Sleepover +8581!Thursday Morning +9735!Truthful +9653!Birthday +8192!Embers in the Dark +10315!String Along +8761!Blue Dawn +8888!Ful Off +10247!Trenches +8777!First Lights +8137!burn my mind +9347!Umbrella Pine +10265!Habitat +10259!Anemone +10262!Willow +10254!Soil +10255!Plants +10257!Droplets +10251!Pine and Oak +10249!Serendipity +10245!Upstate +10263!Wildlife +10243!Maple Leaf Pt.2 +9734!Indoors, Puzzles +8550!Plant Care +9731!Midday Hike +9727!Cohesive +9718!Ghost Towns +9178!State Fair +9002!Fifteen Km +9917!Flushing the Stairs +8681!Island Sanctuary +9042!Kelp Forest +9641!Tide Pool +9927!Zenith +9925!With Time +9923!What Was Before +9921!Aqueduct +9919!Paved Paths +9915!Dancing Droplets +9913!Hidden Structure +8236!Air Molecules +10459!Still Life Dreamtime +10458!Magenta Forever +10452!Hotel Lobby Birthday Party +10446!Bluetooth Ringtone (interlude) +10450!Not A Cloud In Sight +10460!Deeper +10454!Creswick +10448!Slim Bobby +9771!Her Eyes +9775!Perspectives +8599!Otherside +9759!Be +9013!Orange On The Blue Palette +8063!Forest Speak +9696!Reverse Clock +11251!Through Trees +11249!Flowers +11248!Cloud Carpets +11247!Loving Someone You Lost +11246!Peaches +11245!Harbor +11244!Lilo +11243!Sugarless +9166!Afterlife +9663!Spring +9754!Potion +9517!Departure +11771!Departure +11777!Longing +11768!Oasis +11778!Melancholy +11773!Seascape +11770!Hereafter +9783!After All +9284!Anywhere But Here +8072!comfortable +7929!Wrong Way +7955!Cozy Fire +10320!Ocean View +7966!Oceania +7930!Girls Just Wanna Have Sun +9299!Cascada +8171!p i c k m e u p +9307!Harvest +9261!All In Good Spirit +9506!Longing +8202!rainy day loop +11743!Reality. +11741!Vivid. +11737!Parallel. +11742!Fantasy. +11735!Limitless. +9708!Come Back To Me +9756!Elderwood +9535!Silhouettes +12129!Where The Streets Are Cold & Lonely +12128!Today Feels Like Everyday +12124!Small Town Palm Trees +12125!Lax Incense +9212!bright mornings +9684!hello, goodbye +9335!vhs tapes 1993-1996 +9659!fairfield boathouse +7814!Murmuration +11235!Bloom +11233!Home Court +11231!Day One +11229!Déjà Vu +11227!Toofpick +11225!Flashback +10553!Who Knows +11129!it's ok, i only have tears in my third eye +8193!be here now +8918!Midnight Service +8995!feelinglow +8920!Finding You +8698!grandiose soul +7871!Last Snow +9303!Reliving +9304!Yerry Hill +9145!Adieu +8519!Coupe_90 +10321!Cruisin +10547!Holding No Hands +10279!Snowland Sunset +10311!There and Back +10335!Focus +10339!You and I +8398!Green House +13005!Golden +10556!Peninsula +9297!Beyond Clouds +9061!sopha +8741!ebb//flo +10554!Desire +11135!the last day of september +13001!Coda +13009!Momentary Loss +12999!Ambleside +13003!Barrows +13015!Maple +13007!Evenfall +13013!Splendour +13014!Woodnote +12997!Kinsfolk +11145!face to face with the great nothing +11143!from nothing to nothing (leitmotif) +11141!at the end of the day +11139!ouroboros +11137!i miss you every day +11133!answering machine tape loop +11131!summer fades away +12136!Runaway +11159!Alone +11157!Two For Joy +13092!Cascade +11161!Bottle of Birdsong +11155!Little Sparrow +11153!Finally Home +11151!Candlelit +11149!Unfurl +14981!Lonely Waves +15181!A Feeling That Something Has Happened Here +15001!70 Avenue +15000!Zodiac +14998!Naked Sunday +14995!Dreamlover +14994!Taste of Heaven +14983!Playful Obsession +14991!Blue Moon +14989!Lost Soul +14987!Spiritual Mind +14985!Roses n Flames +15235!Self Luv +15238!Reflect +15230!Wish +15228!Mario Kart +15237!On The Moon +15236!Samething +15226!Skates +15224!By Chance +11264!And So Do The Memories +11272!Outro +11268!All That Remains +11372!Interlude +11262!The Context Fades +11260!Intro +12094!Passenger +11945!Passenger +13061!Charmy +13059!Charmy +14958!Simplexity +17089!Dive +17088!Vintage +17090!Low Rider +17087!Cruising +19056!In The Shade +19055!Poolside +17913!In The Shade +17915!Poolside +15018!Morning Dew +17910!Morning Dew +16513!Fallen +16512!Illicit +16511!Vault +16510!Lance +20279!Boardwalk +20285!Have Doughnut +17925!Dusk +17944!Aftersome +17943!Momo +17947!Dreamstate +17938!Antematter +17937!Contemplation +17929!Down +17927!Rover +17946!Opia +17933!Lavish +17931!New Moon +17941!Dawn +21781!Almost Home +21785!Slopes +21783!Belly Breathing +21784!LuvnYou +21782!Be Here Now +20287!The World We Were Born In No Longer Exists +20121!Airplane Mode +20332!Magnitude +20126!Badlands +20125!Wayfare +20127!Tether +20124!Layover +20123!Safe Haven +20120!Trainspotting +20122!Caravan +20119!Viatecture +20295!Not Afraid Of Ghosts +21646!Esfera +21658!Puesta De Sol +21657!Cueva +21656!Ámbar +21654!Leña +21653!Libélula +21652!Pie in the Sky +21651!Luz +21650!Saudade +21649!What If I Told You +21648!Glaciar +21647!Cabaña +20297!Grit In The Lens +20293!Lost In The Fire +20291!All The Tired Ways +20289!Remedy +20283!Grim Canaria +20281!Objects With Intent +21661!Reason +20565!Shine +20563!Places +20561!Fallin' +21660!Memories Pt.2 +21659!Memories Pt.1 +20303!The World We Were Born In No Longer Exists +22940!Chop City +22939!Halklow +22938!Passing Notes +22937!By The Window +22936!The Way We Were +22935!Same Old Circles +22934!Chit Chat +22933!When I Get Up In the Morning +22794!Perspective +22793!Clarity +22792!Gratitude +22791!Move +22790!Vitamin D +20305!Objects With Intent +20309!Objects With Intent +20307!Not Afraid Of Ghosts +20302!All The Tired Ways +20300!Have Doughnut +22994!Saturday Sunrise +23189!Little Windows +23190!Driftwood +23191!Bird In The Floorboards +23192!There and Back +23193!Inside a Saltwater Room +23194!Time Went By +23195!Blue +23196!Southwesterly +23188!Where The Sun Goes +23348!Pathways +23347!Undiscovered +23346!Rowengartner +23345!Ultraviolet +23344!Roominate +23343!Lake Winnipesaukee +23342!Leches On the Menjay +23341!Transparent +23340!Deja +21742!Sirens +23338!This Too Shall Pass +23337!Odyssey +23336!Seeds for Tomorrow +23335!Looking In +23169!Warmth +23161!Far Wandering +23175!Years Ago +23173!Waiting +23171!Central Hall +23167!Welcome Home +24832!Getting Soup +24831!I Will Never Stop Writing Songs About the Rain +24830!Learning How to Skateboard +24829!Fireworks Festival +24828!Man I Miss My Cats +24827!I Thought Graduating Would Feel Weirder +24826!Setting Up Our Beds in Minecraft +24825!Library Card +24824!Tournament Arc +24823!Just Put Up Some String Lights +24822!I Main Samus Now +23165!Waiting On You +23163!Sun Petal +23159!Offshore +23073!Everything's Gonna B Ok +23315!I Miss the Magic +23069!Hope Island +23067!Nomad +23065!Jasmine +23063!Sorry Matthew +23061!Sketchbook Memory +23314!Two Thousand Miles +23057!Perfect Storm +23270!30AU +23268!Recurring Thoughts +23272!Creation +24767!Polaroid +23280!Together +23278!Communal +23276!Life +23274!Recuperate +24699!Hung Up +24721!dans le palais +24723!dans le palais +27504!Waiting +27503!Turbulence +27502!Waybackwhen +27501!Everlight +27500!Soulsounds +24841!All Those Years, All Those Nights Ago +24851!Forever Let it Ring +24849!We Go on, or Off, for Solace +24847!All Memories are Fiction Again +24845!Cry of a Hollow Man +24843!Sustain the Longing Notes +24839!Is Longing a Feeling or an Emotion? +24837!We Filled Up the Silence +24835!Away from Home +30130!Leaf Contour +30137!Reunion +30141!Repent +30131!Letters +30308!Green Tea +30140!Riverside +31601!Solitude +31615!Chilled Memories +31611!Before Nightfall +31599!Quiet Night Rain +31598!Moody +31609!La Bohème +31600!Phone Call +31613!Stop Breaking My Heart +31614!I Need Your Attention +31610!Chill'n +31608!Vision Nocturne +31516!Tropical Midnight +31612!When I'm With U +31591!Night Fishing +31589!Lose Her Way +32888!Glow +32978!Blue Moment +32885!Timelapse +32854!Reflections +34372!Montauk Paddling +34162!Caramel +28905!Eclaircie +28903!Bronea +28901!Parasol +28899!Pampaya +28897!Valse +28895!Kokon +35355!Summer in Cotuit +34242!Nectarine +36650!Rooftop Breeze +36925!A Reminder +35507!Full Circle +36940!Low Tide +41648!Gravity +41649!Cycles +41650!Street Lights +41651!First Contact +41652!Passing Time +41653!Awaken +41654!Changing Winds +41655!Skipping Stones +41656!Falling Out of Orbit +36942!After Hours +41693!Memories of When.... +41695!Clocks Running +41700!The Flash before my Eyes +41698!Halflife +41702!Hyperspace +41687!Sundials +41689!In Minutes +36919!The Field from Spirited Away +34328!Monolith +41938!Berry Drive +42445!Hold me Tight +43683!Break +43682!Starlink +43681!Phases +43680!Know by Now +43679!Home +42056!Passing Storm +36916!It'll Last a Million Years +37131!Snoopy's House +36918!Looking out the Bus Window +36921!Arthur in Snow +37132!Winter Soccer Practice +36922!Treecko is a Cool Starter +37133!Penpals Perhaps +37127!Apple Turnover +41956!Making a Way +43908!Memory +43907!Soft Spot +43906!Envy You +43905!New Places +43904!Orange Trees +43903!Flight Mode +43902!Sleep Walker +44900!Lookaway +45233!About It +45232!Nightcrawler +45231!One for Mac +45230!Funky Record +45229!Oh Let's Ride +45073!Snuck Past the Fireplace +45071!Small Whispers +45069!Reginald +45067!Power Off +42247!Zoned +42245!Stopped Short +42243!Saved For Sunset +42241!One Eye Open +48117!Empty Rooms +48093!6am +48092!Lights Off +48091!Bubble Bath +48090!Salt Lamp +48089!Sueños +48088!Another Day +48087!Early Rise +49441!Crush +49440!Up Early +49439!Spring +49438!Cosmos +49437!Slow Burn +49436!Sippin' +49429!Snap Back +49428!Lavender +49426!Kaleidoscope +49425!Dreaming +51080!Oasis +51082!Shorty +51084!Twilight +51086!In the Night +51088!Summer Vibe +51078!Cloud Zone +49381!Delicate +55318!allwehave +55319!Peace Resting +55315!See You Cross Country +55316!Addison +55314!Tying Knots +55312!Ode to Scotty +55311!Upstream +55317!Fly High Newborn +55313!Coffeebreak +55310!Peaceful Dissociation +55397!Color of the Darkness +55372!Once +53592!Let Go +58841!Still Looking +58840!Longest Wait +58839!Follow the Rabbit +58838!Pending +58837!Offroad +58836!In Circles +58846!Trainride +58834!Steady +58833!Apple +58861!Waiting for that Phonecall +58860!Swell +58859!Very Last +58858!Daylight Drift +58857!Sunny Side Up +58856!Daydream +58855!Shung +58854!Thrillseeker +58853!Balcony +55130!Lost Woods +53594!The Tourist +55163!It's Okay +55235!Inhale/Ad Astra +53596!Transition +60622!Let it go +60621!Morning Star +60620!Sunset Drive +60619!You +60618!Sex on the Backseat +60617!Take it Eazy +60616!Piña Colada +60615!Late Night Drive +60614!Forever young +60573!Emotions +60572!Bikini Palm-trees +60571!Beautiful +58823!The Tourist +58001!Once +60306!Color of the Darkness +62379!Roadtrips +62171!Tomorrow +62378!Forgetting +62377!Dusty Records +62376!See You Soon +62375!Distant Memories +62374!What You Left Behind +62373!Alone +62372!The Breeze +62371!I Miss You +62370!Do Not Go +62280!Through Line +60832!Oslo-S +60834!Scholastique +60836!Earl Gray +60838!Super Chill Vibes 5000 +60840!Suzuki +60842!Mahogany +65379!Let Go (Philanthrope Remix) +64125!Fade out +64124!Things Fall Apart Pt.2 +64123!Serenade +68157!Snug +64120!Hindsight +64119!Move Like That +64118!Panda +64117!Beavis pt.2 +64098!Satin +64097!Setbacks +64096!Loner +64095!Coast +64094!Back Again +64093!No Hassle +64092!Bloom +64091!Roam +65489!Inhale/Ad Astra (Boukas Remix) +68327!Naturally Flavored +68324!Forward Movement +68323!Fall Out +68322!Clapper's Delight +68321!Back Track +68325!It All Connect +68328!Rest Assured +68326!Knocked +68353!Speedin' +68352!S2000 +68351!Night Moves +68350!Twin Turbo +68349!Interlude Ride +68348!Slow Lane +68347!Acura Coupe +68346!I-285 +68360!Transition (El Train Remix) +69640!Jade +69646!Last Hand +69641!Linha de Passe +69648!In Spirit +69645!Vers le Ciel +69642!Dreams & Reality +69924!Evian +69923!Every Cloud +69916!n64 +69915!Widen +69914!Push to Open +69913!Joop +69912!Winter Wonderland +69906!rain world +69905!melina +69904!even though i tried +69903!switch up / down for u +69902!every way u say my name +69901!palace +69900!north +69899!ranni +65383!Winter Shore +69949!Stay Like This +69947!Go back to the Jungle +69951!Stay Like This +69948!Transformations +69950!Company +65411!Stay +71629!Slinky +71644!High Beams +74258!Kauai +74265!Meadow Terrain +75139!L'aventure +75732!Spirals +75141!Lobby call +71621!Foresight +75135!Falling +75143!On the Run +75137!Impulse +75745!Looming +75835!Oregon Coast +73162!Friends +78346!December, Too +73166!Always +73168!Growing Pains +73164!Sunkissed +75538!I Don't Want Love +64054!I Don't Want Love +64040!One for Florian +75541!Seu Trio +64045!Cut Free +75544!You Bring Me Life +64036!Curtain Call +64038!High Hope +64043!In the Sun +64047!Sleeping Norboo +64050!Autumn Turned Winter +64052!Light of World +64056!Harp Trees +75547!Last One +75546!That Summer +75545!Hold it Down +75543!1978 +75542!Hope +75540!When All I Heard Was Artifacts +75539!Cantar +79272!Early June +74856!Light of World +77527!Guitar Shop +74855!High Hope +77541!Hope It's Not +74864!I Don't Want Love +79268!Farewell +79271!In My Room +79267!Back Home +74866!Curtain Call +74805!requiem +74870!Light of World +75527!Sleeping Norboo +75526!I Don't Want Love +74867!Sleeping Norboo +74807!miles away +74803!nightshift +74801!traces +75571!Curtain Call +78926!Growing Season +78943!Velvet +81156!Engines +83282!WantU2Stay +83262!Tarkwa Bay +83337!Lagos Sundown +83340!Emem +81378!Midnight Veil +81240!Tropico +82321!Background +84241!Spykids +82325!Dry Leaves +82333!Driving +85214!My Steeze +82331!Filaments +85273!Shoegaze diff --git a/scripts/fix_cache.sh b/scripts/fix_cache.sh new file mode 100644 index 0000000..7f3bca6 --- /dev/null +++ b/scripts/fix_cache.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +grep -rlZ "429 Too Many Requests" . | xargs -0 rm -f +find . -type f -empty -delete \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 0a0d9e7..f63eb95 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,8 +11,11 @@ mod player; mod tracks; #[allow(clippy::all, clippy::pedantic, clippy::nursery, clippy::restriction)] +#[cfg(feature = "scrape")] mod scrapers; +#[cfg(feature = "scrape")] +use crate::scrapers::Source; /// An extremely simple lofi player. #[derive(Parser, Clone)] #[command(about, version)] @@ -64,9 +67,10 @@ struct Args { #[derive(Subcommand, Clone)] enum Commands { /// Scrapes a music source for files. + #[cfg(feature = "scrape")] Scrape { // The source to scrape from. - source: scrapers::Sources, + source: scrapers::Source, /// The file extension to search for, defaults to mp3. #[clap(long, short, default_value = "mp3")] @@ -96,11 +100,15 @@ async fn main() -> eyre::Result<()> { if let Some(command) = cli.command { match command { // TODO: Actually distinguish between sources. + #[cfg(feature = "scrape")] Commands::Scrape { - source: _, + source, extension, include_full, - } => scrapers::lofigirl::scrape(extension, include_full).await?, + } => match source { + Source::Lofigirl => scrapers::lofigirl::scrape(extension, include_full).await?, + Source::Chillhop => scrapers::chillhop::scrape().await?, + }, } } else { play::play(cli).await?; diff --git a/src/player/audio.rs b/src/player/audio.rs index 2c5bde4..2fc9e6d 100644 --- a/src/player/audio.rs +++ b/src/player/audio.rs @@ -1,13 +1,7 @@ -#[cfg(target_os = "linux")] -use rodio::OutputStream; - -#[cfg(target_os = "linux")] -use crate::player; - /// This gets the output stream while also shutting up alsa with [libc]. /// Uses raw libc calls, and therefore is functional only on Linux. #[cfg(target_os = "linux")] -pub fn silent_get_output_stream() -> eyre::Result { +pub fn silent_get_output_stream() -> eyre::Result { use libc::freopen; use rodio::OutputStreamBuilder; use std::ffi::CString; diff --git a/src/scrapers.rs b/src/scrapers.rs index 1729657..c26e8f3 100644 --- a/src/scrapers.rs +++ b/src/scrapers.rs @@ -1,9 +1,81 @@ -use clap::ValueEnum; +use std::path::{Path, PathBuf}; +use clap::ValueEnum; +use eyre::bail; +use reqwest::Client; +use tokio::{ + fs::{self, File}, + io::AsyncWriteExt, +}; + +pub mod chillhop; pub mod lofigirl; #[derive(Clone, Copy, PartialEq, Eq, Debug, ValueEnum)] -pub enum Sources { +pub enum Source { Lofigirl, Chillhop, } + +impl Source { + pub fn cache_dir(&self) -> &'static str { + match self { + Source::Lofigirl => "lofigirl", + Source::Chillhop => "chillhop", + } + } + + pub fn url(&self) -> &'static str { + match self { + Source::Chillhop => "https://chillhop.com", + Source::Lofigirl => "https://lofigirl.com/wp-content/uploads", + } + } +} + +/// Sends a get request, with caching. +async fn get(client: &Client, path: &str, source: Source) -> eyre::Result { + let trimmed = path.trim_matches('/'); + let cache = PathBuf::from(format!("./cache/{}/{trimmed}.html", source.cache_dir())); + + if let Ok(x) = fs::read_to_string(&cache).await { + Ok(x) + } else { + let resp = client + .get(format!("{}/{trimmed}", source.url())) + .send() + .await?; + + let status = resp.status(); + + if status == 429 { + bail!("rate limit reached: {path}"); + } + + if status != 404 && !status.is_success() && !status.is_redirection() { + bail!("non success code {}: {path}", resp.status().as_u16()); + } + + let text = resp.text().await?; + + let parent = cache.parent(); + if let Some(x) = parent { + if x != Path::new("") { + fs::create_dir_all(x).await?; + } + } + + let mut file = File::create(&cache).await?; + file.write_all(text.as_bytes()).await?; + + if status.is_redirection() { + bail!("redirect: {path}") + } + + if status == 404 { + bail!("not found: {path}") + } + + Ok(text) + } +} diff --git a/src/scrapers/chillhop.rs b/src/scrapers/chillhop.rs new file mode 100644 index 0000000..3fd9149 --- /dev/null +++ b/src/scrapers/chillhop.rs @@ -0,0 +1,221 @@ +use eyre::eyre; +use futures::stream::FuturesUnordered; +use futures::StreamExt; +use indicatif::ProgressBar; +use lazy_static::lazy_static; +use std::fmt; +use std::str::FromStr; + +use reqwest::Client; +use scraper::{Html, Selector}; +use serde::{ + de::{self, Visitor}, + Deserialize, Deserializer, +}; +use tokio::fs; + +use crate::scrapers::{get, Source}; + +lazy_static! { + static ref RELEASES: Selector = Selector::parse(".table-body > a").unwrap(); + static ref RELEASE_LABEL: Selector = Selector::parse("label").unwrap(); + // static ref RELEASE_DATE: Selector = Selector::parse(".release-feat-props > .text-xs").unwrap(); + // static ref RELEASE_NAME: Selector = Selector::parse(".release-feat-props > h2").unwrap(); + static ref RELEASE_AUTHOR: Selector = Selector::parse(".release-feat-props .artist-link").unwrap(); + static ref RELEASE_TEXTAREA: Selector = Selector::parse("textarea").unwrap(); +} + +#[derive(Deserialize, Debug)] +#[serde(rename_all = "camelCase")] +pub struct Track { + title: String, + #[serde(deserialize_with = "deserialize_u32_from_string")] + file_id: u32, + artists: String, +} + +impl Track { + pub fn clean(&mut self) { + self.artists = html_escape::decode_html_entities(&self.artists).to_string(); + + self.title = html_escape::decode_html_entities(&self.title).to_string(); + } +} + +#[derive(Deserialize, Debug)] +struct Release { + #[serde(skip)] + pub path: String, + + #[serde(skip)] + pub index: usize, + + pub tracks: Vec, +} + +#[derive(thiserror::Error, Debug)] +enum ReleaseError { + #[error("invalid release: {0}")] + Invalid(#[from] eyre::Error), +} + +impl Release { + pub async fn scan( + path: String, + index: usize, + client: Client, + bar: ProgressBar, + ) -> Result { + let content = get(&client, &path, Source::Chillhop).await?; + let html = Html::parse_document(&content); + + let textarea = html + .select(&RELEASE_TEXTAREA) + .next() + .ok_or(eyre!("unable to find textarea: {path}"))?; + + let mut release: Self = serde_json::from_str(&textarea.inner_html()).unwrap(); + release.path = path; + release.index = index; + release.tracks.reverse(); + + bar.inc(release.tracks.len() as u64); + + Ok(release) + } +} + +async fn scan_page( + number: usize, + client: &Client, + bar: ProgressBar, +) -> eyre::Result>>> { + let path = format!("releases/?page={number}"); + let content = get(client, &path, Source::Chillhop).await?; + let html = Html::parse_document(&content); + + let elements = html.select(&RELEASES); + Ok(elements + .enumerate() + .filter_map(|(i, x)| { + let label = x.select(&RELEASE_LABEL).next()?.inner_html(); + if label == "Compilation" { + return None; + } + + Some(Release::scan( + x.attr("href")?.to_string(), + (number * 12) + i, + client.clone(), + bar.clone(), + )) + }) + .collect()) +} + +pub async fn scrape() -> eyre::Result<()> { + const PAGE_COUNT: usize = 40; + const USER_AGENT: &str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"; + const TRACK_COUNT: u64 = 1625; + + const IGNORED_TRACKS: [u32; 3] = [ + 74707, // 404 + 21655, // Lyrics + 21773, // Lyrics + ]; + + const IGNORED_ARTISTS: [&str; 1] = [ + "Kenji", // Lyrics + ]; + + fs::create_dir_all("./cache/chillhop").await.unwrap(); + let client = Client::builder().user_agent(USER_AGENT).build().unwrap(); + + let futures = FuturesUnordered::new(); + let bar = ProgressBar::new(TRACK_COUNT + (12 * (PAGE_COUNT as u64))); + + let mut errors = Vec::new(); + + // This is slightly less memory efficient than I'd hope, but it is what it is. + for page in 0..=PAGE_COUNT { + bar.inc(12); + for x in scan_page(page, &client, bar.clone()).await? { + futures.push(x); + } + } + + let mut results: Vec> = futures.collect().await; + bar.finish_and_clear(); + + // I mean, is it... optimal? Absolutely not. Does it work? Yes. + eprintln!("sorting..."); + results.sort_by_key(|x| if let Ok(x) = x { x.index } else { 0 }); + results.reverse(); + + eprintln!("printing..."); + let mut printed = Vec::with_capacity(TRACK_COUNT as usize); // Lazy way to get rid of dupes. + for result in results { + let release = match result { + Ok(release) => release, + Err(error) => { + errors.push(error); + continue; + } + }; + + for mut track in release.tracks { + if IGNORED_TRACKS.contains(&track.file_id) { + continue; + } + + if IGNORED_ARTISTS.contains(&track.artists.as_ref()) { + continue; + } + + if printed.contains(&track.file_id) { + continue; + } + + printed.push(track.file_id); + + track.clean(); + println!("{}!{}", track.file_id, track.title); + } + } + + eprintln!("-- ERROR REPORT --"); + for error in errors { + eprintln!("{error}"); + } + + Ok(()) +} + +pub fn deserialize_u32_from_string<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + struct U32FromStringVisitor; + + impl<'de> Visitor<'de> for U32FromStringVisitor { + type Value = u32; + + fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + formatter.write_str("a string containing an unsigned 32-bit integer") + } + + fn visit_str(self, value: &str) -> Result + where + E: de::Error, + { + u32::from_str(value).map_err(|_| { + de::Error::invalid_value( + de::Unexpected::Str(value), + &"a valid unsigned 32-bit integer", + ) + }) + } + } + + deserializer.deserialize_str(U32FromStringVisitor) +} diff --git a/src/scrapers/lofigirl.rs b/src/scrapers/lofigirl.rs index 363efe0..9d0f5a0 100644 --- a/src/scrapers/lofigirl.rs +++ b/src/scrapers/lofigirl.rs @@ -5,19 +5,19 @@ use futures::{stream::FuturesOrdered, StreamExt}; use lazy_static::lazy_static; +use reqwest::Client; use scraper::{Html, Selector}; -const BASE_URL: &str = "https://lofigirl.com/wp-content/uploads/"; +use crate::scrapers::{get, Source}; lazy_static! { static ref SELECTOR: Selector = Selector::parse("html > body > pre > a").unwrap(); } -async fn parse(path: &str) -> eyre::Result> { - let response = reqwest::get(format!("{}{}", BASE_URL, path)).await?; - let document = response.text().await?; - +async fn parse(client: &Client, path: &str) -> eyre::Result> { + let document = get(client, path, super::Source::Lofigirl).await?; let html = Html::parse_document(&document); + Ok(html .select(&SELECTOR) .skip(5) @@ -30,9 +30,10 @@ async fn parse(path: &str) -> eyre::Result> { /// It's a bit hacky, and basically works by checking all of the years, then months, and then all of the files. /// This is done as a way to avoid recursion, since async rust really hates recursive functions. async fn scan(extension: &str, include_full: bool) -> eyre::Result> { + let client = Client::new(); let extension = &format!(".{}", extension); - let items = parse("").await?; + let items = parse(&client, "/").await?; let mut years: Vec = items .iter() @@ -48,19 +49,20 @@ async fn scan(extension: &str, include_full: bool) -> eyre::Result> let mut futures = FuturesOrdered::new(); for year in years { - let months = parse(&year.to_string()).await?; + let months = parse(&client, &year.to_string()).await?; for month in months { + let client = client.clone(); futures.push_back(async move { let path = format!("{}/{}", year, month); - let items = parse(&path).await.unwrap(); + let items = parse(&client, &path).await.unwrap(); items .into_iter() .filter_map(|x| { if x.ends_with(extension) { if include_full { - Some(format!("{BASE_URL}{path}{x}")) + Some(format!("{}/{path}{x}", Source::Lofigirl.url())) } else { Some(format!("{path}{x}")) }