Skip to content

Commit 9b1b6f7

Browse files
author
Meyn
committed
Improved Readme
1 parent d66c70b commit 9b1b6f7

File tree

4 files changed

+100
-94
lines changed

4 files changed

+100
-94
lines changed

README.md

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# 🎵 Spotify Playlist to M3U8 Converter
2+
![Platform](https://img.shields.io/badge/Platform-Windows-blue) ![.NET](https://img.shields.io/badge/.NET-8.0+-purple) ![License](https://img.shields.io/badge/License-MIT-green) ![Downloads](https://img.shields.io/github/downloads/TypNull/SpotifyToM3U/total)
23

34
**Seamlessly bridge Spotify and your local music library!**
45
This tool converts Spotify playlists (public or private) into **M3U8** playlist files, letting you enjoy your curated music offline in any player that supports M3U playlists (like VLC, Foobar2000, or Winamp).
@@ -13,14 +14,19 @@ This tool converts Spotify playlists (public or private) into **M3U8** playlist
1314

1415
---
1516

16-
## 🌟 Key Features
17+
## ✨ Why SpotifyToM3U?
1718

18-
| Feature | Description |
19-
|---------|-------------|
20-
| **Spotify Login** | Access private playlists by logging into your Spotify account. |
21-
| **Public Playlists** | Convert without an account—just paste the playlist URL. |
22-
| **File Format Support** | Searches for MP3, FLAC, WAV, and more in your local library. |
23-
| **Metadata Matching** | Intelligently matches Spotify tracks to local files using artist/title/album data. |
19+
🎯 **Perfect for music enthusiasts who want the best of both worlds**
20+
21+
| Problem | Solution |
22+
|---------|----------|
23+
| 😰 **Spotify removes songs** | ✅ Keep local backups as M3U playlists |
24+
| 🎧 **Want better audio quality** | ✅ Use your FLAC/high-bitrate files |
25+
| ✈️ **Going offline** | ✅ M3U works without internet |
26+
| 🎛️ **Prefer other players** | ✅ Works with VLC, foobar2000, Winamp, etc. |
27+
| 📱 **Own your music** | ✅ No subscription needed to play |
28+
29+
---
2430

2531
<img align="center" src="https://github.com/user-attachments/assets/999c08ea-78ed-4be9-bf4f-dd60bfe4641e" alt="App Preview" width="600"/>
2632

@@ -52,15 +58,21 @@ This tool converts Spotify playlists (public or private) into **M3U8** playlist
5258
- **Login issues?** Re-authenticate via Spotify’s OAuth prompt.
5359
- **File not found?** Check your selected music folder path.
5460

55-
Report bugs on the [Issues page](#).
61+
Report bugs on the [Issues page](https://github.com/TypNull/SpotifyToM3U/issues).
5662

5763
---
5864

59-
## 📜 License
6065

61-
MIT © 2025 [TypNull](https://github.com/TypNull).
62-
See [LICENSE.txt](LICENSE.txt) for details.
66+
## 📜 License & Credits
67+
68+
**MIT License** © 2025 [TypNull](https://github.com/TypNull)
6369

6470
---
6571

66-
Made with ♥ for music lovers. 🎶
72+
<div align="center">
73+
74+
**Made with ❤️ for music lovers everywhere** 🎶
75+
76+
[⬆️ Back to Top](#-spotifytom3u-converter)[📥 Download](https://typnull.github.io/SpotifyToM3U/SpotifyToM3U.application)[🐛 Report Issue](https://github.com/TypNull/SpotifyToM3U/issues)[💬 Discussions](../../discussions)
77+
78+
</div>

SpotifyToM3U/SpotifyToM3U.csproj

Lines changed: 67 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,75 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

3-
<PropertyGroup>
4-
<OutputType>WinExe</OutputType>
5-
<TargetFramework>net8.0-windows</TargetFramework>
6-
<Nullable>enable</Nullable>
7-
<UseWPF>true</UseWPF>
8-
<Version>1.0.1</Version>
9-
<UseWindowsForms>True</UseWindowsForms>
10-
<ApplicationIcon>Recources\Images\spotify_icon.ico</ApplicationIcon>
11-
<AssemblyName>Spotify to M3U</AssemblyName>
12-
<Copyright>Shard 2023©</Copyright>
13-
<Company>Shard</Company>
14-
<Authors>Meyn</Authors>
15-
<PublisherName>Shard</PublisherName>
16-
<PackageIcon>spotify_icon.png</PackageIcon>
17-
<IncludeSymbols>False</IncludeSymbols>
18-
<PackageReadmeFile>README.md</PackageReadmeFile>
19-
<RepositoryType>git</RepositoryType>
20-
<PackageTags>spotify; playlist; m3u;</PackageTags>
21-
<Description>A WPF application to convert spotify to m3u8 with your local audio library</Description>
22-
</PropertyGroup>
3+
<PropertyGroup>
4+
<OutputType>WinExe</OutputType>
5+
<TargetFramework>net8.0-windows</TargetFramework>
6+
<Nullable>enable</Nullable>
7+
<UseWPF>true</UseWPF>
8+
<Version>1.0.1</Version>
9+
<UseWindowsForms>True</UseWindowsForms>
10+
<ApplicationIcon>Recources\Images\spotify_icon.ico</ApplicationIcon>
11+
<AssemblyName>SpotifyToM3U</AssemblyName>
12+
<Copyright>Shard 2025©</Copyright>
13+
<Company>Shard</Company>
14+
<Authors>TypNull</Authors>
15+
<PublisherName>Shard</PublisherName>
16+
<PackageIcon>spotify_icon.png</PackageIcon>
17+
<IncludeSymbols>False</IncludeSymbols>
18+
<PackageReadmeFile>README.md</PackageReadmeFile>
19+
<RepositoryType>git</RepositoryType>
20+
<PackageTags>spotify; playlist; m3u;</PackageTags>
21+
<Description>A WPF application to convert spotify to m3u8 with your local audio library</Description>
22+
<NetCoreSdkVersion>8.0.404</NetCoreSdkVersion>
23+
<MSBuildRuntimeVersion>8.0.404</MSBuildRuntimeVersion>
24+
</PropertyGroup>
2325

24-
<ItemGroup>
25-
<None Remove="Recources\Fonts\Dosis.ttf" />
26-
<None Remove="Recources\Images\export.png" />
27-
<None Remove="Recources\Images\library.png" />
28-
<None Remove="Recources\Images\spotify.png" />
29-
</ItemGroup>
26+
<ItemGroup>
27+
<None Remove="Recources\Fonts\Dosis.ttf" />
28+
<None Remove="Recources\Images\export.png" />
29+
<None Remove="Recources\Images\library.png" />
30+
<None Remove="Recources\Images\spotify.png" />
31+
</ItemGroup>
3032

31-
<ItemGroup>
32-
<Content Include="Recources\Images\spotify_icon.ico">
33-
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
34-
</Content>
35-
</ItemGroup>
33+
<ItemGroup>
34+
<Content Include="Recources\Images\spotify_icon.ico">
35+
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
36+
</Content>
37+
</ItemGroup>
3638

37-
<ItemGroup>
38-
<None Include="..\README.md">
39-
<Pack>True</Pack>
40-
<PackagePath>\</PackagePath>
41-
</None>
42-
</ItemGroup>
39+
<ItemGroup>
40+
<None Include="..\README.md">
41+
<Pack>True</Pack>
42+
<PackagePath>\</PackagePath>
43+
</None>
44+
</ItemGroup>
4345

44-
<ItemGroup>
45-
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
46-
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.6" />
47-
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.135" />
48-
<PackageReference Include="Shard.DownloadAssistant" Version="1.1.0" />
49-
<PackageReference Include="SpotifyAPI.Web" Version="7.2.1" />
50-
<PackageReference Include="SpotifyAPI.Web.Auth" Version="7.2.1" />
51-
<PackageReference Include="taglib-sharp-netstandard2.0" Version="2.1.0" />
52-
</ItemGroup>
53-
54-
<ItemGroup>
55-
<Resource Include="Recources\Fonts\Dosis.ttf" />
56-
<Resource Include="Recources\Images\export.png" />
57-
<Resource Include="Recources\Images\library.png" />
58-
<Resource Include="Recources\Images\spotify.png" />
59-
<Resource Include="Recources\Images\spotify_icon.png" />
60-
</ItemGroup>
46+
<ItemGroup>
47+
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
48+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.6" />
49+
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.135" />
50+
<PackageReference Include="Shard.DownloadAssistant" Version="1.1.0" />
51+
<PackageReference Include="SpotifyAPI.Web" Version="7.2.1" />
52+
<PackageReference Include="SpotifyAPI.Web.Auth" Version="7.2.1" />
53+
<PackageReference Include="taglib-sharp-netstandard2.0" Version="2.1.0" />
54+
</ItemGroup>
6155

62-
<ItemGroup>
63-
<None Update="Recources\Images\spotify_icon.ico">
64-
<Pack>True</Pack>
65-
<PackagePath>\</PackagePath>
66-
</None>
67-
<None Update="Recources\Images\spotify_icon.png">
68-
<Pack>True</Pack>
69-
<PackagePath>\</PackagePath>
70-
</None>
71-
</ItemGroup>
56+
<ItemGroup>
57+
<Resource Include="Recources\Fonts\Dosis.ttf" />
58+
<Resource Include="Recources\Images\export.png" />
59+
<Resource Include="Recources\Images\library.png" />
60+
<Resource Include="Recources\Images\spotify.png" />
61+
<Resource Include="Recources\Images\spotify_icon.png" />
62+
</ItemGroup>
7263

73-
</Project>
64+
<ItemGroup>
65+
<None Update="Recources\Images\spotify_icon.ico">
66+
<Pack>True</Pack>
67+
<PackagePath>\</PackagePath>
68+
</None>
69+
<None Update="Recources\Images\spotify_icon.png">
70+
<Pack>True</Pack>
71+
<PackagePath>\</PackagePath>
72+
</None>
73+
</ItemGroup>
74+
75+
</Project>

global.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"sdk": {
3+
"version": "8.0.404",
4+
"rollForward": "latestMinor"
5+
}
6+
}

release.ps1

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,38 @@
1-
From https://janjones.me/posts/clickonce-installer-build-publish-github/.
2-
1+
# From https://janjones.me/posts/clickonce-installer-build-publish-github/
32
[CmdletBinding(PositionalBinding=$false)]
43
param (
54
[switch]$OnlyBuild=$false
65
)
7-
86
$appName = "SpotifyToM3U"
97
$projDir = "SpotifyToM3U"
10-
118
Set-StrictMode -version 2.0
129
$ErrorActionPreference = "Stop"
13-
1410
Write-Output "Working directory: $pwd"
15-
1611
# Find MSBuild.
1712
$msBuildPath = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" `
1813
-latest -requires Microsoft.Component.MSBuild -find MSBuild\**\Bin\MSBuild.exe `
1914
-prerelease | select-object -first 1
2015
Write-Output "MSBuild: $((Get-Command $msBuildPath).Path)"
21-
2216
# Load current Git tag.
2317
$tag = $(git describe --tags)
2418
Write-Output "Tag: $tag"
25-
2619
# Parse tag into a three-number version.
2720
$version = $tag.Split('-')[0].TrimStart('v')
2821
$version = "$version.0"
2922
Write-Output "Version: $version"
30-
3123
# Clean output directory.
3224
$publishDir = "bin/publish"
3325
$outDir = "$projDir/$publishDir"
3426
if (Test-Path $outDir) {
3527
Remove-Item -Path $outDir -Recurse
3628
}
37-
3829
# Publish the application.
3930
Push-Location $projDir
4031
try {
4132
Write-Output "Restoring:"
4233
dotnet restore -r win-x64
34+
# Additional restore to ensure compiler toolset is available
35+
dotnet restore
4336
Write-Output "Publishing:"
4437
$msBuildVerbosityArg = "/v:m"
4538
if ($env:CI) {
@@ -49,7 +42,6 @@ try {
4942
/p:ApplicationVersion=$version /p:Configuration=Release `
5043
/p:PublishDir=$publishDir /p:PublishUrl=$publishDir `
5144
$msBuildVerbosityArg
52-
5345
# Measure publish size.
5446
$publishSize = (Get-ChildItem -Path "$publishDir/Application Files" -Recurse |
5547
Measure-Object -Property Length -Sum).Sum / 1Mb
@@ -58,19 +50,16 @@ try {
5850
finally {
5951
Pop-Location
6052
}
61-
6253
if ($OnlyBuild) {
6354
Write-Output "Build finished."
6455
exit
6556
}
66-
6757
# Clone `gh-pages` branch.
6858
$ghPagesDir = "gh-pages"
6959
if (-Not (Test-Path $ghPagesDir)) {
7060
git clone $(git config --get remote.origin.url) -b gh-pages `
7161
--depth 1 --single-branch $ghPagesDir
7262
}
73-
7463
Push-Location $ghPagesDir
7564
try {
7665
# Remove previous application files.
@@ -81,18 +70,15 @@ try {
8170
if (Test-Path "$appName.application") {
8271
Remove-Item -Path "$appName.application"
8372
}
84-
8573
# Copy new application files.
8674
Write-Output "Copying new files..."
8775
Copy-Item -Path "../$outDir/Application Files","../$outDir/$appName.application" `
8876
-Destination . -Recurse
89-
9077
# Stage and commit.
9178
Write-Output "Staging..."
9279
git add -A
9380
Write-Output "Committing..."
9481
git commit -m "Update to v$version"
95-
9682
# Push.
9783
git push
9884
} finally {

0 commit comments

Comments
 (0)