@ -45,7 +45,7 @@ const DOCS_SECTIONS = [
content : ( ) => `
< div class = "docs-subsection" id = "gs-overview" >
< h3 class = "docs-subsection-title" > Overview < / h 3 >
< p class = "docs-text" > SoulSync is a self - hosted music download , sync , and library management platform . It connects to < strong > Spotify < / s t r o n g > , < s t r o n g > A p p l e M u s i c / i T u n e s < / s t r o n g > , < s t r o n g > D e e z e r < / s t r o n g > , < s t r o n g > Ti d a l < / s t r o n g > , < s t r o n g > Q o b u z < / s t r o n g > , < s t r o n g > Y o u T u b e < / s t r o n g > , a n d < s t r o n g > B e a t p o r t < / s t r o n g > f o r m e t a d a t a , a n d d o w n l o a d s f r o m < s t r o n g > S o u l s e e k < / s t r o n g > , < s t r o n g > Y o u T u b e < / s t r o n g > , < s t r o n g > T i d a l < / s t r o n g > , < s t r o n g > Q o b u z < / s t r o n g > , < s t r o n g > H i F i < / s t r o n g > , a n d < s t r o n g > D e e z e r < / s t r o n g > . Y o u r l i b r a r y i s s e r v e d t h r o u g h < s t r o n g > P l e x < / s t r o n g > , < s t r o n g > J e l l y f i n < / s t r o n g > , o r < s t r o n g > N a v i d r o m e < / s t r o n g > . < / p >
< p class = "docs-text" > SoulSync is a self - hosted music download , sync , and library management platform . It connects to < strong > Spotify < / s t r o n g > , < s t r o n g > A p p l e M u s i c / i T u n e s < / s t r o n g > , < s t r o n g > D e e z e r < / s t r o n g > , < s t r o n g > Di s c o g s < / s t r o n g > , < s t r o n g > Ti d a l < / s t r o n g > , < s t r o n g > Q o b u z < / s t r o n g > , < s t r o n g > Y o u T u b e < / s t r o n g > , a n d < s t r o n g > B e a t p o r t < / s t r o n g > f o r m e t a d a t a , a n d d o w n l o a d s f r o m < s t r o n g > S o u l s e e k < / s t r o n g > , < s t r o n g > Y o u T u b e < / s t r o n g > , < s t r o n g > T i d a l < / s t r o n g > , < s t r o n g > Q o b u z < / s t r o n g > , < s t r o n g > H i F i < / s t r o n g > , a n d < s t r o n g > D e e z e r < / s t r o n g > . Y o u r l i b r a r y i s s e r v e d t h r o u g h < s t r o n g > P l e x < / s t r o n g > , < s t r o n g > J e l l y f i n / E m b y < / s t r o n g > , o r < s t r o n g > N a v i d r o m e < / s t r o n g > . < / p >
$ { docsImg ( 'gs-overview.jpg' , 'SoulSync dashboard overview' ) }
< div class = "docs-features" >
< div class = "docs-feature-card" > < h4 > & # x1F3B5 ; Download Music < / h 4 > < p > S e a r c h a n d d o w n l o a d t r a c k s i n F L A C , M P 3 , a n d m o r e f r o m 6 s o u r c e s ( S o u l s e e k , Y o u T u b e , T i d a l , Q o b u z , H i F i , D e e z e r ) , w i t h a u t o m a t i c m e t a d a t a t a g g i n g a n d f i l e o r g a n i z a t i o n . < / p > < / d i v >
@ -81,9 +81,10 @@ const DOCS_SECTIONS = [
< tr > < td > < strong > Tidal < / s t r o n g > < / t d > < t d > D o w n l o a d s o u r c e + p l a y l i s t i m p o r t + e n r i c h m e n t < / t d > < t d > O A u t h & m d a s h ; C l i e n t I D + S e c r e t < / t d > < / t r >
< tr > < td > < strong > Qobuz < / s t r o n g > < / t d > < t d > D o w n l o a d s o u r c e + e n r i c h m e n t < / t d > < t d > U s e r n a m e + P a s s w o r d ( a p p I D a u t o - f e t c h e d ) < / t d > < / t r >
< tr > < td > < strong > HiFi < / s t r o n g > < / t d > < t d > D o w n l o a d s o u r c e & m d a s h ; f r e e l o s s l e s s v i a c o m m u n i t y A P I < / t d > < t d > N o n e < / t d > < / t r >
< tr > < td > < strong > Deezer < / s t r o n g > < / t d > < t d > D o w n l o a d s o u r c e + m e t a d a t a f a l l b a c k < / t d > < t d > A R L c o o k i e t o k e n < / t d > < / t r >
< tr > < td > < strong > Deezer < / s t r o n g > < / t d > < t d > D o w n l o a d s o u r c e + m e t a d a t a f a l l b a c k + u s e r p l a y l i s t s < / t d > < t d > A R L c o o k i e t o k e n < / t d > < / t r >
< tr > < td > < strong > Discogs < / s t r o n g > < / t d > < t d > E n r i c h m e n t & m d a s h ; g e n r e s , s t y l e s , l a b e l s , c a t a l o g n u m b e r s , c o m m u n i t y r a t i n g s < / t d > < t d > P e r s o n a l A c c e s s T o k e n ( f r e e ) < / t d > < / t r >
< tr > < td > < strong > Plex < / s t r o n g > < / t d > < t d > M e d i a s e r v e r & m d a s h ; l i b r a r y s c a n n i n g , m e t a d a t a s y n c , a u d i o s t r e a m i n g < / t d > < t d > U R L + T o k e n < / t d > < / t r >
< tr > < td > < strong > Jellyfin < / s t r o n g > < / t d > < t d > M e d i a s e r v e r & m d a s h ; l i b r a r y s c a n n i n g , a u d i o s t r e a m i n g < / t d > < t d > U R L + A P I K e y < / t d > < / t r >
< tr > < td > < strong > Jellyfin / Emby < / s t r o n g > < / t d > < t d > M e d i a s e r v e r & m d a s h ; l i b r a r y s c a n n i n g , p l a y l i s t s y n c , a u d i o s t r e a m i n g < / t d > < t d > U R L + A P I K e y < / t d > < / t r >
< tr > < td > < strong > Navidrome < / s t r o n g > < / t d > < t d > M e d i a s e r v e r & m d a s h ; a u t o - d e t e c t s c h a n g e s , a u d i o s t r e a m i n g < / t d > < t d > U R L + U s e r n a m e + P a s s w o r d < / t d > < / t r >
< tr > < td > < strong > Last . fm < / s t r o n g > < / t d > < t d > E n r i c h m e n t & m d a s h ; l i s t e n e r s t a t s , t a g s , b i o s , s i m i l a r a r t i s t s < / t d > < t d > A P I K e y < / t d > < / t r >
< tr > < td > < strong > Genius < / s t r o n g > < / t d > < t d > E n r i c h m e n t & m d a s h ; l y r i c s , d e s c r i p t i o n s , a l t e r n a t e n a m e s < / t d > < t d > A c c e s s T o k e n < / t d > < / t r >
@ -459,6 +460,8 @@ const DOCS_SECTIONS = [
icon : '/static/dashboard.jpg' ,
children : [
{ id : 'dash-overview' , title : 'Overview & Stats' } ,
{ id : 'dash-history' , title : 'Download History' } ,
{ id : 'dash-global-search' , title : 'Global Search' } ,
{ id : 'dash-workers' , title : 'Enrichment Workers' } ,
{ id : 'dash-tools' , title : 'Tool Cards' } ,
{ id : 'dash-retag' , title : 'Retag Tool' } ,
@ -473,6 +476,28 @@ const DOCS_SECTIONS = [
< p class = "docs-text" > Stats update in real - time via WebSocket & mdash ; no page refresh needed . < / p >
$ { docsImg ( 'dash-overview.jpg' , 'Dashboard overview' ) }
< / d i v >
< div class = "docs-subsection" id = "dash-history" >
< h3 class = "docs-subsection-title" > Download History < / h 3 >
< p class = "docs-text" > Click < strong > Download History < / s t r o n g > i n t h e R e c e n t A c t i v i t y s e c t i o n t o v i e w a p e r s i s t e n t l o g o f e v e r y d o w n l o a d e d a n d i m p o r t e d t r a c k . E a c h e n t r y i s a c o l l a p s i b l e c a r d & m d a s h ; c l i c k t o e x p a n d a n d r e v e a l s o u r c e p r o v e n a n c e d e t a i l s . < / p >
< ul class = "docs-list" >
< li > < strong > Expected vs Downloaded < / s t r o n g > & m d a s h ; S h o w s w h a t y o u a s k e d f o r a n d w h a t t h e s o u r c e a c t u a l l y p r o v i d e d . M i s m a t c h e s a r e h i g h l i g h t e d i n r e d . < / l i >
< li > < strong > Source file < / s t r o n g > & m d a s h ; T h e o r i g i n a l f i l e n a m e f r o m t h e p e e r ( S o u l s e e k ) o r i n t e r n a l I D ( s t r e a m i n g s o u r c e s ) < / l i >
< li > < strong > AcoustID badge < / s t r o n g > & m d a s h ; C o l o r - c o d e d v e r i f i c a t i o n r e s u l t : V e r i f i e d ( g r e e n ) , F a i l e d ( r e d ) , S k i p p e d ( o r a n g e ) , O f f ( g r a y ) < / l i >
< li > < strong > Source badges < / s t r o n g > & m d a s h ; D o w n l o a d s o u r c e ( S o u l s e e k / T i d a l / Q o b u z / Y o u T u b e / H i F i / D e e z e r ) a n d q u a l i t y ( F L A C / M P 3 / e t c . ) < / l i >
< li > < strong > Tabs < / s t r o n g > & m d a s h ; S w i t c h b e t w e e n D o w n l o a d s a n d S e r v e r I m p o r t s . S o u r c e b r e a k d o w n b a r s h o w s c o u n t s p e r d o w n l o a d s o u r c e . < / l i >
< / u l >
< / d i v >
< div class = "docs-subsection" id = "dash-global-search" >
< h3 class = "docs-subsection-title" > Global Search < / h 3 >
< p class = "docs-text" > The search bar at the top of every page is the < strong > Global Search < / s t r o n g > . T y p e a n y a r t i s t , a l b u m , o r t r a c k n a m e t o s e a r c h a c r o s s a l l c o n f i g u r e d m e t a d a t a s o u r c e s . R e s u l t s a p p e a r i n a d r o p d o w n o r g a n i z e d b y c a t e g o r y . < / p >
< ul class = "docs-list" >
< li > < strong > Library artists < / s t r o n g > & m d a s h ; A r t i s t s a l r e a d y i n y o u r l i b r a r y ( s h o w n f i r s t w i t h a " L i b r a r y " b a d g e ) < / l i >
< li > < strong > Artists < / s t r o n g > & m d a s h ; E x t e r n a l a r t i s t r e s u l t s f r o m S p o t i f y / i T u n e s / D e e z e r < / l i >
< li > < strong > Albums & amp ; Singles < / s t r o n g > & m d a s h ; C l i c k t o o p e n t h e d o w n l o a d m o d a l d i r e c t l y < / l i >
< li > < strong > Tracks < / s t r o n g > & m d a s h ; C l i c k t o o p e n t h e d o w n l o a d m o d a l , o r u s e t h e p l a y b u t t o n t o s t r e a m < / l i >
< li > Downloads started from Global Search create < strong > download bubbles < / s t r o n g > o n t h e D a s h b o a r d a n d S e a r c h p a g e , s a m e a s E n h a n c e d S e a r c h < / l i >
< / u l >
< / d i v >
< div class = "docs-subsection" id = "dash-workers" >
< h3 class = "docs-subsection-title" > Enrichment Workers < / h 3 >
< p class = "docs-text" > The header bar contains < strong > enrichment worker icons < / s t r o n g > f o r e a c h m e t a d a t a s e r v i c e . H o v e r o v e r a n y i c o n t o s e e i t s c u r r e n t s t a t u s , w h a t i t e m i t ' s p r o c e s s i n g , a n d p r o g r e s s c o u n t s ( e . g . , " 1 4 2 / 5 0 0 m a t c h e d " ) . < / p >
@ -544,8 +569,31 @@ const DOCS_SECTIONS = [
< li > < strong > Duplicate Cleaner < / s t r o n g > & m d a s h ; I d e n t i f i e s d u p l i c a t e t r a c k s b y c o m p a r i n g t i t l e , a r t i s t , a l b u m , a n d d u r a t i o n . L e t s y o u r e v i e w d u p l i c a t e s a n d c h o o s e w h i c h v e r s i o n t o k e e p ( t y p i c a l l y t h e h i g h e r - q u a l i t y o n e ) . F r e e s d i s k s p a c e b y r e m o v i n g r e d u n d a n t f i l e s . < / l i >
< li > < strong > Database Updater < / s t r o n g > & m d a s h ; R e f r e s h e s y o u r l i b r a r y d a t a b a s e b y s c a n n i n g y o u r m e d i a s e r v e r . < s t r o n g > I n c r e m e n t a l < / s t r o n g > m o d e o n l y a d d s n e w c o n t e n t ; < s t r o n g > F u l l R e f r e s h < / s t r o n g > r e b u i l d s t h e e n t i r e d a t a b a s e . < s t r o n g > D e e p S c a n < / s t r o n g > p e r f o r m s a f u l l c o m p a r i s o n w i t h o u t l o s i n g a n y e n r i c h m e n t d a t a f r o m s e r v i c e s . < / l i >
< li > < strong > Metadata Updater < / s t r o n g > & m d a s h ; T r i g g e r s a l l e n r i c h m e n t w o r k e r s s i m u l t a n e o u s l y w i t h r e s e t f l a g s , f o r c i n g t h e m t o r e - c h e c k e v e r y i t e m i n y o u r l i b r a r y a g a i n s t a l l c o n n e c t e d s e r v i c e s ( M u s i c B r a i n z , S p o t i f y , i T u n e s , L a s t . f m , D e e z e r , A u d i o D B , G e n i u s , T i d a l , Q o b u z ) . U s e f u l a f t e r c o n n e c t i n g a n e w s e r v i c e o r w h e n m e t a d a t a s e e m s i n c o m p l e t e . < / l i >
< li > < strong > Repair Worker < / s t r o n g > & m d a s h ; B a c k g r o u n d s e r v i c e th a t s c a n s r e c e n t l y d o w n l o a d e d f o l d e r s a n d r e p a i r s t r a c k m e t a d a t a . I t r e a d s a l b u m I D s f r o m f i l e t a g s , f e t c h e s o f f i c i a l t r a c k l i s t s f r o m S p o t i f y o r M u s i c B r a i n z , a n d f i x e s i n c o r r e c t o r m i s s i n g t r a c k n u m b e r s . R u n s a u t o m a t i c a l l y a f t e r b a t c h d o w n l o a d s c o m p l e t e a n d c a n b e p a u s e d / r e s u m e d f r o m t h e d a s h b o a r d . < / l i >
< li > < strong > Repair Worker < / s t r o n g > & m d a s h ; B a c k g r o u n d s e r v i c e wi t h 1 6 a u t o m a t e d r e p a i r j o b s . O p e n < s t r o n g > L i b r a r y M a i n t e n a n c e < / s t r o n g > f r o m t h e d a s h b o a r d t o v i e w a l l j o b s , e n a b l e / d i s a b l e t h e m , a n d t r i g g e r m a n u a l r u n s . E a c h j o b r u n s o n a c o n f i g u r a b l e s c h e d u l e a n d c r e a t e s f i n d i n g s t h a t c a n b e r e v i e w e d a n d f i x e d i n d i v i d u a l l y o r i n b u l k . < / l i >
< / u l >
< p class = "docs-text" > < strong > Repair Jobs : < / s t r o n g > < / p >
< table class = "docs-table" >
< thead > < tr > < th > Job < / t h > < t h > W h a t I t D o e s < / t h > < / t r > < / t h e a d >
< tbody >
< tr > < td > Track Number Repair < / t d > < t d > F i x e s m i s s i n g o r i n c o r r e c t t r a c k n u m b e r s b y c o m p a r i n g a g a i n s t o f f i c i a l t r a c k l i s t s < / t d > < / t r >
< tr > < td > Orphan File Detector < / t d > < t d > F i n d s a u d i o f i l e s i n y o u r t r a n s f e r f o l d e r n o t t r a c k e d i n t h e d a t a b a s e . C a n m o v e t o s t a g i n g o r d e l e t e . < / t d > < / t r >
< tr > < td > Dead File Cleaner < / t d > < t d > R e m o v e s d a t a b a s e e n t r i e s p o i n t i n g t o f i l e s t h a t n o l o n g e r e x i s t o n d i s k < / t d > < / t r >
< tr > < td > Duplicate Detector < / t d > < t d > I d e n t i f i e s d u p l i c a t e t r a c k s b y f i n g e r p r i n t o r m e t a d a t a m a t c h < / t d > < / t r >
< tr > < td > AcoustID Scanner < / t d > < t d > B a t c h a u d i o f i n g e r p r i n t v e r i f i c a t i o n a c r o s s y o u r l i b r a r y < / t d > < / t r >
< tr > < td > Missing Cover Art < / t d > < t d > D e t e c t s a l b u m s a n d t r a c k s w i t h o u t e m b e d d e d a r t w o r k a n d f e t c h e s i t < / t d > < / t r >
< tr > < td > Metadata Gap Filler < / t d > < t d > C o m p l e t e s m i s s i n g m e t a d a t a f i e l d s ( g e n r e , y e a r , e t c . ) f r o m c o n n e c t e d s e r v i c e s < / t d > < / t r >
< tr > < td > Album Completeness < / t d > < t d > V e r i f i e s y o u h a v e a l l t r a c k s f o r e a c h a l b u m a n d f l a g s i n c o m p l e t e o n e s < / t d > < / t r >
< tr > < td > Fake Lossless Detector < / t d > < t d > I d e n t i f i e s F L A C f i l e s t h a t d o n ' t a c t u a l l y c o n t a i n h i g h - f r e q u e n c y a u d i o c o n t e n t < / t d > < / t r >
< tr > < td > Library Reorganize < / t d > < t d > R e s t r u c t u r e s l i b r a r y f o l d e r s t o m a t c h y o u r c o n f i g u r e d p a t h t e m p l a t e s < / t d > < / t r >
< tr > < td > MBID Mismatch Detector < / t d > < t d > V e r i f i e s M u s i c B r a i n z I D s a r e s t i l l a c c u r a t e a n d f l a g s m i s m a t c h e s < / t d > < / t r >
< tr > < td > Single Album Dedup < / t d > < t d > R e m o v e s r e d u n d a n t s i n g l e - t r a c k a l b u m s w h e n t h e t r a c k e x i s t s o n a f u l l a l b u m < / t d > < / t r >
< tr > < td > Album Tag Consistency < / t d > < t d > S t a n d a r d i z e s a l b u m t a g s a c r o s s a l l t r a c k s i n t h e s a m e a l b u m < / t d > < / t r >
< tr > < td > Live Commentary Cleaner < / t d > < t d > D e t e c t s a n d f l a g s n o n - m u s i c c o n t e n t ( c o m m e n t a r y , i n t e r v i e w s ) i n y o u r l i b r a r y < / t d > < / t r >
< tr > < td > Cache Evictor < / t d > < t d > C l e a n s e x p i r e d m e t a d a t a c a c h e e n t r i e s t o f r e e d a t a b a s e s p a c e < / t d > < / t r >
< tr > < td > Lossy Converter < / t d > < t d > C o n v e r t s l o s s y f i l e s t o a l t e r n a t i v e f o r m a t s b a s e d o n y o u r p r e f e r e n c e s < / t d > < / t r >
< / t b o d y >
< / t a b l e >
< div class = "docs-callout warning" > < span class = "docs-callout-icon" > & # x26A0 ; & # xFE0F ; < / s p a n > < d i v > < s t r o n g > M a s s o r p h a n s a f e t y : < / s t r o n g > I f t h e o r p h a n d e t e c t o r f l a g s m o r e t h a n 5 0 % o f f i l e s a s o r p h a n s , i t t r i g g e r s a < s t r o n g > " W i t n e s s M e " < / s t r o n g > c o n f i r m a t i o n d i a l o g r e q u i r i n g y o u t o t y p e t h e p h r a s e b e f o r e a n y d e l e t i o n s p r o c e e d . T h i s p r e v e n t s a c c i d e n t a l m a s s d e l e t i o n f r o m p a t h m i s m a t c h e s . < / d i v > < / d i v >
< / d i v >
< div class = "docs-subsection" id = "dash-activity" >
< h3 class = "docs-subsection-title" > Activity Feed < / h 3 >
@ -565,13 +613,15 @@ const DOCS_SECTIONS = [
{ id : 'sync-youtube' , title : 'YouTube Playlists' } ,
{ id : 'sync-tidal' , title : 'Tidal Playlists' } ,
{ id : 'sync-deezer' , title : 'Deezer Playlists' } ,
{ id : 'sync-deezer-link' , title : 'Deezer Link' } ,
{ id : 'sync-listenbrainz' , title : 'ListenBrainz' } ,
{ id : 'sync-beatport' , title : 'Beatport' } ,
{ id : 'sync-import-file' , title : 'Import from File' } ,
{ id : 'sync-mirrored' , title : 'Mirrored Playlists' } ,
{ id : 'sync-history' , title : 'Sync History' } ,
{ id : 'sync-m3u' , title : 'M3U Export' } ,
{ id : 'sync-discovery' , title : 'Discovery Pipeline' }
{ id : 'sync-discovery' , title : 'Discovery Pipeline' } ,
{ id : 'sync-explorer' , title : 'Playlist Explorer' }
] ,
content : ( ) => `
< div class = "docs-subsection" id = "sync-overview" >
@ -640,12 +690,26 @@ const DOCS_SECTIONS = [
< / d i v >
< div class = "docs-subsection" id = "sync-deezer" >
< h3 class = "docs-subsection-title" > Deezer Playlists < / h 3 >
< p class = "docs-text" > Import Deezer playlists by URL . Paste a Deezer playlist URL , click < strong > Load Playlist < / s t r o n g > , a n d S o u l S y n c p a r s e s t h e t r a c k s f o r d i s c o v e r y a n d d o w n l o a d . T r a c k s g o t h r o u g h t h e s a m e d i s c o v e r y p i p e l i n e a s Y o u T u b e a n d T i d a l p l a y l i s t s . < / p >
< p class = "docs-text" > If you have a < strong > Deezer ARL token < / s t r o n g > c o n f i g u r e d ( S e t t i n g s & g t ; D o w n l o a d s ) , t h e D e e z e r t a b s h o w s a l l y o u r p e r s o n a l p l a y l i s t s & m d a s h ; i d e n t i c a l t o h o w S p o t i f y p l a y l i s t s w o r k . C l i c k < s t r o n g > R e f r e s h < / s t r o n g > t o l o a d y o u r p l a y l i s t s , t h e n c l i c k a n y p l a y l i s t t o v i e w t r a c k s a n d d o w n l o a d . < / p >
< ul class = "docs-list" >
< li > Requires ARL token ( a browser cookie from deezer . com & mdash ; configure in Settings & gt ; Downloads ) < / l i >
< li > Click < strong > Sync / Download < / s t r o n g > t o o p e n t h e p l a y l i s t d e t a i l s m o d a l w i t h f u l l t r a c k l i s t i n g < / l i >
< li > Click < strong > Download Missing Tracks < / s t r o n g > t o a n a l y z e y o u r l i b r a r y a n d d o w n l o a d w h a t ' s m i s s i n g < / l i >
< li > Click < strong > Sync Playlist < / s t r o n g > t o s y n c t r a c k s t o y o u r m e d i a s e r v e r < / l i >
< li > Tracks include full album metadata with release dates , cover art , and proper organization < / l i >
< li > No discovery step needed & mdash ; tracks go directly to download ( like Spotify ) < / l i >
< li > Track data is cached after first load for instant subsequent access < / l i >
< / u l >
< div class = "docs-callout tip" > < span class = "docs-callout-icon" > & # x1F4A1 ; < / s p a n > < d i v > T h e A R L t o k e n i s t h e s a m e o n e u s e d f o r D e e z e r d o w n l o a d s . I f y o u a l r e a d y h a v e D e e z e r c o n f i g u r e d a s a d o w n l o a d s o u r c e , y o u r p l a y l i s t s w i l l a p p e a r a u t o m a t i c a l l y . < / d i v > < / d i v >
< / d i v >
< div class = "docs-subsection" id = "sync-deezer-link" >
< h3 class = "docs-subsection-title" > Deezer Link < / h 3 >
< p class = "docs-text" > Import any public Deezer playlist by URL without needing an ARL token . Paste a Deezer playlist URL , click < strong > Load Playlist < / s t r o n g > , a n d S o u l S y n c p a r s e s t h e t r a c k s f o r d i s c o v e r y a n d d o w n l o a d . < / p >
< ul class = "docs-list" >
< li > Paste any < code > deezer . com / playlist / ... < / c o d e > U R L < / l i >
< li > Track matching uses the same fuzzy discovery pipeline < / l i >
< li > Previously loaded URLs appear in the history bar < / l i >
< li > Loaded playlists are mirrored for persistent state < / l i >
< li > Paste any < code > deezer . com / playlist / ... < / c o d e > U R L o r r a w p l a y l i s t I D </ l i >
< li > Track matching uses the same fuzzy discovery pipeline as YouTube and Tidal < / l i >
< li > Previously loaded URLs appear in the history bar for quick re - access < / l i >
< li > Loaded playlists are automatically mirrored for persistent state < / l i >
< / u l >
< / d i v >
< div class = "docs-subsection" id = "sync-import-file" >
@ -695,6 +759,10 @@ const DOCS_SECTIONS = [
< / o l >
< div class = "docs-callout tip" > < span class = "docs-callout-icon" > & # x1F4A1 ; < / s p a n > < d i v > C h a i n a u t o m a t i o n s f o r h a n d s - f r e e o p e r a t i o n : R e f r e s h P l a y l i s t & r a r r ; P l a y l i s t C h a n g e d & r a r r ; D i s c o v e r & r a r r ; D i s c o v e r y C o m p l e t e & r a r r ; S y n c < / d i v > < / d i v >
< / d i v >
< div class = "docs-subsection" id = "sync-explorer" >
< h3 class = "docs-subsection-title" > Playlist Explorer < / h 3 >
< p class = "docs-text" > A visual tree - based browser for exploring playlists across all sources . Navigate through your server playlists , Spotify playlists , and mirrored playlists in a unified interface . Click any playlist to expand and view its tracks , then download or sync directly . < / p >
< / d i v >
`
} ,
{
@ -804,7 +872,9 @@ const DOCS_SECTIONS = [
{ id : 'disc-playlists' , title : 'Discovery Playlists' } ,
{ id : 'disc-build' , title : 'Build Custom Playlist' } ,
{ id : 'disc-seasonal' , title : 'Seasonal & Curated' } ,
{ id : 'disc-timemachine' , title : 'Time Machine' }
{ id : 'disc-timemachine' , title : 'Time Machine' } ,
{ id : 'disc-artist-map' , title : 'Artist Map' } ,
{ id : 'disc-stats' , title : 'Listening Stats' }
] ,
content : ( ) => `
< div class = "docs-subsection" id = "disc-hero" >
@ -860,6 +930,27 @@ const DOCS_SECTIONS = [
< p class = "docs-text" > Browse discovery pool content by < strong > decade < / s t r o n g > & m d a s h ; t a b s f r o m t h e 1 9 5 0 s t h r o u g h t h e 2 0 2 0 s . E a c h d e c a d e p u l l s t o p t r a c k s f r o m p o o l a r t i s t s a c t i v e i n t h a t e r a . < / p >
$ { docsImg ( 'disc-time-machine.jpg' , 'Time Machine decade browser' ) }
< / d i v >
< div class = "docs-subsection" id = "disc-artist-map" >
< h3 class = "docs-subsection-title" > Artist Map < / h 3 >
< p class = "docs-text" > Three interactive canvas - based visualization modes for exploring artist relationships . Accessed from the Discover page . < / p >
< ul class = "docs-list" >
< li > < strong > Watchlist Constellation < / s t r o n g > & m d a s h ; Y o u r w a t c h e d a r t i s t s a s l a r g e n o d e s w i t h s i m i l a r a r t i s t s o r b i t i n g a r o u n d t h e m . R e v e a l s c o n n e c t i o n s y o u m i g h t n o t h a v e n o t i c e d . < / l i >
< li > < strong > Genre Map < / s t r o n g > & m d a s h ; B r o w s e a l l a r t i s t s b y g e n r e w i t h a s i d e b a r p i c k e r . R i n g - p a c k e d c l u s t e r s , n o a r t i s t c a p . G r e a t f o r e x p l o r i n g g e n r e s y o u d o n ' t n o r m a l l y l i s t e n t o . < / l i >
< li > < strong > Artist Explorer < / s t r o n g > & m d a s h ; D e e p - d i v e a n y a r t i s t . R i n g 1 s h o w s d i r e c t s i m i l a r a r t i s t s , R i n g 2 s h o w s t h e e x t e n d e d n e t w o r k . E x p l o r i n g a n u n k n o w n a r t i s t f e t c h e s s i m i l a r a r t i s t s i n r e a l - t i m e a n d c a c h e s t h e m . < / l i >
< / u l >
< p class = "docs-text" > < strong > Controls : < / s t r o n g > M o u s e w h e e l t o z o o m , c l i c k t o e x p l o r e , h o v e r f o r t o o l t i p s w i t h g e n r e t a g s . K e y b o a r d s h o r t c u t s : < s p a n c l a s s = " d o c s - k b d " > ? < / s p a n > f o r h e l p , < s p a n c l a s s = " d o c s - k b d " > F < / s p a n > t o f i t v i e w , < s p a n c l a s s = " d o c s - k b d " > S < / s p a n > t o s e a r c h . < / p >
< / d i v >
< div class = "docs-subsection" id = "disc-stats" >
< h3 class = "docs-subsection-title" > Listening Stats < / h 3 >
< p class = "docs-text" > The Stats page shows analytics about your music library and listening activity . Requires ListenBrainz or Last . fm scrobbling to be enabled for listening data . < / p >
< ul class = "docs-list" >
< li > < strong > Library overview < / s t r o n g > & m d a s h ; T o t a l a r t i s t s , a l b u m s , t r a c k s , t o t a l f i l e s i z e , f o r m a t d i s t r i b u t i o n < / l i >
< li > < strong > Top artists , albums , and tracks < / s t r o n g > & m d a s h ; R a n k e d b y p l a y c o u n t o r l i b r a r y p r e s e n c e < / l i >
< li > < strong > Genre distribution < / s t r o n g > & m d a s h ; V i s u a l b r e a k d o w n o f g e n r e s a c r o s s y o u r l i b r a r y < / l i >
< li > < strong > Recent additions < / s t r o n g > & m d a s h ; L a t e s t t r a c k s a n d a l b u m s a d d e d t o y o u r l i b r a r y < / l i >
< li > < strong > Listening timeline < / s t r o n g > & m d a s h ; A c t i v i t y o v e r t i m e w h e n s c r o b b l i n g i s c o n f i g u r e d < / l i >
< / u l >
< / d i v >
`
} ,
{
@ -1079,13 +1170,16 @@ const DOCS_SECTIONS = [
{ id : 'lib-matching' , title : 'Service Matching' } ,
{ id : 'lib-tags' , title : 'Write Tags to File' } ,
{ id : 'lib-bulk' , title : 'Bulk Operations' } ,
{ id : 'lib-missing' , title : 'Download Missing Tracks' }
{ id : 'lib-missing' , title : 'Download Missing Tracks' } ,
{ id : 'lib-smart-delete' , title : 'Smart Delete' } ,
{ id : 'lib-redownload' , title : 'Track Redownload' } ,
{ id : 'lib-issues' , title : 'Library Issues' }
] ,
content : ( ) => `
< div class = "docs-subsection" id = "lib-standard" >
< h3 class = "docs-subsection-title" > Standard View < / h 3 >
< p class = "docs-text" > The Library page shows all artists in your collection as cards with images , album / track counts , and < strong > service badges < / s t r o n g > ( S p o t i f y , M u s i c B r a i n z , D e e z e r , A u d i o D B , i T u n e s , L a s t . f m , G e n i u s , T i d a l , Q o b u z ) i n d i c a t i n g w h i c h s e r v i c e s h a v e m a t c h e d t h i s a r t i s t . < / p >
< p class = "docs-text" > Use the < strong > search bar < / s t r o n g > , < s t r o n g > a l p h a b e t n a v i g a t i o n < / s t r o n g > ( A & n d a s h ; Z , # ) , an d <s t r o n g > w a t c h l i s t f i l t e r < / s t r o n g > ( A l l / W a t c h e d / U n w a t c h e d ) t o b r o w s e . C l i c k a n y a r t i s t c a r d t o v i e w t h e i r d i s c o g r a p h y . < / p >
< p class = "docs-text" > Use the < strong > search bar < / s t r o n g > , < s t r o n g > a l p h a b e t n a v i g a t i o n < / s t r o n g > ( A & n d a s h ; Z , # ) , <s t r o n g > w a t c h l i s t f i l t e r < / s t r o n g > ( A l l / W a t c h e d / U n w a t c h e d ) , a n d < s t r o n g > m e t a d a t a s o u r c e f i l t e r < / s t r o n g > t o b r o w s e . T h e s o u r c e f i l t e r l e t s y o u f i n d a r t i s t s u n m a t c h e d t o a s p e c i f i c s e r v i c e ( e . g . " N o D i s c o g s " s h o w s a r t i s t s m i s s i n g a D i s c o g s m a t c h ) o r m a t c h e d t o o n e ( e . g . " H a s S p o t i f y " ) . C l i c k a n y a r t i s t c a r d t o v i e w t h e i r d i s c o g r a p h y . < / p >
< p class = "docs-text" > The artist detail page shows albums , EPs , and singles as cards with completion percentages . Filter by category , content type ( live / compilations / featured ) , or status ( owned / missing ) . At the top , < strong > View on < / s t r o n g > b u t t o n s l i n k t o t h e a r t i s t o n e a c h m a t c h e d e x t e r n a l s e r v i c e . < / p >
$ { docsImg ( 'lib-standard.jpg' , 'Library artist grid' ) }
< / d i v >
@ -1104,7 +1198,7 @@ const DOCS_SECTIONS = [
< / d i v >
< div class = "docs-subsection" id = "lib-matching" >
< h3 class = "docs-subsection-title" > Service Matching < / h 3 >
< p class = "docs-text" > In the Enhanced view , each artist , album , and track shows < strong > match status chips < / s t r o n g > f o r a l l 9 s e r v i c e s . C l i c k a n y c h i p t o m a n u a l l y s e a r c h a n d l i n k t h e c o r r e c t e x t e r n a l I D . R u n p e r - s e r v i c e e n r i c h m e n t f r o m t h e d r o p d o w n t o p u l l i n m e t a d a t a f r o m a s p e c i f i c s o u r c e . < / p >
< p class = "docs-text" > In the Enhanced view , each artist , album , and track shows < strong > match status chips < / s t r o n g > f o r a l l 10 s e r v i c e s ( S p o t i f y , M u s i c B r a i n z , D e e z e r , D i s c o g s , A u d i o D B , i T u n e s , L a s t . f m , G e n i u s , T i d a l , Q o b u z ) . C l i c k a n y c h i p t o m a n u a l l y s e a r c h a n d l i n k t h e c o r r e c t e x t e r n a l I D . R u n p e r - s e r v i c e e n r i c h m e n t f r o m t h e < s t r o n g > E n r i c h < / s t r o n g > d r o p d o w n t o p u l l i n m e t a d a t a f r o m a s p e c i f i c s o u r c e . < / p >
< p class = "docs-text" > Matched services show as clickable badges linking to the entity on that service ' s website . < / p >
< / d i v >
< div class = "docs-subsection" id = "lib-tags" >
@ -1134,6 +1228,37 @@ const DOCS_SECTIONS = [
< p class = "docs-text" > From any album card showing missing tracks , click < strong > Download Missing < / s t r o n g > t o o p e n a m o d a l l i s t i n g a l l t r a c k s n o t i n y o u r l i b r a r y . S e l e c t t r a c k s , c h o o s e a d o w n l o a d s o u r c e , a n d s t a r t t h e d o w n l o a d . P r o g r e s s i s t r a c k e d p e r - t r a c k w i t h s t a t u s i n d i c a t o r s . < / p >
< p class = "docs-text" > < strong > Multi - Disc Albums < /strong>: Albums with multiple discs are handled automatically. Tracks are organized into <code>Disc N/ < / c o d e > s u b f o l d e r s w i t h i n t h e a l b u m d i r e c t o r y , p r e v e n t i n g t r a c k n u m b e r c o l l i s i o n s ( e . g . , D i s c 1 T r a c k 1 v s D i s c 2 T r a c k 1 ) . T h e d i s c s t r u c t u r e i s d e t e c t e d f r o m S p o t i f y o r i T u n e s m e t a d a t a . < / p >
< / d i v >
< div class = "docs-subsection" id = "lib-smart-delete" >
< h3 class = "docs-subsection-title" > Smart Delete < / h 3 >
< p class = "docs-text" > Right - click or use the delete action on any track to open the Smart Delete dialog . Three options are available : < / p >
< ul class = "docs-list" >
< li > < strong > Remove from Library < / s t r o n g > & m d a s h ; R e m o v e s t h e t r a c k f r o m S o u l S y n c ' s d a t a b a s e o n l y . T h e a u d i o f i l e o n d i s k i s n o t t o u c h e d . U s e t h i s i f y o u w a n t t o c l e a n u p t h e d a t a b a s e w i t h o u t l o s i n g f i l e s . < / l i >
< li > < strong > Delete File Too < / s t r o n g > & m d a s h ; R e m o v e s t h e d a t a b a s e e n t r y A N D d e l e t e s t h e a u d i o f i l e f r o m d i s k . I r r e v e r s i b l e . < / l i >
< li > < strong > Delete & amp ; Blacklist < / s t r o n g > & m d a s h ; R e m o v e s a n d d e l e t e s t h e f i l e , t h e n a d d s i t t o t h e < s t r o n g > d o w n l o a d b l a c k l i s t < / s t r o n g > s o i t w o n ' t b e r e - d o w n l o a d e d b y t h e w i s h l i s t o r a u t o m a t i o n s y s t e m . < / l i >
< / u l >
< / d i v >
< div class = "docs-subsection" id = "lib-redownload" >
< h3 class = "docs-subsection-title" > Track Redownload < / h 3 >
< p class = "docs-text" > Redownload a specific track from your library with a different source or quality . A 3 - step wizard guides you through : < / p >
< ol class = "docs-steps" >
< li > < strong > Choose metadata source < / s t r o n g > & m d a s h ; C o n f i r m t h e c o r r e c t t r a c k i d e n t i t y ( S p o t i f y , i T u n e s , o r D e e z e r m a t c h ) < / l i >
< li > < strong > Choose download source < / s t r o n g > & m d a s h ; S e a r c h a c r o s s a l l c o n f i g u r e d d o w n l o a d s o u r c e s ( S o u l s e e k , T i d a l , Q o b u z , Y o u T u b e , H i F i , D e e z e r ) a n d p i c k a s p e c i f i c r e s u l t < / l i >
< li > < strong > Download & amp ; replace < / s t r o n g > & m d a s h ; T h e n e w f i l e r e p l a c e s t h e e x i s t i n g o n e w i t h u p d a t e d m e t a d a t a a n d t a g s < / l i >
< / o l >
< / d i v >
< div class = "docs-subsection" id = "lib-issues" >
< h3 class = "docs-subsection-title" > Library Issues < / h 3 >
< p class = "docs-text" > The Issues page tracks problems detected in your library by the repair worker . Issues are categorized by type and severity : < / p >
< ul class = "docs-list" >
< li > < strong > Orphan files < / s t r o n g > & m d a s h ; A u d i o f i l e s i n y o u r t r a n s f e r f o l d e r n o t t r a c k e d i n t h e d a t a b a s e < / l i >
< li > < strong > Dead references < / s t r o n g > & m d a s h ; D a t a b a s e e n t r i e s p o i n t i n g t o f i l e s t h a t n o l o n g e r e x i s t o n d i s k < / l i >
< li > < strong > Duplicate tracks < / s t r o n g > & m d a s h ; M u l t i p l e c o p i e s o f t h e s a m e t r a c k d e t e c t e d b y f i n g e r p r i n t o r m e t a d a t a < / l i >
< li > < strong > Missing cover art < / s t r o n g > & m d a s h ; A l b u m s o r t r a c k s w i t h o u t e m b e d d e d a r t w o r k < / l i >
< li > < strong > Metadata gaps < / s t r o n g > & m d a s h ; T r a c k s w i t h i n c o m p l e t e m e t a d a t a ( m i s s i n g g e n r e , y e a r , e t c . ) < / l i >
< li > < strong > Fake lossless < / s t r o n g > & m d a s h ; F i l e s l a b e l e d a s F L A C b u t w i t h a u d i o t h a t d o e s n ' t a c t u a l l y c o n t a i n h i g h - f r e q u e n c y c o n t e n t < / l i >
< / u l >
< p class = "docs-text" > Each issue can be fixed individually or in bulk . Orphan files can be moved to staging ( safe , reversible ) or deleted . Mass deletions ( 50 + files ) require typing < strong > "witness me" < / s t r o n g > t o c o n f i r m . < / p >
< / d i v >
`
} ,
{
@ -1257,7 +1382,8 @@ const DOCS_SECTIONS = [
{ id : 'set-download' , title : 'Download Settings' } ,
{ id : 'set-processing' , title : 'Processing & Organization' } ,
{ id : 'set-quality' , title : 'Quality Profiles' } ,
{ id : 'set-other' , title : 'Other Settings' }
{ id : 'set-other' , title : 'Other Settings' } ,
{ id : 'set-db-maintenance' , title : 'Database Maintenance' }
] ,
content : ( ) => `
< div class = "docs-subsection" id = "set-services" >
@ -1271,9 +1397,10 @@ const DOCS_SECTIONS = [
< li > < strong > Genius < / s t r o n g > & m d a s h ; A c c e s s t o k e n f r o m g e n i u s . c o m / a p i - c l i e n t s < / l i >
< li > < strong > Qobuz < / s t r o n g > & m d a s h ; U s e r n a m e + P a s s w o r d ( a p p I D i s a u t o - f e t c h e d ) < / l i >
< li > < strong > HiFi < / s t r o n g > & m d a s h ; N o c r e d e n t i a l s n e e d e d , u s e s c o m m u n i t y - r u n A P I i n s t a n c e s . T e s t C o n n e c t i o n t o v e r i f y . < / l i >
< li > < strong > Deezer < / s t r o n g > & m d a s h ; A R L c o o k i e t o k e n f r o m y o u r b r o w s e r ( l o g i n t o d e e z e r . c o m & r a r r ; D e v T o o l s & r a r r ; C o o k i e s & r a r r ; c o p y < c o d e > a r l < / c o d e > ) < / l i >
< li > < strong > AcoustID < / s t r o n g > & m d a s h ; A P I k e y f r o m a c o u s t i d . o r g ( e n a b l e s f i n g e r p r i n t v e r i f i c a t i o n ) < / l i >
< li > < strong > ListenBrainz < / s t r o n g > & m d a s h ; B a s e U R L + t o k e n f o r l i s t e n i n g h i s t o r y a n d p l a y l i s t i m p o r t < / l i >
< li > < strong > Deezer < / s t r o n g > & m d a s h ; A R L c o o k i e t o k e n f r o m y o u r b r o w s e r ( l o g i n t o d e e z e r . c o m & r a r r ; D e v T o o l s & r a r r ; C o o k i e s & r a r r ; c o p y < c o d e > a r l < / c o d e > ) . U s e d f o r d o w n l o a d s A N D u s e r p l a y l i s t a c c e s s . < / l i >
< li > < strong > Discogs < / s t r o n g > & m d a s h ; P e r s o n a l A c c e s s T o k e n f r o m d i s c o g s . c o m / s e t t i n g s / d e v e l o p e r s ( f r e e , n o a p p r e g i s t r a t i o n n e e d e d ) . P r o v i d e s g e n r e s , s t y l e s , l a b e l s , c a t a l o g n u m b e r s , a n d c o m m u n i t y r a t i n g s . < / l i >
< li > < strong > AcoustID < / s t r o n g > & m d a s h ; A P I k e y f r o m a c o u s t i d . o r g ( e n a b l e s f i n g e r p r i n t v e r i f i c a t i o n o f d o w n l o a d e d f i l e s ) < / l i >
< li > < strong > ListenBrainz < / s t r o n g > & m d a s h ; B a s e U R L + t o k e n f o r l i s t e n i n g h i s t o r y , s c r o b b l i n g , a n d p l a y l i s t i m p o r t < / l i >
< / u l >
< / d i v >
< div class = "docs-subsection" id = "set-media" >
@ -1335,6 +1462,15 @@ const DOCS_SECTIONS = [
< li > < strong > WebSocket < / s t r o n g > & m d a s h ; R e a l - t i m e s t a t u s u p d a t e s a r e d e l i v e r e d v i a W e b S o c k e t . A l l d o w n l o a d s , e n r i c h m e n t p r o g r e s s , s c a n s t a t u s , a n d s y s t e m e v e n t s p u s h t o t h e U I w i t h o u t p o l l i n g . < / l i >
< / u l >
< / d i v >
< div class = "docs-subsection" id = "set-db-maintenance" >
< h3 class = "docs-subsection-title" > Database Maintenance < / h 3 >
< p class = "docs-text" > In < strong > Settings & gt ; Advanced < / s t r o n g > , t h e D a t a b a s e M a i n t e n a n c e s e c t i o n s h o w s y o u r d a t a b a s e s i z e , f r e e ( r e c l a i m a b l e ) p a g e s , a n d a u t o - v a c u u m m o d e . T w o o p e r a t i o n s a r e a v a i l a b l e : < / p >
< ul class = "docs-list" >
< li > < strong > Compact Database ( VACUUM ) < / s t r o n g > & m d a s h ; R e w r i t e s t h e e n t i r e d a t a b a s e f i l e t o r e c l a i m u n u s e d s p a c e f r o m d e l e t e d r e c o r d s . L o c k s t h e d a t a b a s e d u r i n g o p e r a t i o n a n d m a y t a k e o v e r a m i n u t e o n l a r g e d a t a b a s e s . S h o w s e l a p s e d t i m e a n d s p a c e s a v e d w h e n c o m p l e t e . < / l i >
< li > < strong > Enable Incremental Vacuum < / s t r o n g > & m d a s h ; S w i t c h e s S Q L i t e t o i n c r e m e n t a l a u t o - v a c u u m m o d e , w h i c h r e c l a i m s f r e e d p a g e s a u t o m a t i c a l l y i n s m a l l b a t c h e s . R e q u i r e s a o n e - t i m e f u l l V A C U U M t o a c t i v a t e . A f t e r e n a b l e d , t h e b u t t o n g r a y s o u t . T h i s i s t h e r e c o m m e n d e d a p p r o a c h f o r l a r g e d a t a b a s e s . < / l i >
< / u l >
< div class = "docs-callout warning" > < span class = "docs-callout-icon" > & # x26A0 ; & # xFE0F ; < / s p a n > < d i v > V A C U U M r e q u i r e s t e m p o r a r y d i s k s p a c e e q u a l t o t h e d a t a b a s e s i z e . F o r a 5 G B d a t a b a s e , e n s u r e a t l e a s t 5 G B f r e e s p a c e b e f o r e r u n n i n g . < / d i v > < / d i v >
< / d i v >
`
} ,
{