restyle
@@ -0,0 +1,8 @@
|
|||||||
|
<svg viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g id="defaultAlbumImage">
|
||||||
|
<g id="defaultAlbumImage_2">
|
||||||
|
<path id="Vector" d="M21 31.5C26.799 31.5 31.5 26.799 31.5 21C31.5 15.201 26.799 10.5 21 10.5C15.201 10.5 10.5 15.201 10.5 21C10.5 26.799 15.201 31.5 21 31.5Z" stroke="#78777F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="Vector_2" d="M21 23.5C22.3807 23.5 23.5 22.3807 23.5 21C23.5 19.6193 22.3807 18.5 21 18.5C19.6193 18.5 18.5 19.6193 18.5 21C18.5 22.3807 19.6193 23.5 21 23.5Z" stroke="#78777F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 654 B |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 31 KiB |
@@ -0,0 +1,13 @@
|
|||||||
|
<svg viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g id="defaultPlaylistImage">
|
||||||
|
<g id="defaultPlaylistImage_2">
|
||||||
|
<g id="Group">
|
||||||
|
<path id="Vector" d="M14.1 29.3C15.6464 29.3 16.9 28.0464 16.9 26.5C16.9 24.9536 15.6464 23.7 14.1 23.7C12.5536 23.7 11.3 24.9536 11.3 26.5C11.3 28.0464 12.5536 29.3 14.1 29.3Z" stroke="#78777F" stroke-miterlimit="10" stroke-linecap="round"/>
|
||||||
|
<path id="Vector_2" d="M16.9 26.5V12.8" stroke="#78777F" stroke-miterlimit="10"/>
|
||||||
|
<path id="Vector_3" d="M21 24.2H29.3" stroke="#78777F" stroke-miterlimit="10"/>
|
||||||
|
<path id="Vector_4" d="M21 16.9H31.1" stroke="#78777F" stroke-miterlimit="10"/>
|
||||||
|
<path id="Vector_5" d="M21 20.5H30.2" stroke="#78777F" stroke-miterlimit="10"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 737 B |
@@ -0,0 +1,108 @@
|
|||||||
|
{
|
||||||
|
"serverId": "b88edfb4-5ea7-4601-95f8-6717695aca1d",
|
||||||
|
"usersOnLogin": true,
|
||||||
|
"rootDirs": [],
|
||||||
|
"excludeDirs": [],
|
||||||
|
"artistSeparators": [
|
||||||
|
";",
|
||||||
|
"/"
|
||||||
|
],
|
||||||
|
"artistSplitIgnoreList": [
|
||||||
|
"Peter, Paul & Mary",
|
||||||
|
"Huey Lewis & the News",
|
||||||
|
"Frank DeVol and His Orchestra",
|
||||||
|
"Josie & the Pussycats",
|
||||||
|
"Emerson, Lake & Palmer",
|
||||||
|
"Crosby & Nash",
|
||||||
|
"The Mamas & the Papas",
|
||||||
|
"Belle & Sebastian",
|
||||||
|
"Bob marley & the wailers",
|
||||||
|
"The Product G&B",
|
||||||
|
"FO&O",
|
||||||
|
"Nick Cave & the Bad Seeds",
|
||||||
|
"Judy & Mary",
|
||||||
|
"Nico & Vinz",
|
||||||
|
"Florence & The Machine",
|
||||||
|
"Rob Base & DJ E-Z Rock",
|
||||||
|
"AC/DC",
|
||||||
|
"England Dan & John Ford Coley",
|
||||||
|
"Smith & Thell",
|
||||||
|
"Nathaniel Rateliff & The Night Sweats",
|
||||||
|
"Brooks & Dunn",
|
||||||
|
"Sly & the Family Stone",
|
||||||
|
"Seals & Crofts",
|
||||||
|
"Tommy James & the Shondells",
|
||||||
|
"Ashford & Simpson",
|
||||||
|
"Loggins & Messina",
|
||||||
|
"Charles & Eddie",
|
||||||
|
"C&C Music Factory",
|
||||||
|
"Crosby, Stills, Nash & Young",
|
||||||
|
"Simon & Garfunkel",
|
||||||
|
"Echo & the Bunnymen",
|
||||||
|
"Martha Reeves and the Vandellas",
|
||||||
|
"C & C Music Factory",
|
||||||
|
"For King & Country",
|
||||||
|
"Maurice Williams & The Zodiacs",
|
||||||
|
"? and the Mysterians",
|
||||||
|
"Chloe x Halle",
|
||||||
|
"Kool & the Gang",
|
||||||
|
"Mumford & Sons",
|
||||||
|
"Gladys Knight & the Pips",
|
||||||
|
"Sonny & Cher",
|
||||||
|
"Ike & Tina Turner",
|
||||||
|
"KC & the Sunshine Band",
|
||||||
|
"Martha & the Vandellas",
|
||||||
|
"Peaches & Herb",
|
||||||
|
"Robson & Jerome",
|
||||||
|
"Womack & Womack",
|
||||||
|
"Booker T. & the M.G.'s",
|
||||||
|
"Wendy & Lisa",
|
||||||
|
"Durand Jones & The Indications",
|
||||||
|
"Herb Alpert & the Tijuana Brass",
|
||||||
|
"Diana Ross & the Supremes",
|
||||||
|
"Gerry & the Pacemakers",
|
||||||
|
"Joan Jett & the Blackhearts",
|
||||||
|
"Captain & Tennille",
|
||||||
|
"Mel & Kim",
|
||||||
|
"Blood, Sweat & Tears",
|
||||||
|
"St. Paul & The Broken Bones",
|
||||||
|
"Eric B. & Rakim",
|
||||||
|
"Katrina & the Waves",
|
||||||
|
"Hall & Oates",
|
||||||
|
"Yusuf / Cat Stevens",
|
||||||
|
"Mike + The Mechanics",
|
||||||
|
"Aly & AJ",
|
||||||
|
"Maddie & Tae",
|
||||||
|
"Sam & Dave",
|
||||||
|
"Phillips, Craig & Dean",
|
||||||
|
"Tyler, The Creator",
|
||||||
|
"Pepsi & Shirlie",
|
||||||
|
"DJ Jazzy Jeff & The Fresh Prince",
|
||||||
|
"Big Brother and the Holding Company",
|
||||||
|
"Tony! Toni! Ton\u00e9!",
|
||||||
|
"Hootie & the Blowfish",
|
||||||
|
"Earth, Wind & Fire",
|
||||||
|
"For King + Country",
|
||||||
|
"Dan + Shay",
|
||||||
|
"Tom Petty & The Heartbreakers"
|
||||||
|
],
|
||||||
|
"genreSeparators": [
|
||||||
|
";",
|
||||||
|
"/",
|
||||||
|
"&"
|
||||||
|
],
|
||||||
|
"extractFeaturedArtists": true,
|
||||||
|
"removeProdBy": true,
|
||||||
|
"removeRemasterInfo": true,
|
||||||
|
"mergeAlbums": false,
|
||||||
|
"cleanAlbumTitle": true,
|
||||||
|
"showAlbumsAsSingles": false,
|
||||||
|
"enablePeriodicScans": false,
|
||||||
|
"scanInterval": 10,
|
||||||
|
"enableWatchdog": false,
|
||||||
|
"showPlaylistsInFolderView": false,
|
||||||
|
"enablePlugins": true,
|
||||||
|
"lastfmApiKey": "",
|
||||||
|
"lastfmApiSecret": "",
|
||||||
|
"lastfmSessionKeys": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{"level": "INFO", "message": "Applied migration: Migration001EnsureSetupState", "timestamp": "2026-04-03T09:40:01.105450+00:00", "logger": "swingmusic.migrations", "module": "__init__", "function": "apply_migrations", "line": 97, "args": ["Migration001EnsureSetupState"], "who": "swingmusic.migrations"}
|
||||||
|
{"level": "INFO", "message": "Applied migration: Migration002SyncOwnerProjection", "timestamp": "2026-04-03T09:40:01.108148+00:00", "logger": "swingmusic.migrations", "module": "__init__", "function": "apply_migrations", "line": 97, "args": ["Migration002SyncOwnerProjection"], "who": "swingmusic.migrations"}
|
||||||
|
{"level": "INFO", "message": "Applied migration: Migration003BackfillLyricsStatus", "timestamp": "2026-04-03T09:40:01.111629+00:00", "logger": "swingmusic.migrations", "module": "__init__", "function": "apply_migrations", "line": 97, "args": ["Migration003BackfillLyricsStatus"], "who": "swingmusic.migrations"}
|
||||||
|
{"level": "INFO", "message": "Applied migration: Migration004BackfillUserRootOwnership", "timestamp": "2026-04-03T09:40:01.113764+00:00", "logger": "swingmusic.migrations", "module": "__init__", "function": "apply_migrations", "line": 97, "args": ["Migration004BackfillUserRootOwnership"], "who": "swingmusic.migrations"}
|
||||||
|
{"level": "INFO", "message": "Applied migration: Migration005NormalizeTrackedPlaylists", "timestamp": "2026-04-03T09:40:01.120297+00:00", "logger": "swingmusic.migrations", "module": "__init__", "function": "apply_migrations", "line": 97, "args": ["Migration005NormalizeTrackedPlaylists"], "who": "swingmusic.migrations"}
|
||||||
|
{"level": "INFO", "message": "Enhanced search API registered", "timestamp": "2026-04-03T09:40:01.402883+00:00", "logger": "swingmusic.api.enhanced_search", "module": "enhanced_search", "function": "register_enhanced_search_api", "line": 513, "args": [], "who": "swingmusic.api.enhanced_search"}
|
||||||
|
{"level": "INFO", "message": "Boot smoke check passed (239 routes).", "timestamp": "2026-04-03T09:40:01.506313+00:00", "logger": "swingmusic.app_builder", "module": "app_builder", "function": "run_boot_smoke_checks", "line": 283, "args": [239], "who": "swingmusic.app_builder"}
|
||||||
|
{"level": "INFO", "message": "Enhanced search API registered", "timestamp": "2026-04-03T09:41:30.866798+00:00", "logger": "swingmusic.api.enhanced_search", "module": "enhanced_search", "function": "register_enhanced_search_api", "line": 513, "args": [], "who": "swingmusic.api.enhanced_search"}
|
||||||
|
{"level": "INFO", "message": "Boot smoke check passed (239 routes).", "timestamp": "2026-04-03T09:41:30.896996+00:00", "logger": "swingmusic.app_builder", "module": "app_builder", "function": "run_boot_smoke_checks", "line": 283, "args": [239], "who": "swingmusic.app_builder"}
|
||||||
@@ -23,6 +23,7 @@ VOLUME /config
|
|||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends \
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
build-essential \
|
||||||
gcc \
|
gcc \
|
||||||
libev-dev \
|
libev-dev \
|
||||||
ffmpeg \
|
ffmpeg \
|
||||||
|
|||||||
@@ -184,7 +184,100 @@ docker run --name swingmusic -p 1970:1970 \
|
|||||||
|
|
||||||
### CasaOS
|
### CasaOS
|
||||||
|
|
||||||
For CasaOS custom-app deployment, use:
|
Use this CasaOS custom-app compose.
|
||||||
|
It runs both the main backend API and the bundled webclient from the same `swingmusic` container image.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
name: swingmusic
|
||||||
|
services:
|
||||||
|
swingmusic:
|
||||||
|
cpu_shares: 90
|
||||||
|
command: []
|
||||||
|
container_name: swingmusic
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: 10000M
|
||||||
|
hostname: swingmusic
|
||||||
|
image: ghcr.io/dvorinka/swingmusic-extended:latest
|
||||||
|
labels:
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/SwingMusic/icon.png
|
||||||
|
ports:
|
||||||
|
- mode: ingress
|
||||||
|
target: 1970
|
||||||
|
published: "1970"
|
||||||
|
protocol: tcp
|
||||||
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- type: bind
|
||||||
|
source: /DATA/AppData/swingmusic/config
|
||||||
|
target: /config
|
||||||
|
- type: bind
|
||||||
|
source: /DATA/Media/Music
|
||||||
|
target: /music
|
||||||
|
devices: []
|
||||||
|
cap_add: []
|
||||||
|
environment:
|
||||||
|
- SWINGMUSIC_CLIENT_DIR=/app/client
|
||||||
|
- SWINGMUSIC_PORT=1970
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
privileged: false
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
name: swingmusic_default
|
||||||
|
x-casaos:
|
||||||
|
architectures:
|
||||||
|
- amd64
|
||||||
|
author: SwingMX
|
||||||
|
category: Media
|
||||||
|
description:
|
||||||
|
en_US: >
|
||||||
|
Swing Music is a fast, beautiful, self-hosted music player designed for
|
||||||
|
your local audio files, offering a sleek experience akin to Spotify but
|
||||||
|
powered by your own music library. Simply run the app and access your
|
||||||
|
music collection effortlessly through a web browser.
|
||||||
|
|
||||||
|
|
||||||
|
Swing Music curates Daily Mixes based on your listening habits, ensures a clean and consistent library with metadata normalization, and supports album versioning (e.g., Deluxe, Remaster) alongside related artist and album recommendations. Browse your music library via folder view, manage playlists, and enjoy a seamless listening experience with silence detection and cross-fade. Additional features include listening statistics, lyrics view, Last.fm scrobbling, multi-user support, and personalized collections for grouping albums and artists.
|
||||||
|
|
||||||
|
|
||||||
|
With its stunning browser-based interface and robust functionality, Swing Music is the perfect choice for music enthusiasts seeking a beautiful and practical way to manage and enjoy their local music collection.
|
||||||
|
developer: SwingMX
|
||||||
|
hostname: ""
|
||||||
|
icon: https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/SwingMusic/icon.png
|
||||||
|
index: /
|
||||||
|
is_uncontrolled: false
|
||||||
|
main: swingmusic
|
||||||
|
port_map: "1970"
|
||||||
|
scheme: http
|
||||||
|
store_app_id: swingmusic
|
||||||
|
tagline:
|
||||||
|
en_US: Swing Music is a beautifully designed, self-hosted music streaming
|
||||||
|
server. Like a cooler Spotify ... but bring your own music.
|
||||||
|
thumbnail: https://cdn.jsdelivr.net/gh/IceWhaleTech/CasaOS-AppStore@main/Apps/SwingMusic/thumbnail.png
|
||||||
|
tips:
|
||||||
|
before_install:
|
||||||
|
en_US: >
|
||||||
|
When you first start Swing Music, it will ask you to pick music
|
||||||
|
directory: Where do you want to look for music?
|
||||||
|
|
||||||
|
select "Specific directories" Option, and select "/music" and rescan.
|
||||||
|
|
||||||
|
|
||||||
|
Default Account
|
||||||
|
|
||||||
|
| Name | Password |
|
||||||
|
|
||||||
|
| -------- | -------- |
|
||||||
|
|
||||||
|
| `admin` | `admin` |
|
||||||
|
title:
|
||||||
|
custom: ""
|
||||||
|
en_us: Swing Music
|
||||||
|
```
|
||||||
|
|
||||||
|
Quick references:
|
||||||
|
|
||||||
- [`docker-compose.casaos.yml`](/home/tdvorak/Desktop/PROG+HTML/SwingMusic/docker-compose.casaos.yml)
|
- [`docker-compose.casaos.yml`](/home/tdvorak/Desktop/PROG+HTML/SwingMusic/docker-compose.casaos.yml)
|
||||||
- [`CASAOS_DEPLOYMENT.md`](/home/tdvorak/Desktop/PROG+HTML/SwingMusic/CASAOS_DEPLOYMENT.md)
|
- [`CASAOS_DEPLOYMENT.md`](/home/tdvorak/Desktop/PROG+HTML/SwingMusic/CASAOS_DEPLOYMENT.md)
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<svg viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g id="defaultAlbumImage">
|
||||||
|
<g id="defaultAlbumImage_2">
|
||||||
|
<path id="Vector" d="M21 31.5C26.799 31.5 31.5 26.799 31.5 21C31.5 15.201 26.799 10.5 21 10.5C15.201 10.5 10.5 15.201 10.5 21C10.5 26.799 15.201 31.5 21 31.5Z" stroke="#78777F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
<path id="Vector_2" d="M21 23.5C22.3807 23.5 23.5 22.3807 23.5 21C23.5 19.6193 22.3807 18.5 21 18.5C19.6193 18.5 18.5 19.6193 18.5 21C18.5 22.3807 19.6193 23.5 21 23.5Z" stroke="#78777F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 654 B |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 31 KiB |
@@ -0,0 +1,13 @@
|
|||||||
|
<svg viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g id="defaultPlaylistImage">
|
||||||
|
<g id="defaultPlaylistImage_2">
|
||||||
|
<g id="Group">
|
||||||
|
<path id="Vector" d="M14.1 29.3C15.6464 29.3 16.9 28.0464 16.9 26.5C16.9 24.9536 15.6464 23.7 14.1 23.7C12.5536 23.7 11.3 24.9536 11.3 26.5C11.3 28.0464 12.5536 29.3 14.1 29.3Z" stroke="#78777F" stroke-miterlimit="10" stroke-linecap="round"/>
|
||||||
|
<path id="Vector_2" d="M16.9 26.5V12.8" stroke="#78777F" stroke-miterlimit="10"/>
|
||||||
|
<path id="Vector_3" d="M21 24.2H29.3" stroke="#78777F" stroke-miterlimit="10"/>
|
||||||
|
<path id="Vector_4" d="M21 16.9H31.1" stroke="#78777F" stroke-miterlimit="10"/>
|
||||||
|
<path id="Vector_5" d="M21 20.5H30.2" stroke="#78777F" stroke-miterlimit="10"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 737 B |
@@ -0,0 +1,108 @@
|
|||||||
|
{
|
||||||
|
"serverId": "f1112583-0a04-4276-950e-14b673d78cc2",
|
||||||
|
"usersOnLogin": true,
|
||||||
|
"rootDirs": [],
|
||||||
|
"excludeDirs": [],
|
||||||
|
"artistSeparators": [
|
||||||
|
";",
|
||||||
|
"/"
|
||||||
|
],
|
||||||
|
"artistSplitIgnoreList": [
|
||||||
|
"Durand Jones & The Indications",
|
||||||
|
"Gerry & the Pacemakers",
|
||||||
|
"Earth, Wind & Fire",
|
||||||
|
"Josie & the Pussycats",
|
||||||
|
"Captain & Tennille",
|
||||||
|
"Tony! Toni! Ton\u00e9!",
|
||||||
|
"Blood, Sweat & Tears",
|
||||||
|
"Katrina & the Waves",
|
||||||
|
"Yusuf / Cat Stevens",
|
||||||
|
"Crosby, Stills, Nash & Young",
|
||||||
|
"Joan Jett & the Blackhearts",
|
||||||
|
"Diana Ross & the Supremes",
|
||||||
|
"Mike + The Mechanics",
|
||||||
|
"Charles & Eddie",
|
||||||
|
"Sam & Dave",
|
||||||
|
"Ike & Tina Turner",
|
||||||
|
"Gladys Knight & the Pips",
|
||||||
|
"Tommy James & the Shondells",
|
||||||
|
"Phillips, Craig & Dean",
|
||||||
|
"Smith & Thell",
|
||||||
|
"Nico & Vinz",
|
||||||
|
"Ashford & Simpson",
|
||||||
|
"Loggins & Messina",
|
||||||
|
"Big Brother and the Holding Company",
|
||||||
|
"? and the Mysterians",
|
||||||
|
"Kool & the Gang",
|
||||||
|
"Peter, Paul & Mary",
|
||||||
|
"Brooks & Dunn",
|
||||||
|
"St. Paul & The Broken Bones",
|
||||||
|
"Tom Petty & The Heartbreakers",
|
||||||
|
"C&C Music Factory",
|
||||||
|
"Florence & The Machine",
|
||||||
|
"Sonny & Cher",
|
||||||
|
"The Product G&B",
|
||||||
|
"Robson & Jerome",
|
||||||
|
"Dan + Shay",
|
||||||
|
"Martha & the Vandellas",
|
||||||
|
"Simon & Garfunkel",
|
||||||
|
"Maurice Williams & The Zodiacs",
|
||||||
|
"Judy & Mary",
|
||||||
|
"Emerson, Lake & Palmer",
|
||||||
|
"Echo & the Bunnymen",
|
||||||
|
"Frank DeVol and His Orchestra",
|
||||||
|
"Mumford & Sons",
|
||||||
|
"Chloe x Halle",
|
||||||
|
"Hall & Oates",
|
||||||
|
"Pepsi & Shirlie",
|
||||||
|
"C & C Music Factory",
|
||||||
|
"Womack & Womack",
|
||||||
|
"Bob marley & the wailers",
|
||||||
|
"Martha Reeves and the Vandellas",
|
||||||
|
"AC/DC",
|
||||||
|
"Belle & Sebastian",
|
||||||
|
"DJ Jazzy Jeff & The Fresh Prince",
|
||||||
|
"Sly & the Family Stone",
|
||||||
|
"Nick Cave & the Bad Seeds",
|
||||||
|
"For King + Country",
|
||||||
|
"Booker T. & the M.G.'s",
|
||||||
|
"Peaches & Herb",
|
||||||
|
"England Dan & John Ford Coley",
|
||||||
|
"Crosby & Nash",
|
||||||
|
"Rob Base & DJ E-Z Rock",
|
||||||
|
"Maddie & Tae",
|
||||||
|
"Tyler, The Creator",
|
||||||
|
"Huey Lewis & the News",
|
||||||
|
"KC & the Sunshine Band",
|
||||||
|
"Eric B. & Rakim",
|
||||||
|
"Nathaniel Rateliff & The Night Sweats",
|
||||||
|
"Seals & Crofts",
|
||||||
|
"Herb Alpert & the Tijuana Brass",
|
||||||
|
"For King & Country",
|
||||||
|
"Mel & Kim",
|
||||||
|
"Aly & AJ",
|
||||||
|
"The Mamas & the Papas",
|
||||||
|
"Wendy & Lisa",
|
||||||
|
"FO&O",
|
||||||
|
"Hootie & the Blowfish"
|
||||||
|
],
|
||||||
|
"genreSeparators": [
|
||||||
|
"&",
|
||||||
|
"/",
|
||||||
|
";"
|
||||||
|
],
|
||||||
|
"extractFeaturedArtists": true,
|
||||||
|
"removeProdBy": true,
|
||||||
|
"removeRemasterInfo": true,
|
||||||
|
"mergeAlbums": false,
|
||||||
|
"cleanAlbumTitle": true,
|
||||||
|
"showAlbumsAsSingles": false,
|
||||||
|
"enablePeriodicScans": false,
|
||||||
|
"scanInterval": 10,
|
||||||
|
"enableWatchdog": false,
|
||||||
|
"showPlaylistsInFolderView": false,
|
||||||
|
"enablePlugins": true,
|
||||||
|
"lastfmApiKey": "",
|
||||||
|
"lastfmApiSecret": "",
|
||||||
|
"lastfmSessionKeys": {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{"level": "INFO", "message": "Applied migration: Migration001EnsureSetupState", "timestamp": "2026-04-03T09:39:04.140114+00:00", "logger": "swingmusic.migrations", "module": "__init__", "function": "apply_migrations", "line": 97, "args": ["Migration001EnsureSetupState"], "who": "swingmusic.migrations"}
|
||||||
|
{"level": "INFO", "message": "Applied migration: Migration002SyncOwnerProjection", "timestamp": "2026-04-03T09:39:04.142595+00:00", "logger": "swingmusic.migrations", "module": "__init__", "function": "apply_migrations", "line": 97, "args": ["Migration002SyncOwnerProjection"], "who": "swingmusic.migrations"}
|
||||||
|
{"level": "INFO", "message": "Applied migration: Migration003BackfillLyricsStatus", "timestamp": "2026-04-03T09:39:04.145272+00:00", "logger": "swingmusic.migrations", "module": "__init__", "function": "apply_migrations", "line": 97, "args": ["Migration003BackfillLyricsStatus"], "who": "swingmusic.migrations"}
|
||||||
|
{"level": "INFO", "message": "Applied migration: Migration004BackfillUserRootOwnership", "timestamp": "2026-04-03T09:39:04.146550+00:00", "logger": "swingmusic.migrations", "module": "__init__", "function": "apply_migrations", "line": 97, "args": ["Migration004BackfillUserRootOwnership"], "who": "swingmusic.migrations"}
|
||||||
|
{"level": "INFO", "message": "Applied migration: Migration005NormalizeTrackedPlaylists", "timestamp": "2026-04-03T09:39:04.149525+00:00", "logger": "swingmusic.migrations", "module": "__init__", "function": "apply_migrations", "line": 97, "args": ["Migration005NormalizeTrackedPlaylists"], "who": "swingmusic.migrations"}
|
||||||
|
{"level": "INFO", "message": "Enhanced search API registered", "timestamp": "2026-04-03T09:39:04.429546+00:00", "logger": "swingmusic.api.enhanced_search", "module": "enhanced_search", "function": "register_enhanced_search_api", "line": 513, "args": [], "who": "swingmusic.api.enhanced_search"}
|
||||||
|
{"level": "INFO", "message": "Boot smoke check passed (239 routes).", "timestamp": "2026-04-03T09:39:04.530130+00:00", "logger": "swingmusic.app_builder", "module": "app_builder", "function": "run_boot_smoke_checks", "line": 283, "args": [239], "who": "swingmusic.app_builder"}
|
||||||
@@ -2,6 +2,7 @@ name: swingmusic
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
swingmusic:
|
swingmusic:
|
||||||
|
build: .
|
||||||
image: ${SWINGMUSIC_IMAGE:-swingmusic-local:latest}
|
image: ${SWINGMUSIC_IMAGE:-swingmusic-local:latest}
|
||||||
container_name: swingmusic
|
container_name: swingmusic
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -26,7 +27,7 @@ services:
|
|||||||
image: docker.dragonflydb.io/dragonflydb/dragonfly
|
image: docker.dragonflydb.io/dragonflydb/dragonfly
|
||||||
container_name: swingmusic-dragonfly
|
container_name: swingmusic-dragonfly
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
command: --dir=/data --logtostdout
|
command: --dir=/data --logtostdout --proactor_threads=${DRAGONFLY_THREADS:-4}
|
||||||
ports:
|
ports:
|
||||||
- "${DRAGONFLY_PORT:-6379}:6379"
|
- "${DRAGONFLY_PORT:-6379}:6379"
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- dragonfly_data:/data
|
- dragonfly_data:/data
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
command: --dir=/data --logtostdout
|
command: --dir=/data --logtostdout --proactor_threads=${DRAGONFLY_THREADS:-4}
|
||||||
networks:
|
networks:
|
||||||
- swingmusic-network
|
- swingmusic-network
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
|||||||
@@ -28,3 +28,5 @@ pystray>=0.19.5
|
|||||||
waitress==3.0.2; sys_platform == 'win32'
|
waitress==3.0.2; sys_platform == 'win32'
|
||||||
bjoern>=3.2.2; sys_platform != 'win32'
|
bjoern>=3.2.2; sys_platform != 'win32'
|
||||||
redis>=5.2.1
|
redis>=5.2.1
|
||||||
|
aiohttp>=3.13.3
|
||||||
|
aiofiles>=25.1.0
|
||||||
|
|||||||