From 5537b6fb8922dc0dfa028120426146db4dd94dd2 Mon Sep 17 00:00:00 2001 From: Gabe Farrell Date: Wed, 18 Jun 2025 17:46:48 -0400 Subject: [PATCH] fix: reset mbid for artists when native importing --- engine/import_test.go | 78 ++++ internal/db/psql/album.go | 5 + internal/importer/koito.go | 5 +- test_assets/koito_export_test.json | 706 +++++++++++++++++++++++++++++ 4 files changed, 793 insertions(+), 1 deletion(-) create mode 100644 test_assets/koito_export_test.json diff --git a/engine/import_test.go b/engine/import_test.go index 4289706..1d7bf60 100644 --- a/engine/import_test.go +++ b/engine/import_test.go @@ -13,6 +13,7 @@ import ( "github.com/gabehf/koito/internal/db" "github.com/gabehf/koito/internal/logger" "github.com/gabehf/koito/internal/mbz" + "github.com/gabehf/koito/internal/utils" "github.com/google/uuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -260,3 +261,80 @@ func TestImportListenBrainz_MbzDisabled(t *testing.T) { truncateTestData(t) } + +func TestImportKoito(t *testing.T) { + + src := path.Join("..", "test_assets", "koito_export_test.json") + destDir := filepath.Join(cfg.ConfigDir(), "import") + dest := filepath.Join(destDir, "koito_export_test.json") + + ctx := context.Background() + + // 4 every wave to ever rise, 3 i can't feel you, 5 giri giri, 1 nijinoiroyo + giriReleaseMBID := uuid.MustParse("ac1f8da0-21d7-426e-83b0-befff06f0871") + suzukiMBID := uuid.MustParse("30f851bb-dba3-4e9b-811c-5f27f595c86a") + nijinoTrackMBID := uuid.MustParse("a4f26836-3894-46c1-acac-227808308687") + + input, err := os.ReadFile(src) + require.NoError(t, err) + + require.NoError(t, os.WriteFile(dest, input, os.ModePerm)) + + engine.RunImporter(logger.Get(), store, &mbz.MbzErrorCaller{}) + + // ensure all artists are saved + _, err = store.GetArtist(ctx, db.GetArtistOpts{Name: "American Football"}) + require.NoError(t, err) + _, err = store.GetArtist(ctx, db.GetArtistOpts{Name: "Rachel Goswell"}) + require.NoError(t, err) + _, err = store.GetArtist(ctx, db.GetArtistOpts{Name: "Elizabeth Powell"}) + require.NoError(t, err) + + // ensure artist aliases are saved + artist, err := store.GetArtist(ctx, db.GetArtistOpts{MusicBrainzID: suzukiMBID}) + require.NoError(t, err) + assert.Equal(t, "鈴木雅之", artist.Name) + assert.Contains(t, artist.Aliases, "Masayuki Suzuki") + _, err = store.GetArtist(ctx, db.GetArtistOpts{Name: "すぅ"}) + require.NoError(t, err) + + // ensure albums are saved + album, err := store.GetAlbum(ctx, db.GetAlbumOpts{MusicBrainzID: giriReleaseMBID}) + require.NoError(t, err) + assert.Equal(t, "GIRI GIRI", album.Title) + // ensure album aliases are saved + artist, err = store.GetArtist(ctx, db.GetArtistOpts{Name: "NELKE"}) + require.NoError(t, err) + album, err = store.GetAlbum(ctx, db.GetAlbumOpts{Title: "虹の色よ鮮やかであれ (NELKE ver.)", ArtistID: artist.ID}) + require.NoError(t, err) + aliases, err := store.GetAllAlbumAliases(ctx, album.ID) + require.NoError(t, err) + assert.Contains(t, utils.FlattenAliases(aliases), "Nijinoiroyo Azayakadeare (NELKE ver.)") + + // ensure all tracks are saved + track, err := store.GetTrack(ctx, db.GetTrackOpts{MusicBrainzID: nijinoTrackMBID}) + require.NoError(t, err) + assert.Equal(t, "虹の色よ鮮やかであれ (NELKE ver.)", track.Title) + aliases, err = store.GetAllTrackAliases(ctx, track.ID) + require.NoError(t, err) + assert.Contains(t, utils.FlattenAliases(aliases), "Nijinoiroyo Azayakadeare (NELKE ver.)") + // ensure track duration is saved + assert.EqualValues(t, 218, track.Duration) + + artist, err = store.GetArtist(ctx, db.GetArtistOpts{MusicBrainzID: suzukiMBID}) + require.NoError(t, err) + _, err = store.GetTrack(ctx, db.GetTrackOpts{Title: "GIRI GIRI", ArtistIDs: []int32{artist.ID}}) + require.NoError(t, err) + + count, err := store.CountTracks(ctx, db.PeriodAllTime) + require.NoError(t, err) + assert.EqualValues(t, 4, count) + count, err = store.CountAlbums(ctx, db.PeriodAllTime) + require.NoError(t, err) + assert.EqualValues(t, 3, count) + count, err = store.CountArtists(ctx, db.PeriodAllTime) + require.NoError(t, err) + assert.EqualValues(t, 6, count) + + truncateTestData(t) +} diff --git a/internal/db/psql/album.go b/internal/db/psql/album.go index 4392227..e58514f 100644 --- a/internal/db/psql/album.go +++ b/internal/db/psql/album.go @@ -139,6 +139,11 @@ func (d *Psql) SaveAlbum(ctx context.Context, opts db.SaveAlbumOpts) (*models.Al return nil, fmt.Errorf("SaveAlbum: Commit: %w", err) } + err = d.SaveAlbumAliases(ctx, r.ID, opts.Aliases, "MusicBrainz") + if err != nil { + l.Err(err).Msgf("Failed to save aliases for album %s", opts.Title) + } + return &models.Album{ ID: r.ID, MbzID: r.MusicBrainzID, diff --git a/internal/importer/koito.go b/internal/importer/koito.go index e656b0e..ae74cbf 100644 --- a/internal/importer/koito.go +++ b/internal/importer/koito.go @@ -43,10 +43,11 @@ func ImportKoitoFile(ctx context.Context, store db.DB, filename string) error { for i := range data.Listens { // use this for save/get mbid for all artist/album/track - mbid := uuid.Nil + var mbid uuid.UUID artistIds := make([]int32, 0) for _, ia := range data.Listens[i].Artists { + mbid = uuid.Nil if ia.MBID != nil { mbid = *ia.MBID } @@ -81,6 +82,7 @@ func ImportKoitoFile(ctx context.Context, store db.DB, filename string) error { } // call associate album albumId := int32(0) + mbid = uuid.Nil if data.Listens[i].Album.MBID != nil { mbid = *data.Listens[i].Album.MBID } @@ -117,6 +119,7 @@ func ImportKoitoFile(ctx context.Context, store db.DB, filename string) error { } // call associate track + mbid = uuid.Nil if data.Listens[i].Track.MBID != nil { mbid = *data.Listens[i].Track.MBID } diff --git a/test_assets/koito_export_test.json b/test_assets/koito_export_test.json new file mode 100644 index 0000000..b7ce463 --- /dev/null +++ b/test_assets/koito_export_test.json @@ -0,0 +1,706 @@ +{ + "version": "1", + "exported_at": "2025-06-18T12:56:53Z", + "user": "koito", + "listens": [ + { + "listened_at": "2022-01-08T22:32:08Z", + "track": { + "mbid": null, + "duration": 354, + "aliases": [ + { + "alias": "Every Wave To Ever Rise (feat. Elizabeth Powell)", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://cdn-images.dzcdn.net/images/cover/1f54d600d0ce5c88a6b2fd75659ec796/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "aliases": [ + { + "alias": "American Football (LP3)", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/ac81a9567a9ae0963274563370eff015/1000x1000-000000-80-0-0.jpg", + "mbid": "4ebb5ad3-9018-407d-8c24-c03011ab9ac6", + "is_primary": false, + "aliases": [ + { + "alias": "American Football", + "source": "Canonical", + "is_primary": true + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/4aaff116fd21b5c1bdafd55fbf843053/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "Elizabeth Powell", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2022-01-16T00:43:25Z", + "track": { + "mbid": null, + "duration": 354, + "aliases": [ + { + "alias": "Every Wave To Ever Rise (feat. Elizabeth Powell)", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://cdn-images.dzcdn.net/images/cover/1f54d600d0ce5c88a6b2fd75659ec796/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "aliases": [ + { + "alias": "American Football (LP3)", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/ac81a9567a9ae0963274563370eff015/1000x1000-000000-80-0-0.jpg", + "mbid": "4ebb5ad3-9018-407d-8c24-c03011ab9ac6", + "is_primary": false, + "aliases": [ + { + "alias": "American Football", + "source": "Canonical", + "is_primary": true + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/4aaff116fd21b5c1bdafd55fbf843053/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "Elizabeth Powell", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2022-01-16T04:47:43Z", + "track": { + "mbid": null, + "duration": 354, + "aliases": [ + { + "alias": "Every Wave To Ever Rise (feat. Elizabeth Powell)", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://cdn-images.dzcdn.net/images/cover/1f54d600d0ce5c88a6b2fd75659ec796/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "aliases": [ + { + "alias": "American Football (LP3)", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/ac81a9567a9ae0963274563370eff015/1000x1000-000000-80-0-0.jpg", + "mbid": "4ebb5ad3-9018-407d-8c24-c03011ab9ac6", + "is_primary": false, + "aliases": [ + { + "alias": "American Football", + "source": "Canonical", + "is_primary": true + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/4aaff116fd21b5c1bdafd55fbf843053/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "Elizabeth Powell", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2022-01-18T18:36:21Z", + "track": { + "mbid": null, + "duration": 354, + "aliases": [ + { + "alias": "Every Wave To Ever Rise (feat. Elizabeth Powell)", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://cdn-images.dzcdn.net/images/cover/1f54d600d0ce5c88a6b2fd75659ec796/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "aliases": [ + { + "alias": "American Football (LP3)", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/ac81a9567a9ae0963274563370eff015/1000x1000-000000-80-0-0.jpg", + "mbid": "4ebb5ad3-9018-407d-8c24-c03011ab9ac6", + "is_primary": false, + "aliases": [ + { + "alias": "American Football", + "source": "Canonical", + "is_primary": true + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/4aaff116fd21b5c1bdafd55fbf843053/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "Elizabeth Powell", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2022-01-16T05:28:11Z", + "track": { + "mbid": null, + "duration": 287, + "aliases": [ + { + "alias": "I Can't Feel You (feat. Rachel Goswell)", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://cdn-images.dzcdn.net/images/cover/1f54d600d0ce5c88a6b2fd75659ec796/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "aliases": [ + { + "alias": "American Football (LP3)", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/ac81a9567a9ae0963274563370eff015/1000x1000-000000-80-0-0.jpg", + "mbid": "4ebb5ad3-9018-407d-8c24-c03011ab9ac6", + "is_primary": false, + "aliases": [ + { + "alias": "American Football", + "source": "Canonical", + "is_primary": true + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/36120901230ef2799610483fbfe5402e/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "Rachel Goswell", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2022-01-18T18:59:01Z", + "track": { + "mbid": null, + "duration": 287, + "aliases": [ + { + "alias": "I Can't Feel You (feat. Rachel Goswell)", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://cdn-images.dzcdn.net/images/cover/1f54d600d0ce5c88a6b2fd75659ec796/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "aliases": [ + { + "alias": "American Football (LP3)", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/ac81a9567a9ae0963274563370eff015/1000x1000-000000-80-0-0.jpg", + "mbid": "4ebb5ad3-9018-407d-8c24-c03011ab9ac6", + "is_primary": false, + "aliases": [ + { + "alias": "American Football", + "source": "Canonical", + "is_primary": true + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/36120901230ef2799610483fbfe5402e/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "Rachel Goswell", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2022-01-19T01:31:22Z", + "track": { + "mbid": null, + "duration": 287, + "aliases": [ + { + "alias": "I Can't Feel You (feat. Rachel Goswell)", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://cdn-images.dzcdn.net/images/cover/1f54d600d0ce5c88a6b2fd75659ec796/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "aliases": [ + { + "alias": "American Football (LP3)", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/ac81a9567a9ae0963274563370eff015/1000x1000-000000-80-0-0.jpg", + "mbid": "4ebb5ad3-9018-407d-8c24-c03011ab9ac6", + "is_primary": false, + "aliases": [ + { + "alias": "American Football", + "source": "Canonical", + "is_primary": true + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/36120901230ef2799610483fbfe5402e/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "Rachel Goswell", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2025-03-17T03:16:50Z", + "track": { + "mbid": null, + "duration": 0, + "aliases": [ + { + "alias": "GIRI GIRI", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://coverartarchive.org/release/ac1f8da0-21d7-426e-83b0-befff06f0871/front", + "mbid": "ac1f8da0-21d7-426e-83b0-befff06f0871", + "aliases": [ + { + "alias": "GIRI GIRI", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://yt3.googleusercontent.com/DKlRZNy1yaOkBvIH5vaA3RHdLtylEqaoRsnQIfJlSeo8y_Ov1_3fZRebFtm3NgpsB6tvJQzzcQ=s900-c-k-c0x00ffffff-no-rj", + "mbid": "30f851bb-dba3-4e9b-811c-5f27f595c86a", + "is_primary": false, + "aliases": [ + { + "alias": "鈴木雅之", + "source": "Canonical", + "is_primary": true + }, + { + "alias": "Masayuki Suzuki", + "source": "MusicBrainz", + "is_primary": false + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/827131318ca82724744bc9c2c4b43a6c/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "すぅ", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2025-03-17T22:17:42Z", + "track": { + "mbid": null, + "duration": 0, + "aliases": [ + { + "alias": "GIRI GIRI", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://coverartarchive.org/release/ac1f8da0-21d7-426e-83b0-befff06f0871/front", + "mbid": "ac1f8da0-21d7-426e-83b0-befff06f0871", + "aliases": [ + { + "alias": "GIRI GIRI", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://yt3.googleusercontent.com/DKlRZNy1yaOkBvIH5vaA3RHdLtylEqaoRsnQIfJlSeo8y_Ov1_3fZRebFtm3NgpsB6tvJQzzcQ=s900-c-k-c0x00ffffff-no-rj", + "mbid": "30f851bb-dba3-4e9b-811c-5f27f595c86a", + "is_primary": false, + "aliases": [ + { + "alias": "鈴木雅之", + "source": "Canonical", + "is_primary": true + }, + { + "alias": "Masayuki Suzuki", + "source": "MusicBrainz", + "is_primary": false + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/827131318ca82724744bc9c2c4b43a6c/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "すぅ", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2025-03-18T20:46:02Z", + "track": { + "mbid": null, + "duration": 0, + "aliases": [ + { + "alias": "GIRI GIRI", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://coverartarchive.org/release/ac1f8da0-21d7-426e-83b0-befff06f0871/front", + "mbid": "ac1f8da0-21d7-426e-83b0-befff06f0871", + "aliases": [ + { + "alias": "GIRI GIRI", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://yt3.googleusercontent.com/DKlRZNy1yaOkBvIH5vaA3RHdLtylEqaoRsnQIfJlSeo8y_Ov1_3fZRebFtm3NgpsB6tvJQzzcQ=s900-c-k-c0x00ffffff-no-rj", + "mbid": "30f851bb-dba3-4e9b-811c-5f27f595c86a", + "is_primary": false, + "aliases": [ + { + "alias": "鈴木雅之", + "source": "Canonical", + "is_primary": true + }, + { + "alias": "Masayuki Suzuki", + "source": "MusicBrainz", + "is_primary": false + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/827131318ca82724744bc9c2c4b43a6c/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "すぅ", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2025-03-19T14:15:35Z", + "track": { + "mbid": null, + "duration": 0, + "aliases": [ + { + "alias": "GIRI GIRI", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://coverartarchive.org/release/ac1f8da0-21d7-426e-83b0-befff06f0871/front", + "mbid": "ac1f8da0-21d7-426e-83b0-befff06f0871", + "aliases": [ + { + "alias": "GIRI GIRI", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://yt3.googleusercontent.com/DKlRZNy1yaOkBvIH5vaA3RHdLtylEqaoRsnQIfJlSeo8y_Ov1_3fZRebFtm3NgpsB6tvJQzzcQ=s900-c-k-c0x00ffffff-no-rj", + "mbid": "30f851bb-dba3-4e9b-811c-5f27f595c86a", + "is_primary": false, + "aliases": [ + { + "alias": "鈴木雅之", + "source": "Canonical", + "is_primary": true + }, + { + "alias": "Masayuki Suzuki", + "source": "MusicBrainz", + "is_primary": false + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/827131318ca82724744bc9c2c4b43a6c/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "すぅ", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2025-03-20T00:36:12Z", + "track": { + "mbid": null, + "duration": 0, + "aliases": [ + { + "alias": "GIRI GIRI", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://coverartarchive.org/release/ac1f8da0-21d7-426e-83b0-befff06f0871/front", + "mbid": "ac1f8da0-21d7-426e-83b0-befff06f0871", + "aliases": [ + { + "alias": "GIRI GIRI", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "https://yt3.googleusercontent.com/DKlRZNy1yaOkBvIH5vaA3RHdLtylEqaoRsnQIfJlSeo8y_Ov1_3fZRebFtm3NgpsB6tvJQzzcQ=s900-c-k-c0x00ffffff-no-rj", + "mbid": "30f851bb-dba3-4e9b-811c-5f27f595c86a", + "is_primary": false, + "aliases": [ + { + "alias": "鈴木雅之", + "source": "Canonical", + "is_primary": true + }, + { + "alias": "Masayuki Suzuki", + "source": "MusicBrainz", + "is_primary": false + } + ] + }, + { + "image_url": "https://cdn-images.dzcdn.net/images/artist/827131318ca82724744bc9c2c4b43a6c/1000x1000-000000-80-0-0.jpg", + "mbid": null, + "is_primary": false, + "aliases": [ + { + "alias": "すぅ", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + }, + { + "listened_at": "2025-03-23T17:22:03Z", + "track": { + "mbid": "a4f26836-3894-46c1-acac-227808308687", + "duration": 218, + "aliases": [ + { + "alias": "Nijinoiroyo Azayakadeare (NELKE ver.)", + "source": "Manual", + "is_primary": false + }, + { + "alias": "虹の色よ鮮やかであれ (NELKE ver.)", + "source": "Canonical", + "is_primary": true + } + ] + }, + "album": { + "image_url": "https://coverartarchive.org/release/7114f07c-c1f7-4423-a9c3-585444bef51b/front", + "mbid": "7114f07c-c1f7-4423-a9c3-585444bef51b", + "aliases": [ + { + "alias": "Nijinoiroyo Azayakadeare (NELKE ver.)", + "source": "MusicBrainz", + "is_primary": false + }, + { + "alias": "虹の色よ鮮やかであれ (NELKE ver.)", + "source": "Canonical", + "is_primary": true + } + ], + "various_artists": false + }, + "artists": [ + { + "image_url": "User Upload", + "mbid": "3d202d36-1219-4e31-bfb9-d73355c66a83", + "is_primary": false, + "aliases": [ + { + "alias": "NELKE", + "source": "Canonical", + "is_primary": true + } + ] + } + ] + } + ] +} \ No newline at end of file