Initial commit

This commit is contained in:
Keiran 2025-08-07 23:59:01 +01:00
commit 35d262868a
5 changed files with 287 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.json

33
go.mod Normal file
View File

@ -0,0 +1,33 @@
module md2yt
go 1.24.6
require (
golang.org/x/oauth2 v0.30.0
google.golang.org/api v0.246.0
)
require (
cloud.google.com/go/auth v0.16.3 // indirect
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
cloud.google.com/go/compute/metadata v0.7.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/google/s2a-go v0.1.9 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect
github.com/googleapis/gax-go/v2 v2.15.0 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
go.opentelemetry.io/otel v1.36.0 // indirect
go.opentelemetry.io/otel/metric v1.36.0 // indirect
go.opentelemetry.io/otel/trace v1.36.0 // indirect
golang.org/x/crypto v0.40.0 // indirect
golang.org/x/net v0.42.0 // indirect
golang.org/x/sys v0.34.0 // indirect
golang.org/x/text v0.27.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0 // indirect
google.golang.org/grpc v1.74.2 // indirect
google.golang.org/protobuf v1.36.6 // indirect
)

71
go.sum Normal file
View File

@ -0,0 +1,71 @@
cloud.google.com/go/auth v0.16.3 h1:kabzoQ9/bobUmnseYnBO6qQG7q4a/CffFRlJSxv2wCc=
cloud.google.com/go/auth v0.16.3/go.mod h1:NucRGjaXfzP1ltpcQ7On/VTZ0H4kWB5Jy+Y9Dnm76fA=
cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c=
cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU=
cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4=
github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo=
github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg=
go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E=
go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE=
go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs=
go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs=
go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY=
go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis=
go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4=
go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w=
go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA=
golang.org/x/crypto v0.40.0 h1:r4x+VvoG5Fm+eJcxMaY8CQM7Lb0l1lsmjGBQ6s8BfKM=
golang.org/x/crypto v0.40.0/go.mod h1:Qr1vMER5WyS2dfPHAlsOj01wgLbsyWtFn/aY+5+ZdxY=
golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs=
golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8=
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.34.0 h1:H5Y5sJ2L2JRdyv7ROF1he/lPdvFsd0mJHFw2ThKHxLA=
golang.org/x/sys v0.34.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/text v0.27.0 h1:4fGWRpyh641NLlecmyl4LOe6yDdfaYNrGb2zdfo4JV4=
golang.org/x/text v0.27.0/go.mod h1:1D28KMCvyooCX9hBiosv5Tz/+YLxj0j7XhWjpSUF7CU=
google.golang.org/api v0.246.0 h1:H0ODDs5PnMZVZAEtdLMn2Ul2eQi7QNjqM2DIFp8TlTM=
google.golang.org/api v0.246.0/go.mod h1:dMVhVcylamkirHdzEBAIQWUCgqY885ivNeZYd7VAVr8=
google.golang.org/genproto v0.0.0-20250603155806-513f23925822 h1:rHWScKit0gvAPuOnu87KpaYtjK5zBMLcULh7gxkCXu4=
google.golang.org/genproto v0.0.0-20250603155806-513f23925822/go.mod h1:HubltRL7rMh0LfnQPkMH4NPDFEWp0jw3vixw7jEM53s=
google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 h1:oWVWY3NzT7KJppx2UKhKmzPq4SRe0LdCijVRwvGeikY=
google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822/go.mod h1:h3c4v36UTKzUiuaOKQ6gr3S+0hovBtUrXzTG/i3+XEc=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0 h1:MAKi5q709QWfnkkpNQ0M12hYJ1+e8qYVDyowc4U1XZM=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250728155136-f173205681a0/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4=
google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM=
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

129
main.go Normal file
View File

@ -0,0 +1,129 @@
package main
import (
"bufio"
"context"
"fmt"
"log"
"os"
"regexp"
"strings"
"golang.org/x/oauth2"
"golang.org/x/oauth2/google"
"google.golang.org/api/option"
"google.golang.org/api/youtube/v3"
)
func getClient(config *oauth2.Config) *oauth2.Token {
tokFile := "token.json"
f, err := os.Open(tokFile)
if err == nil {
defer f.Close()
var tok oauth2.Token
fmt.Fscan(f, &tok.AccessToken, &tok.TokenType, &tok.RefreshToken, &tok.Expiry)
return &tok
}
authURL := config.AuthCodeURL("state-token", oauth2.AccessTypeOffline)
fmt.Printf("Go to the following link in your browser then type the authorization code: \n%v\n", authURL)
var authCode string
fmt.Scan(&authCode)
tok, err := config.Exchange(context.Background(), authCode)
if err != nil {
log.Fatalf("Unable to retrieve token from web: %v", err)
}
f, _ = os.Create(tokFile)
defer f.Close()
fmt.Fprint(f, tok.AccessToken, " ", tok.TokenType, " ", tok.RefreshToken, " ", tok.Expiry)
return tok
}
func main() {
b, err := os.ReadFile("credentials.json")
if err != nil {
log.Fatalf("Unable to read client secret file: %v", err)
}
config, err := google.ConfigFromJSON(b, youtube.YoutubeScope)
if err != nil {
log.Fatalf("Unable to parse client secret file to config: %v", err)
}
tok := getClient(config)
client := config.Client(context.Background(), tok)
service, err := youtube.NewService(context.Background(), option.WithHTTPClient(client))
if err != nil {
log.Fatalf("Unable to create YouTube client: %v", err)
}
file, err := os.Open("playlist.md")
if err != nil {
log.Fatalf("Unable to open playlist file: %v", err)
}
defer file.Close()
scanner := bufio.NewScanner(file)
linkRegex := regexp.MustCompile(`https:\/\/music\.youtube\.com\/watch\?v=([a-zA-Z0-9_-]+)`)
playlists := make(map[string][]string)
var currentPlaylist string
for scanner.Scan() {
line := scanner.Text()
if strings.HasPrefix(line, "## ") {
currentPlaylist = strings.TrimPrefix(line, "## ")
playlists[currentPlaylist] = []string{}
}
if matches := linkRegex.FindStringSubmatch(line); matches != nil && currentPlaylist != "" {
playlists[currentPlaylist] = append(playlists[currentPlaylist], matches[1])
}
}
if len(playlists) == 0 {
log.Fatal("No playlists found in file")
}
for title, videoIDs := range playlists {
if len(videoIDs) == 0 {
continue
}
playlist := &youtube.Playlist{
Snippet: &youtube.PlaylistSnippet{
Title: title,
Description: "Created automatically from Markdown",
},
Status: &youtube.PlaylistStatus{
PrivacyStatus: "private",
},
}
newPlaylist, err := service.Playlists.Insert([]string{"snippet", "status"}, playlist).Do()
if err != nil {
log.Printf("Unable to create playlist '%s': %v", title, err)
continue
}
for _, id := range videoIDs {
_, err := service.PlaylistItems.Insert([]string{"snippet"}, &youtube.PlaylistItem{
Snippet: &youtube.PlaylistItemSnippet{
PlaylistId: newPlaylist.Id,
ResourceId: &youtube.ResourceId{
Kind: "youtube#video",
VideoId: id,
},
},
}).Do()
if err != nil {
log.Printf("Unable to add video %s to playlist '%s': %v", id, title, err)
}
}
fmt.Printf("Playlist '%s' created with %d videos\n", title, len(videoIDs))
}
}

53
playlist.md Normal file
View File

@ -0,0 +1,53 @@
# Playlists
## Weeb
- [Seven Deadly Sins - MAN WITH A MISSION](https://music.youtube.com/watch?v=mAENQIa-MtM&si=hPIHTm5q99Gz0EEg)
- [ANIMA - ReoNa](https://music.youtube.com/watch?v=5OxPxamlP00&si=6nLLou5G7NtuMqHS)
- [This Game - Konomi Suzuki](https://music.youtube.com/watch?v=kJ04dMmimn8&si=_wYHmY7kNMPtAzQi)
- [JUSTadICE - Seiko Oomori](https://music.youtube.com/watch?v=IMupuIZmsGo&si=PzrhjD8_iZWyb3uC)
- [Stay Alive - Takahashi Rie](https://music.youtube.com/watch?v=84YBqfpCGW8&si=7HU1LRNuUE5hU9g0)
- [Idol - YOASOBI](https://music.youtube.com/watch?v=m9SMT5ipbxk&si=4NCoQo4zmVV9keth)
- [Yuusha - YOASOBI](https://music.youtube.com/watch?v=OIBODIPC_8Y&si=QhH_BDytpavGU3nl)
- [Shukufuku - YOASOBI](https://music.youtube.com/watch?v=2eNEQ0cQtkI&si=Tg-vktV-E4YbO1Fi)
- [UNDEAD - YOASOBI](https://music.youtube.com/watch?v=BryspbM6s3E&si=JToHD8ISwhMkTY1a)
- [Kaibutsu - YOASOBI](https://music.youtube.com/watch?v=k0g04t7ZeSw&si=IQUQrKAmqAPEaO93)
- [Idol - YOASOBI](https://music.youtube.com/watch?v=m9SMT5ipbxk&si=baGzo9F5ybkQff94)
- [Centimeter - the peggies](https://music.youtube.com/watch?v=I1hLZ2OchZ8&si=QA9knpt83nUcHSge)
- [Kiminosei - the peggies](https://music.youtube.com/watch?v=KbT3JsJmd14&si=Eg1xXi-FzrTUdGUG)
- [Hacking to the Gate - Kanako Itou](https://music.youtube.com/watch?v=ZGM90Bo3zH0&si=oIVJqNkql2uJZ6JC)
- [Gurenge - LiSA](https://music.youtube.com/watch?v=TqyfmFaZlqw&si=0hFlFFdJBaOHgTKi)
- [crossing field - LiSA](https://music.youtube.com/watch?v=F9GXgPHeKfA&si=U74xwcgz960fCrjb)
- [ADAMAS - LiSA](https://music.youtube.com/watch?v=UljR2IQAVfw&si=nUFotjdHrA7nl4wp)
- [Zenzenzense - RADWIMPS](https://music.youtube.com/watch?v=qp0AktOIAag&si=rTdEfk4xuiO7L347)
- [Dream Lantern - RADWIMPS](https://music.youtube.com/watch?v=MtLHwqbE1eI&si=IUpgw1gSP1Lfpxi6)
- [BROKEN GAMES - FZMZ](https://music.youtube.com/watch?v=k6FdQMCiPME&si=HcyX6U7W0CvWxqRQ)
- [DANGER DANGER - FZMZ](https://music.youtube.com/watch?v=rvFfHgNlj-I&si=HGC7uLET4KGs7NgE)
- [Hotaru no Hikari - Ikimonogakari](https://music.youtube.com/watch?v=7GMPeHFy2Dk&si=5FtwYLXG5hwss-hs)
- [Netsujo no Spectrum - Ikimonogakari](https://music.youtube.com/watch?v=cU22947XIYo&si=UFQGweYU4--CAK_d)
- [Blue Bird - Ikimonogakari](https://music.youtube.com/watch?v=udNgJUiBCRg&si=-Eqc4aIdjkN7cWV3)
- [Unravel - TK](https://music.youtube.com/watch?v=C0ppulkmXPw&si=h9kATVyi8zeFu5Io)
- [KICK BACK - Kenshi Yonezu](https://music.youtube.com/watch?v=NMA_isZYsYQ&si=DKbq3H2fee_AZf6J)
- [Goyanomachiawase - Hello Sleepwalkers](https://music.youtube.com/watch?v=B57B7kjYOuA&si=nJdwYtZCA9Jyvvmv)
- [Deal woith the Devil - Tia](https://music.youtube.com/watch?v=pJ-MywdW98o&si=TTHCWKY5BqgKwiRe)
- [I am... - Atarayo](https://music.youtube.com/watch?v=ipiQ0lpayoo&si=N1X4ZGslKCTkAhP_)
- [Shoukei to Shikabane no Michi - Linked Horizon](https://music.youtube.com/watch?v=czJHHta2vz8&si=BJ0kPmTAE4wU0wVt)
- [Jiyuu no Tsubasa - Linked Horizon](https://music.youtube.com/watch?v=W8UNLOOogU4&si=WXzHrn8QBdDQaTeZ)
- [Guren no Yumiya - Linked Horizon](https://music.youtube.com/watch?v=2B6nj38AdD0&si=G9p1u0odAs1t_Szk)
- [Brave Shine - Aimer](https://music.youtube.com/watch?v=hvVN2i6o4A4&si=8syk11qq83lsg8dV)
- [Daddy! Daddy! Do! - Masayuki Suzuki](https://music.youtube.com/watch?v=1zwaZkOXXqw&si=7MnTMwbjsrt3V13Y)
- [Red Swan - Yoshiki](https://music.youtube.com/watch?v=oYQmw6axrdQ&si=2AajNNJuoe1hyx07)
- [the WORLD - Nightmare](https://music.youtube.com/watch?v=b4vc629T4b8&si=4Xhst-NhKZfAwhcO)
- [Renai Circulation - Hanazawa Kana](https://music.youtube.com/watch?v=auQxNYJ07Lc&si=yK-eEsc5ZaCsyRuu)
- [CORE PRIDE - UVERworld](https://music.youtube.com/watch?v=Avs-yTQ53cI&si=YXHi60cGMdgxmRmx)
- [Hikarunara - Goose house](https://music.youtube.com/watch?v=c6rCRy6SrtU&si=gn12LXLdE0-3y7Bp)
- [Crying for Rain - Minami](https://music.youtube.com/watch?v=gxp3R7l1iSk&si=4Xtv_eouR-LuEtX2)
- [A Cruel Angel's Thesis](https://music.youtube.com/watch?v=xyVatKhd4s4&si=hzB_0zWheEhi6o32)
- [Black Rover - Vickeblanka](https://music.youtube.com/watch?v=yIlBb1Jvjbk&si=XXtG17EhrewfyG6M)
- [Black Catcher - Vickeblanka](https://music.youtube.com/watch?v=Mu8zGKcY_Ck&si=x807bNSty0KDywyH)
- [The Rumbling - SiM](https://music.youtube.com/watch?v=qpHvj5pvvhg&si=nVjvY8uP98_iDO0V)
- [Kaikai Kitan - Eve](https://music.youtube.com/watch?v=isY3rtuSsK8&si=ezXtzPGg3UwhmWUM)
- [Distortion!! - kessoku band](https://music.youtube.com/watch?v=5RSHNMkKGLs&si=_71OJ-ZJ4dteJ2Tq)
- [Karakara - kessoku band](https://music.youtube.com/watch?v=3RWMMNsULsA&si=z4NjP2H6NtdCremc)
- [Guitar, Loneliness and Blue Planet - kessoku band](https://music.youtube.com/watch?v=fYBQJfPBmRg&si=ZuhXjX0bIcuUIkTu)
- [seisyun complex - kessoku band](https://music.youtube.com/watch?v=RWFW1OSlMkM&si=sGcRWOFTEZm_UI5T)