(playlistDetail.data);
+ const shelfPlays = ytiHistoryResponseFromShelfToPlays(playlistDetail);
+ const listPlays = ytiHistoryResponseToListItems(playlistDetail).map((x) => YTMusicSource.formatPlayObj(x, {newFromSource: false}));
+ const plays = listPlays.slice(0, 20);
if(this.polling === false) {
this.recentlyPlayed = plays;
newPlays = plays;
@@ -238,31 +281,45 @@ export default class YTMusicSource extends AbstractSource {
if(playsAreSortConsistent(this.recentlyPlayed, plays)) {
return newPlays;
}
- const [ok, diff, addType] = playsAreAddedOnly(this.recentlyPlayed, plays);
- if(!ok || addType === 'insert' || addType === 'append') {
+
+ let warnMsg: string;
+ const bumpResults = playsAreBumpedOnly(this.recentlyPlayed, plays);
+ if(bumpResults[0] === true) {
+ newPlays = bumpResults[1];
+ } else {
+ const addResults = playsAreAddedOnly(this.recentlyPlayed, plays);
+ if(addResults[0] === true) {
+ newPlays = [...addResults[1]].reverse();
+ } else {
+ warnMsg = 'YTM History returned temporally inconsistent order, resetting watched history to new list.';
+ }
+ }
+
+ if(warnMsg !== undefined || (newPlays.length > 0 && this.config.options?.logDiff === true)) {
const playsDiff = getPlaysDiff(this.recentlyPlayed, plays)
const humanDiff = humanReadableDiff(this.recentlyPlayed, plays, playsDiff);
- this.logger.warn('YTM History returned temporally inconsistent order, resetting watched history to new list.');
- this.logger.warn(`Changes from last seen list:
-${humanDiff}`);
- this.recentlyPlayed = plays;
- return newPlays;
- } else {
- // new plays
- newPlays = [...diff].reverse();
- this.recentlyPlayed = plays;
+ const diffMsg = `Changes from last seen list:
+ ${humanDiff}`;
+ if(warnMsg !== undefined) {
+ this.logger.warn(warnMsg);
+ this.logger.warn(diffMsg);
+ } else {
+ this.logger.debug(diffMsg);
+ }
+ }
+
+ this.recentlyPlayed = plays;
- newPlays = newPlays.map((x) => ({
+ newPlays = newPlays.map((x, index) => ({
data: {
...x.data,
- playDate: dayjs().startOf('minute')
+ playDate: dayjs().startOf('minute').add(index + 1, 's')
},
meta: {
...x.meta,
newFromSource: true
}
}));
- }
}
return newPlays;
diff --git a/src/backend/tests/utils/playComparisons.test.ts b/src/backend/tests/utils/playComparisons.test.ts
index f6cfc869..25879fbe 100644
--- a/src/backend/tests/utils/playComparisons.test.ts
+++ b/src/backend/tests/utils/playComparisons.test.ts
@@ -2,8 +2,9 @@ import { loggerTest } from "@foxxmd/logging";
import { assert } from 'chai';
import clone from "clone";
import { describe, it } from 'mocha';
-import { playsAreAddedOnly, playsAreSortConsistent } from "../../utils/PlayComparisonUtils.js";
+import { playsAreAddedOnly, playsAreBumpedOnly, playsAreSortConsistent } from "../../utils/PlayComparisonUtils.js";
import { generatePlay, generatePlays } from "./PlayTestUtils.js";
+import { PlayObject } from "../../../core/Atomic.js";
const logger = loggerTest;
@@ -33,69 +34,219 @@ describe('Compare lists by order', function () {
});
});
- describe('Added Only', function () {
+ describe('Non-identical lists', function() {
+ let candidateList: PlayObject[];
- it('Non-identical lists are not add only', function () {
- const [ok, diff, addType] = playsAreAddedOnly(existingList, generatePlays(10))
+ before(function() {
+ candidateList = generatePlays(10);
+ });
+
+ it('are not add only', function () {
+ const [ok, diff, addType] = playsAreAddedOnly(existingList, candidateList)
+ assert.isFalse(ok);
+ });
+
+ it('are not bump only', function () {
+ const [ok, diff, addType] = playsAreAddedOnly(existingList, candidateList)
assert.isFalse(ok);
});
+ });
- it('Lists with only prepended additions are detected', function () {
- const [ok, diff, addType] = playsAreAddedOnly(existingList, [generatePlay(), generatePlay(), ...existingList])
+ describe('Lists with only prepended additions', function() {
+ let candidateList: PlayObject[];
+
+ before(function() {
+ candidateList = [generatePlay(), generatePlay(), ...existingList];
+ });
+
+ it('are add only', function () {
+ const [ok, diff, addType] = playsAreAddedOnly(existingList, candidateList)
assert.isTrue(ok);
assert.equal(addType, 'prepend');
});
- it('Lists with only appended additions are detected', function () {
- const [ok, diff, addType] = playsAreAddedOnly(existingList, [...existingList, generatePlay(), generatePlay()])
+ it('are not bump only', function () {
+ const [ok, diff, addType] = playsAreBumpedOnly(existingList, candidateList)
+ assert.isFalse(ok);
+ });
+ });
+
+ describe('Lists with only appended additions', function() {
+ let candidateList: PlayObject[];
+
+ before(function() {
+ candidateList = [...existingList, generatePlay(), generatePlay()];
+ });
+
+ it('are add only', function () {
+ const [ok, diff, addType] = playsAreAddedOnly(existingList, candidateList)
assert.isTrue(ok);
assert.equal(addType, 'append');
});
- it('Lists of fixed length with prepends are correctly detected', function () {
- const [ok, diff, addType] = playsAreAddedOnly(existingList, [generatePlay(), generatePlay(), ...existingList].slice(0, 9))
+ it('are not bump only', function () {
+ const [ok, diff, addType] = playsAreBumpedOnly(existingList, candidateList)
+ assert.isFalse(ok);
+ });
+
+ });
+
+ describe('Lists of fixed length with prepends', function() {
+ let candidateList: PlayObject[];
+
+ before(function() {
+ candidateList = [generatePlay(), generatePlay(), ...existingList].slice(0, 9);
+ });
+
+ it('are add only', function () {
+ const [ok, diff, addType] = playsAreAddedOnly(existingList, candidateList)
assert.isTrue(ok);
assert.equal(addType, 'prepend');
});
- it('Lists with inserts are detected', function () {
- const splicedList1 = [...existingList.map(x => clone(x))];
- splicedList1.splice(4, 0, generatePlay())
- const [ok, diff, addType] = playsAreAddedOnly(existingList, splicedList1)
+ it('are not bump only', function () {
+ const [ok, diff, addType] = playsAreBumpedOnly(existingList, candidateList)
+ assert.isFalse(ok);
+ });
+ });
+
+
+ describe('Lists with inserts', function() {
+ let candidateList: PlayObject[],
+ candidateList2: PlayObject[];
+
+ before(function() {
+ candidateList = [...existingList.map(x => clone(x))];
+ candidateList.splice(4, 0, generatePlay())
+
+ candidateList2 = [...existingList.map(x => clone(x))];
+ candidateList2.splice(2, 0, generatePlay())
+ candidateList2.splice(6, 0, generatePlay())
+ });
+
+ it('are not add only', function () {
+ const [ok, diff, addType] = playsAreAddedOnly(existingList, candidateList)
+ assert.isFalse(ok)
+
+ const [ok2, diff2, addType2] = playsAreAddedOnly(existingList, candidateList2)
+ assert.isFalse(ok2)
+ });
+
+ it('are not bump only', function () {
+ const [ok, diff, addType] = playsAreBumpedOnly(existingList, candidateList)
assert.isFalse(ok)
- //assert.equal(addType, 'insert');
- const splicedList2 = [...existingList.map(x => clone(x))];
- splicedList2.splice(2, 0, generatePlay())
- splicedList2.splice(6, 0, generatePlay())
- const [ok2, diff2, addType2] = playsAreAddedOnly(existingList, splicedList2)
+ const [ok2, diff2, addType2] = playsAreBumpedOnly(existingList, candidateList2)
assert.isFalse(ok2)
- //assert.equal(addType2, 'insert');
+ });
+
+ });
+
+ describe('Lists with inserts and prepends', function() {
+ let candidateList: PlayObject[];
+
+ before(function() {
+ candidateList = [...existingList.map(x => clone(x))];
+ candidateList.splice(2, 0, generatePlay())
+ candidateList.splice(6, 0, generatePlay())
+ candidateList = [generatePlay(), generatePlay(), ...candidateList]
});
- it('Lists with inserts and prepends are detected as inserts', function () {
- const splicedList = [...existingList.map(x => clone(x))];
- splicedList.splice(2, 0, generatePlay())
- splicedList.splice(6, 0, generatePlay())
- const [ok, diff3, addType] = playsAreAddedOnly(existingList, [generatePlay(), generatePlay(), ...splicedList])
+ it('are not add only', function () {
+ const [ok, diff, addType] = playsAreAddedOnly(existingList, candidateList)
assert.isFalse(ok);
- //assert.equal(addType, 'insert');
});
- it('Lists with inserts and appends are detected as inserts', function () {
- const splicedList = [...existingList.map(x => clone(x))];
- splicedList.splice(2, 0, generatePlay())
- splicedList.splice(6, 0, generatePlay())
- const [ok, diff4, addType] = playsAreAddedOnly(existingList, [...splicedList, generatePlay(), generatePlay()])
+ it('are not bump only', function () {
+ const [ok, diff, addType] = playsAreBumpedOnly(existingList, candidateList)
assert.isFalse(ok);
- //assert.equal(addType, 'insert');
+ });
+
+ });
+
+ describe('Lists with inserts and appends', function() {
+ let candidateList: PlayObject[];
+
+ before(function() {
+ candidateList = [...existingList.map(x => clone(x))];
+ candidateList.splice(2, 0, generatePlay())
+ candidateList.splice(6, 0, generatePlay())
+ candidateList = [...candidateList, generatePlay(), generatePlay()]
+ });
+
+ it('are not add only', function () {
+ const [ok, diff, addType] = playsAreAddedOnly(existingList, candidateList)
+ assert.isFalse(ok);
+ });
+
+ it('are not bump only', function () {
+ const [ok, diff, addType] = playsAreBumpedOnly(existingList, candidateList)
+ assert.isFalse(ok);
+ });
+ });
+
+ describe('Lists with inserts and appends and prepends', function() {
+ let candidateList: PlayObject[];
+
+ before(function() {
+ candidateList = [...existingList.map(x => clone(x))];
+ candidateList = [generatePlay(), generatePlay(), ...candidateList, generatePlay(), generatePlay()]
+ });
+
+ it('are not add only', function () {
+ const [ok, diff, addType] = playsAreAddedOnly(existingList, candidateList)
+ assert.isFalse(ok);
+ });
+
+ it('are not bump only', function () {
+ const [ok, diff, addType] = playsAreBumpedOnly(existingList, candidateList)
+ assert.isFalse(ok);
+ });
+ });
+
+ describe('Lists with plays bumped-by-prepend', function() {
+ let candidateList: PlayObject[];
+
+ before(function() {
+ candidateList = [...existingList.map(x => clone(x))];
+ const bumped = candidateList[6];
+ candidateList.splice(6, 1);
+ candidateList.unshift(bumped);
+ });
+
+ it('are not add only', function () {
+ const [ok, diff, addType] = playsAreAddedOnly(existingList, candidateList);
+ assert.isFalse(ok);
+ });
+
+ it('are bump only', function () {
+ const [ok, diff, addType] = playsAreBumpedOnly(existingList, candidateList);
+ assert.isTrue(ok);
+ assert.equal(addType, 'prepend');
+ });
+
+ });
+
+ describe('Lists with plays bumped-by-append', function() {
+ let candidateList: PlayObject[];
+
+ before(function() {
+ candidateList = [...existingList.map(x => clone(x))];
+ const bumped = candidateList[6];
+ candidateList.splice(6, 1);
+ candidateList.push(bumped);
});
- it('Lists with inserts and appends and prepends are detected as inserts', function () {
- const splicedList = [...existingList.map(x => clone(x))];
- const [ok, diff, addType] = playsAreAddedOnly(existingList, [generatePlay(), generatePlay(), ...splicedList, generatePlay(), generatePlay()])
+ it('are not add only', function () {
+ const [ok, diff, addType] = playsAreAddedOnly(existingList, candidateList);
assert.isFalse(ok);
- //assert.equal(addType, 'insert');
});
- })
+
+ it('are bump only', function () {
+ const [ok, diff, addType] = playsAreBumpedOnly(existingList, candidateList);
+ assert.isTrue(ok);
+ assert.equal(addType, 'append');
+ });
+
+ });
});
diff --git a/src/backend/tests/ytm/ytm.test.ts b/src/backend/tests/ytm/ytm.test.ts
new file mode 100644
index 00000000..9ea14d1f
--- /dev/null
+++ b/src/backend/tests/ytm/ytm.test.ts
@@ -0,0 +1,21 @@
+import { after, before, describe, it } from 'mocha';
+import chai, { assert, expect } from 'chai';
+import asPromised from 'chai-as-promised';
+import { Innertube, UniversalCache, Parser, YTNodes, IBrowseResponse } from 'youtubei.js';
+import { ytiHistoryResponseFromShelfToPlays, ytiHistoryResponseToListItems } from "../../sources/YTMusicSource.js";
+import ytHistoryRes from './ytres.json';
+
+chai.use(asPromised);
+
+describe('Parses History', function () {
+
+ it(`Parses a history response to tracks`, async function () {
+ const items = ytiHistoryResponseToListItems(ytHistoryRes);
+ expect(items).length(10);
+ });
+
+ it(`Parses a history response plays with shelf name`, async function () {
+ const items = ytiHistoryResponseFromShelfToPlays(ytHistoryRes);
+ expect(items[0]?.meta?.comment).to.eq('March 2023');
+ });
+});
diff --git a/src/backend/tests/ytm/ytres.json b/src/backend/tests/ytm/ytres.json
new file mode 100644
index 00000000..3d1187f8
--- /dev/null
+++ b/src/backend/tests/ytm/ytres.json
@@ -0,0 +1,5480 @@
+{
+ "success": true,
+ "status_code": 200,
+ "data": {
+ "responseContext": {
+ "serviceTrackingParams": [
+ {
+ "service": "GFEEDBACK",
+ "params": [
+ {
+ "key": "browse_id",
+ "value": "FEmusic_history"
+ },
+ {
+ "key": "browse_id_prefix",
+ "value": ""
+ },
+ {
+ "key": "logged_in",
+ "value": "1"
+ },
+ {
+ "key": "e",
+ "value": "9406004,23804281,23966208,24004644,24077241,24181174,24241378,24439361,24459435,24542367,24548629,24566687,51009781,51010235,51017346,51020570,51025415,51041512,51050361,51053689,51063643,51064835,51065188,51089007,51098297,51098299,51111738,51115184,51117319,51124104,51125020,51133103,51152050,51157411,51157841,51157895,51158514,51160545,51162170,51165467,51169118,51176511,51177817,51178982,51183909,51186528,51190652,51195231,51204329,51217504,51221011,51223962,51224135,51225967,51227037,51228350,51230241,51230478,51231814,51237842,51239093,51241028,51242447,51243940,51248255,51248734,51251836,51255676,51255680,51255743,51256084,51258066,51266454,51267568,51268362,51275782,51276557,51276565,51276640,51281227,51284653,51286051,51287196,51287500,51289938,51295132,51295408,51296439,51298018,51298829,51299710,51299724,51300414,51300530,51300699,51300760,51302359,51302492,51302680,51303666,51303667,51303669,51303790,51304121,51304155,51305840,51305952,51307723,51309313,51310323,51312153,51313148"
+ }
+ ]
+ },
+ {
+ "service": "CSI",
+ "params": [
+ {
+ "key": "c",
+ "value": "WEB_REMIX"
+ },
+ {
+ "key": "cver",
+ "value": "1.20211213.00.00"
+ },
+ {
+ "key": "yt_li",
+ "value": "1"
+ },
+ {
+ "key": "GetBrowseHistoryPage_rid",
+ "value": "0xdaafccf3094c8a75"
+ }
+ ]
+ },
+ {
+ "service": "ECATCHER",
+ "params": [
+ {
+ "key": "client.version",
+ "value": "1.20000101"
+ },
+ {
+ "key": "client.name",
+ "value": "WEB_REMIX"
+ }
+ ]
+ }
+ ],
+ "maxAgeSeconds": 0
+ },
+ "contents": {
+ "singleColumnBrowseResultsRenderer": {
+ "tabs": [
+ {
+ "tabRenderer": {
+ "title": "Recently played",
+ "selected": true,
+ "content": {
+ "sectionListRenderer": {
+ "contents": [
+ {
+ "musicShelfRenderer": {
+ "title": {
+ "runs": [
+ {
+ "text": "March 2023"
+ }
+ ]
+ },
+ "contents": [
+ {
+ "musicResponsiveListItemRenderer": {
+ "trackingParams": "CJoBEMn0AhgAIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "thumbnail": {
+ "musicThumbnailRenderer": {
+ "thumbnail": {
+ "thumbnails": [
+ {
+ "url": "https://i.ytimg.com/vi/lK5HVlcs0og/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3n6IBQoqXjxzwft7oN7A06fHgAzLQ",
+ "width": 400,
+ "height": 225
+ }
+ ]
+ },
+ "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED",
+ "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT",
+ "trackingParams": "CKcBEIS_AiITCLf06onhgYkDFcXVcgkdUCEw7Q=="
+ }
+ },
+ "overlay": {
+ "musicItemThumbnailOverlayRenderer": {
+ "background": {
+ "verticalGradient": {
+ "gradientLayerColors": [
+ "3422552064",
+ "3422552064"
+ ]
+ }
+ },
+ "content": {
+ "musicPlayButtonRenderer": {
+ "playNavigationEndpoint": {
+ "clickTrackingParams": "CKYBEMjeAiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "watchEndpoint": {
+ "videoId": "lK5HVlcs0og",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_OMV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CKYBEMjeAiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "playIcon": {
+ "iconType": "PLAY_ARROW"
+ },
+ "pauseIcon": {
+ "iconType": "PAUSE"
+ },
+ "iconColor": 4294967295,
+ "backgroundColor": 0,
+ "activeBackgroundColor": 0,
+ "loadingIndicatorColor": 14745645,
+ "playingIcon": {
+ "iconType": "VOLUME_UP"
+ },
+ "iconLoadingColor": 0,
+ "activeScaleFactor": 1,
+ "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL",
+ "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF",
+ "accessibilityPlayData": {
+ "accessibilityData": {
+ "label": "Play Oil - Gorillaz"
+ }
+ },
+ "accessibilityPauseData": {
+ "accessibilityData": {
+ "label": "Pause Oil - Gorillaz"
+ }
+ }
+ }
+ },
+ "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED",
+ "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT"
+ }
+ },
+ "flexColumns": [
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Oil (feat. Stevie Nicks)",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CJoBEMn0AhgAIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "lK5HVlcs0og",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_OMV"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Gorillaz",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CJoBEMn0AhgAIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "browseEndpoint": {
+ "browseId": "UCNIV5B_aJnLrKDSnW_MOmcQ",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ }
+ },
+ {
+ "text": " • "
+ },
+ {
+ "text": "2.1M views"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {},
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM"
+ }
+ }
+ ],
+ "fixedColumns": [
+ {
+ "musicResponsiveListItemFixedColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "3:51"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH",
+ "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL"
+ }
+ }
+ ],
+ "menu": {
+ "menuRenderer": {
+ "items": [
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Start radio"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "MIX"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CKUBEJvzBRgAIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "lK5HVlcs0og",
+ "playlistId": "RDAMVMlK5HVlcs0og",
+ "params": "wAEB",
+ "loggingContext": {
+ "vssLoggingContext": {
+ "serializedContextData": "GhFSREFNVk1sSzVIVmxjczBvZw%3D%3D"
+ }
+ },
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_OMV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CKUBEJvzBRgAIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Play next"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "QUEUE_PLAY_NEXT"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CKMBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "lK5HVlcs0og",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CKMBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "lK5HVlcs0og"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO",
+ "commands": [
+ {
+ "clickTrackingParams": "CKMBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song will play next"
+ }
+ ]
+ },
+ "trackingParams": "CKQBEMrHAyITCLf06onhgYkDFcXVcgkdUCEw7Q=="
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CKMBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Add to queue"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_REMOTE_QUEUE"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CKEBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "lK5HVlcs0og",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CKEBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "lK5HVlcs0og"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AT_END",
+ "commands": [
+ {
+ "clickTrackingParams": "CKEBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song added to queue"
+ }
+ ]
+ },
+ "trackingParams": "CKIBEMrHAyITCLf06onhgYkDFcXVcgkdUCEw7Q=="
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CKEBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Save to playlist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_PLAYLIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CKABEMOUBhgDIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "addToPlaylistEndpoint": {
+ "videoId": "lK5HVlcs0og"
+ }
+ },
+ "trackingParams": "CKABEMOUBhgDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to artist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ARTIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CJ8BEJD7BRgEIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "browseEndpoint": {
+ "browseId": "UCNIV5B_aJnLrKDSnW_MOmcQ",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ },
+ "trackingParams": "CJ8BEJD7BRgEIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Share"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "SHARE"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CJ4BEJH7BRgFIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "shareEntityEndpoint": {
+ "serializedShareEntity": "CgtsSzVIVmxjczBvZw%3D%3D",
+ "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL"
+ }
+ },
+ "trackingParams": "CJ4BEJH7BRgFIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Remove from history"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "REMOVE_FROM_HISTORY"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CJsBEKc7IhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpK44OPe9xRf5FyjrM14f9l0jy-shAx9lcuoSa1AXxSX8teMWvyCmPZhJp1CLrGGTSF-CAe7NG2FwuuFHCKpzdP9aWH6PA",
+ "actions": [
+ {
+ "clickTrackingParams": "CJsBEKc7IhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "hideEnclosingAction": {
+ "hack": true
+ }
+ },
+ {
+ "clickTrackingParams": "CJsBEKc7IhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "This item has been removed from your history."
+ }
+ ]
+ },
+ "trackingParams": "CJ0BEMrHAyITCLf06onhgYkDFcXVcgkdUCEw7Q=="
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CJsBEKc7IhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ ],
+ "trackingParams": "CJsBEKc7IhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "topLevelButtons": [
+ {
+ "likeButtonRenderer": {
+ "target": {
+ "videoId": "lK5HVlcs0og"
+ },
+ "likeStatus": "INDIFFERENT",
+ "trackingParams": "CJwBEKVBGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "likesAllowed": true,
+ "serviceEndpoints": [
+ {
+ "clickTrackingParams": "CJwBEKVBGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "likeEndpoint": {
+ "status": "LIKE",
+ "target": {
+ "videoId": "lK5HVlcs0og"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CJwBEKVBGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "likeEndpoint": {
+ "status": "DISLIKE",
+ "target": {
+ "videoId": "lK5HVlcs0og"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CJwBEKVBGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "likeEndpoint": {
+ "status": "INDIFFERENT",
+ "target": {
+ "videoId": "lK5HVlcs0og"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "accessibility": {
+ "accessibilityData": {
+ "label": "Action menu"
+ }
+ }
+ }
+ },
+ "playlistItemData": {
+ "videoId": "lK5HVlcs0og"
+ }
+ }
+ },
+ {
+ "musicResponsiveListItemRenderer": {
+ "trackingParams": "CIwBEMn0AhgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "thumbnail": {
+ "musicThumbnailRenderer": {
+ "thumbnail": {
+ "thumbnails": [
+ {
+ "url": "https://i.ytimg.com/vi/S03T47hapAc/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3mpyeV7fqoxVkHya4TPBGkZvJpuBg",
+ "width": 400,
+ "height": 225
+ }
+ ]
+ },
+ "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED",
+ "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT",
+ "trackingParams": "CJkBEIS_AiITCLf06onhgYkDFcXVcgkdUCEw7Q=="
+ }
+ },
+ "overlay": {
+ "musicItemThumbnailOverlayRenderer": {
+ "background": {
+ "verticalGradient": {
+ "gradientLayerColors": [
+ "3422552064",
+ "3422552064"
+ ]
+ }
+ },
+ "content": {
+ "musicPlayButtonRenderer": {
+ "playNavigationEndpoint": {
+ "clickTrackingParams": "CJgBEMjeAiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "watchEndpoint": {
+ "videoId": "S03T47hapAc",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_OMV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CJgBEMjeAiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "playIcon": {
+ "iconType": "PLAY_ARROW"
+ },
+ "pauseIcon": {
+ "iconType": "PAUSE"
+ },
+ "iconColor": 4294967295,
+ "backgroundColor": 0,
+ "activeBackgroundColor": 0,
+ "loadingIndicatorColor": 14745645,
+ "playingIcon": {
+ "iconType": "VOLUME_UP"
+ },
+ "iconLoadingColor": 0,
+ "activeScaleFactor": 1,
+ "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL",
+ "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF",
+ "accessibilityPlayData": {
+ "accessibilityData": {
+ "label": "Play Cracker Island - Gorillaz"
+ }
+ },
+ "accessibilityPauseData": {
+ "accessibilityData": {
+ "label": "Pause Cracker Island - Gorillaz"
+ }
+ }
+ }
+ },
+ "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED",
+ "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT"
+ }
+ },
+ "flexColumns": [
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Cracker Island (feat. Thundercat)",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CIwBEMn0AhgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "S03T47hapAc",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_OMV"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Gorillaz",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CIwBEMn0AhgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "browseEndpoint": {
+ "browseId": "UCNIV5B_aJnLrKDSnW_MOmcQ",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ }
+ },
+ {
+ "text": " • "
+ },
+ {
+ "text": "47M views"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {},
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM"
+ }
+ }
+ ],
+ "fixedColumns": [
+ {
+ "musicResponsiveListItemFixedColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "3:39"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH",
+ "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL"
+ }
+ }
+ ],
+ "menu": {
+ "menuRenderer": {
+ "items": [
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Start radio"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "MIX"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CJcBEJvzBRgAIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "S03T47hapAc",
+ "playlistId": "RDAMVMS03T47hapAc",
+ "params": "wAEB",
+ "loggingContext": {
+ "vssLoggingContext": {
+ "serializedContextData": "GhFSREFNVk1TMDNUNDdoYXBBYw%3D%3D"
+ }
+ },
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_OMV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CJcBEJvzBRgAIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Play next"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "QUEUE_PLAY_NEXT"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CJUBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "S03T47hapAc",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CJUBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "S03T47hapAc"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO",
+ "commands": [
+ {
+ "clickTrackingParams": "CJUBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song will play next"
+ }
+ ]
+ },
+ "trackingParams": "CJYBEMrHAyITCLf06onhgYkDFcXVcgkdUCEw7Q=="
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CJUBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Add to queue"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_REMOTE_QUEUE"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CJMBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "S03T47hapAc",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CJMBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "S03T47hapAc"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AT_END",
+ "commands": [
+ {
+ "clickTrackingParams": "CJMBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song added to queue"
+ }
+ ]
+ },
+ "trackingParams": "CJQBEMrHAyITCLf06onhgYkDFcXVcgkdUCEw7Q=="
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CJMBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Save to playlist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_PLAYLIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CJIBEMOUBhgDIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "addToPlaylistEndpoint": {
+ "videoId": "S03T47hapAc"
+ }
+ },
+ "trackingParams": "CJIBEMOUBhgDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to artist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ARTIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CJEBEJD7BRgEIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "browseEndpoint": {
+ "browseId": "UCNIV5B_aJnLrKDSnW_MOmcQ",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ },
+ "trackingParams": "CJEBEJD7BRgEIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Share"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "SHARE"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CJABEJH7BRgFIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "shareEntityEndpoint": {
+ "serializedShareEntity": "CgtTMDNUNDdoYXBBYw%3D%3D",
+ "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL"
+ }
+ },
+ "trackingParams": "CJABEJH7BRgFIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Remove from history"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "REMOVE_FROM_HISTORY"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CI0BEKc7IhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpJEZGr5oUyd1nMJS28h8PuaYqLd1991E-0MR78jcHoAq5vXzOB7bqAi4IXaPoVOPketJdtJCMvn89R8j4Xyb3etB-xKSQ",
+ "actions": [
+ {
+ "clickTrackingParams": "CI0BEKc7IhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "hideEnclosingAction": {
+ "hack": true
+ }
+ },
+ {
+ "clickTrackingParams": "CI0BEKc7IhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "This item has been removed from your history."
+ }
+ ]
+ },
+ "trackingParams": "CI8BEMrHAyITCLf06onhgYkDFcXVcgkdUCEw7Q=="
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CI0BEKc7IhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ ],
+ "trackingParams": "CI0BEKc7IhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "topLevelButtons": [
+ {
+ "likeButtonRenderer": {
+ "target": {
+ "videoId": "S03T47hapAc"
+ },
+ "likeStatus": "INDIFFERENT",
+ "trackingParams": "CI4BEKVBGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "likesAllowed": true,
+ "serviceEndpoints": [
+ {
+ "clickTrackingParams": "CI4BEKVBGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "likeEndpoint": {
+ "status": "LIKE",
+ "target": {
+ "videoId": "S03T47hapAc"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CI4BEKVBGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "likeEndpoint": {
+ "status": "DISLIKE",
+ "target": {
+ "videoId": "S03T47hapAc"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CI4BEKVBGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "likeEndpoint": {
+ "status": "INDIFFERENT",
+ "target": {
+ "videoId": "S03T47hapAc"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "accessibility": {
+ "accessibilityData": {
+ "label": "Action menu"
+ }
+ }
+ }
+ },
+ "playlistItemData": {
+ "videoId": "S03T47hapAc"
+ }
+ }
+ }
+ ],
+ "trackingParams": "CIsBEPleGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "shelfDivider": {
+ "musicShelfDividerRenderer": {
+ "hidden": true
+ }
+ }
+ }
+ },
+ {
+ "musicShelfRenderer": {
+ "title": {
+ "runs": [
+ {
+ "text": "February 2023"
+ }
+ ]
+ },
+ "contents": [
+ {
+ "musicResponsiveListItemRenderer": {
+ "trackingParams": "CHsQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "thumbnail": {
+ "musicThumbnailRenderer": {
+ "thumbnail": {
+ "thumbnails": [
+ {
+ "url": "https://lh3.googleusercontent.com/aZlTfoNytQ8aa6nJkrN3GclMwvPpTWoWNjaIhH4k1IZ_FB1olspeJWZELsABC032Gcm1Vq7VWUx7x2gXug=w60-h60-l90-rj",
+ "width": 60,
+ "height": 60
+ },
+ {
+ "url": "https://lh3.googleusercontent.com/aZlTfoNytQ8aa6nJkrN3GclMwvPpTWoWNjaIhH4k1IZ_FB1olspeJWZELsABC032Gcm1Vq7VWUx7x2gXug=w120-h120-l90-rj",
+ "width": 120,
+ "height": 120
+ }
+ ]
+ },
+ "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED",
+ "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT",
+ "trackingParams": "CIoBEIS_AiITCLf06onhgYkDFcXVcgkdUCEw7Q=="
+ }
+ },
+ "overlay": {
+ "musicItemThumbnailOverlayRenderer": {
+ "background": {
+ "verticalGradient": {
+ "gradientLayerColors": [
+ "3422552064",
+ "3422552064"
+ ]
+ }
+ },
+ "content": {
+ "musicPlayButtonRenderer": {
+ "playNavigationEndpoint": {
+ "clickTrackingParams": "CIkBEMjeAiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "watchEndpoint": {
+ "videoId": "LlAhFxf-BV0",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CIkBEMjeAiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "playIcon": {
+ "iconType": "PLAY_ARROW"
+ },
+ "pauseIcon": {
+ "iconType": "PAUSE"
+ },
+ "iconColor": 4294967295,
+ "backgroundColor": 0,
+ "activeBackgroundColor": 0,
+ "loadingIndicatorColor": 14745645,
+ "playingIcon": {
+ "iconType": "VOLUME_UP"
+ },
+ "iconLoadingColor": 0,
+ "activeScaleFactor": 1,
+ "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL",
+ "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF",
+ "accessibilityPlayData": {
+ "accessibilityData": {
+ "label": "Play Gourmet Race (From \"Kirby Superstar\") - The 8-Bit Big Band"
+ }
+ },
+ "accessibilityPauseData": {
+ "accessibilityData": {
+ "label": "Pause Gourmet Race (From \"Kirby Superstar\") - The 8-Bit Big Band"
+ }
+ }
+ }
+ },
+ "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED",
+ "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT"
+ }
+ },
+ "flexColumns": [
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Gourmet Race (From \"Kirby Superstar\") (feat. Sam Dillon)",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CHsQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "LlAhFxf-BV0",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "The 8-Bit Big Band",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CHsQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UC4gpHwG5SQKJzV2qObgJdJg",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Backwards Compatible",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CHsQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_QwI9tAIYSEf",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM"
+ }
+ }
+ ],
+ "fixedColumns": [
+ {
+ "musicResponsiveListItemFixedColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "3:35"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH",
+ "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL"
+ }
+ }
+ ],
+ "menu": {
+ "menuRenderer": {
+ "items": [
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Start radio"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "MIX"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CIgBEJvzBRgAIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "LlAhFxf-BV0",
+ "playlistId": "RDAMVMLlAhFxf-BV0",
+ "params": "wAEB",
+ "loggingContext": {
+ "vssLoggingContext": {
+ "serializedContextData": "GhFSREFNVk1MbEFoRnhmLUJWMA%3D%3D"
+ }
+ },
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CIgBEJvzBRgAIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Play next"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "QUEUE_PLAY_NEXT"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CIYBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "LlAhFxf-BV0",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CIYBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "LlAhFxf-BV0"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO",
+ "commands": [
+ {
+ "clickTrackingParams": "CIYBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song will play next"
+ }
+ ]
+ },
+ "trackingParams": "CIcBEMrHAyITCLf06onhgYkDFcXVcgkdUCEw7Q=="
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CIYBEL7uBRgBIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Add to queue"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_REMOTE_QUEUE"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CIQBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "LlAhFxf-BV0",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CIQBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "LlAhFxf-BV0"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AT_END",
+ "commands": [
+ {
+ "clickTrackingParams": "CIQBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song added to queue"
+ }
+ ]
+ },
+ "trackingParams": "CIUBEMrHAyITCLf06onhgYkDFcXVcgkdUCEw7Q=="
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CIQBEPvvBRgCIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "toggleMenuServiceItemRenderer": {
+ "defaultText": {
+ "runs": [
+ {
+ "text": "Save to library"
+ }
+ ]
+ },
+ "defaultIcon": {
+ "iconType": "LIBRARY_ADD"
+ },
+ "defaultServiceEndpoint": {
+ "clickTrackingParams": "CIMBEIT_BRgDIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpLE7NQR22Wj326Z7Wfc8g1V-OT7QenQFJR82j_TpPlWdLnw9IgVKXsv1t3rJJB6fkfMIaBf_Q3joFZn1UZlsL8nzyXnFg"
+ }
+ },
+ "toggledText": {
+ "runs": [
+ {
+ "text": "Remove from library"
+ }
+ ]
+ },
+ "toggledIcon": {
+ "iconType": "LIBRARY_SAVED"
+ },
+ "toggledServiceEndpoint": {
+ "clickTrackingParams": "CIMBEIT_BRgDIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpK6N-46lmyH--aqaRbTL0De2JmFIYc8m5GQMnI5kIjpCElMko97vSDSlXqBMo5rJShJVGEFJNu1-xisheQ455C_DcV2Uw"
+ }
+ },
+ "trackingParams": "CIMBEIT_BRgDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Save to playlist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_PLAYLIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CIIBEMOUBhgEIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "addToPlaylistEndpoint": {
+ "videoId": "LlAhFxf-BV0"
+ }
+ },
+ "trackingParams": "CIIBEMOUBhgEIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to album"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ALBUM"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CIEBEI_7BRgFIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "browseEndpoint": {
+ "browseId": "MPREb_QwI9tAIYSEf",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ },
+ "trackingParams": "CIEBEI_7BRgFIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to artist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ARTIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CIABEJD7BRgGIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "browseEndpoint": {
+ "browseId": "UC4gpHwG5SQKJzV2qObgJdJg",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ },
+ "trackingParams": "CIABEJD7BRgGIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Share"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "SHARE"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CH8QkfsFGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "shareEntityEndpoint": {
+ "serializedShareEntity": "CgtMbEFoRnhmLUJWMA%3D%3D",
+ "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL"
+ }
+ },
+ "trackingParams": "CH8QkfsFGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Remove from history"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "REMOVE_FROM_HISTORY"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CHwQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpL2De8IUZhbv7DfcRX76elE4nbKHRdVVrf1PwRPlaJrakFmOzxj-qllXWTWRvrAEMi9fn04rzYAJbzDEW3wm5FXlyCvqw",
+ "actions": [
+ {
+ "clickTrackingParams": "CHwQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "hideEnclosingAction": {
+ "hack": true
+ }
+ },
+ {
+ "clickTrackingParams": "CHwQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "This item has been removed from your history."
+ }
+ ]
+ },
+ "trackingParams": "CH4QyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CHwQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ }
+ ],
+ "trackingParams": "CHwQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "topLevelButtons": [
+ {
+ "likeButtonRenderer": {
+ "target": {
+ "videoId": "LlAhFxf-BV0"
+ },
+ "likeStatus": "INDIFFERENT",
+ "trackingParams": "CH0QpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likesAllowed": true,
+ "serviceEndpoints": [
+ {
+ "clickTrackingParams": "CH0QpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "LIKE",
+ "target": {
+ "videoId": "LlAhFxf-BV0"
+ },
+ "actions": [
+ {
+ "clickTrackingParams": "CH0QpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "musicLibraryStatusUpdateCommand": {
+ "libraryStatus": "MUSIC_LIBRARY_STATUS_IN_LIBRARY",
+ "addToLibraryFeedbackToken": "AB9zfpLE7NQR22Wj326Z7Wfc8g1V-OT7QenQFJR82j_TpPlWdLnw9IgVKXsv1t3rJJB6fkfMIaBf_Q3joFZn1UZlsL8nzyXnFg"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "clickTrackingParams": "CH0QpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "DISLIKE",
+ "target": {
+ "videoId": "LlAhFxf-BV0"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CH0QpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "INDIFFERENT",
+ "target": {
+ "videoId": "LlAhFxf-BV0"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "accessibility": {
+ "accessibilityData": {
+ "label": "Action menu"
+ }
+ }
+ }
+ },
+ "playlistItemData": {
+ "videoId": "LlAhFxf-BV0"
+ }
+ }
+ },
+ {
+ "musicResponsiveListItemRenderer": {
+ "trackingParams": "CGoQyfQCGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "thumbnail": {
+ "musicThumbnailRenderer": {
+ "thumbnail": {
+ "thumbnails": [
+ {
+ "url": "https://lh3.googleusercontent.com/TyYSkfW7KK5oCV0rO0_NL9TZyhre2KffMonya2ll6L5xsARE1MYCMxKwIICNzDk9Cxd_L9Kxw3c8SmjjBw=w60-h60-l90-rj",
+ "width": 60,
+ "height": 60
+ },
+ {
+ "url": "https://lh3.googleusercontent.com/TyYSkfW7KK5oCV0rO0_NL9TZyhre2KffMonya2ll6L5xsARE1MYCMxKwIICNzDk9Cxd_L9Kxw3c8SmjjBw=w120-h120-l90-rj",
+ "width": 120,
+ "height": 120
+ }
+ ]
+ },
+ "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED",
+ "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT",
+ "trackingParams": "CHoQhL8CIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ "overlay": {
+ "musicItemThumbnailOverlayRenderer": {
+ "background": {
+ "verticalGradient": {
+ "gradientLayerColors": [
+ "3422552064",
+ "3422552064"
+ ]
+ }
+ },
+ "content": {
+ "musicPlayButtonRenderer": {
+ "playNavigationEndpoint": {
+ "clickTrackingParams": "CHkQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "UFFa0QoHWvE",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CHkQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "playIcon": {
+ "iconType": "PLAY_ARROW"
+ },
+ "pauseIcon": {
+ "iconType": "PAUSE"
+ },
+ "iconColor": 4294967295,
+ "backgroundColor": 0,
+ "activeBackgroundColor": 0,
+ "loadingIndicatorColor": 14745645,
+ "playingIcon": {
+ "iconType": "VOLUME_UP"
+ },
+ "iconLoadingColor": 0,
+ "activeScaleFactor": 1,
+ "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL",
+ "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF",
+ "accessibilityPlayData": {
+ "accessibilityData": {
+ "label": "Play Tank! - Seatbelts"
+ }
+ },
+ "accessibilityPauseData": {
+ "accessibilityData": {
+ "label": "Pause Tank! - Seatbelts"
+ }
+ }
+ }
+ },
+ "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED",
+ "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT"
+ }
+ },
+ "flexColumns": [
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Tank!",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CGoQyfQCGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "UFFa0QoHWvE",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Seatbelts",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CGoQyfQCGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UCFhMA8ygjzH72UqPf7PmlUg",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "COWBOY BEBOP (Original Motion Picture Soundtrack)",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CGoQyfQCGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_asHLU4Jr7nQ",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM"
+ }
+ }
+ ],
+ "fixedColumns": [
+ {
+ "musicResponsiveListItemFixedColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "3:31"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH",
+ "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL"
+ }
+ }
+ ],
+ "menu": {
+ "menuRenderer": {
+ "items": [
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Start radio"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "MIX"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CHgQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "UFFa0QoHWvE",
+ "playlistId": "RDAMVMUFFa0QoHWvE",
+ "params": "wAEB",
+ "loggingContext": {
+ "vssLoggingContext": {
+ "serializedContextData": "GhFSREFNVk1VRkZhMFFvSFd2RQ%3D%3D"
+ }
+ },
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CHgQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Play next"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "QUEUE_PLAY_NEXT"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CHYQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "UFFa0QoHWvE",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CHYQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "UFFa0QoHWvE"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO",
+ "commands": [
+ {
+ "clickTrackingParams": "CHYQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song will play next"
+ }
+ ]
+ },
+ "trackingParams": "CHcQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CHYQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Add to queue"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_REMOTE_QUEUE"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CHQQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "UFFa0QoHWvE",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CHQQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "UFFa0QoHWvE"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AT_END",
+ "commands": [
+ {
+ "clickTrackingParams": "CHQQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song added to queue"
+ }
+ ]
+ },
+ "trackingParams": "CHUQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CHQQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "toggleMenuServiceItemRenderer": {
+ "defaultText": {
+ "runs": [
+ {
+ "text": "Save to library"
+ }
+ ]
+ },
+ "defaultIcon": {
+ "iconType": "LIBRARY_ADD"
+ },
+ "defaultServiceEndpoint": {
+ "clickTrackingParams": "CHMQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpLZbVGiTSImuqmPNeXJmm2W-Y1TyQzRvdo5NpgVtyiRGffScEIAt5IJNuo7JMCJIgZM3tYogOBrBw9xXYvD7AdX3-U-Ww"
+ }
+ },
+ "toggledText": {
+ "runs": [
+ {
+ "text": "Remove from library"
+ }
+ ]
+ },
+ "toggledIcon": {
+ "iconType": "LIBRARY_SAVED"
+ },
+ "toggledServiceEndpoint": {
+ "clickTrackingParams": "CHMQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpLAw74GT5zUOhXXJYMV1uZjXKUMqOfqXWa11MVrTMeqJvKd5zMQuEExBq9spm18mvDFBo8KUzK3Xfo5ICvjwuMWRRLQXw"
+ }
+ },
+ "trackingParams": "CHMQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Save to playlist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_PLAYLIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CHIQw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToPlaylistEndpoint": {
+ "videoId": "UFFa0QoHWvE"
+ }
+ },
+ "trackingParams": "CHIQw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to album"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ALBUM"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CHEQj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_asHLU4Jr7nQ",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ },
+ "trackingParams": "CHEQj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to artist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ARTIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CHAQkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UCFhMA8ygjzH72UqPf7PmlUg",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ },
+ "trackingParams": "CHAQkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "View song credits"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "PEOPLE_GROUP"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CG8Qr6MKGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPTCUFFa0QoHWvE",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_TRACK_CREDITS"
+ }
+ }
+ }
+ },
+ "trackingParams": "CG8Qr6MKGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Share"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "SHARE"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CG4QkfsFGAgiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "shareEntityEndpoint": {
+ "serializedShareEntity": "CgtVRkZhMFFvSFd2RQ%3D%3D",
+ "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL"
+ }
+ },
+ "trackingParams": "CG4QkfsFGAgiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Remove from history"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "REMOVE_FROM_HISTORY"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CGsQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpIvqzNn3JiRi5Ie3KsGTM3Ls0y1L9FYXSd7L2D4NEOlMbbTKry-AkWQLZSVAfFFFiUt4vlFjagf3vuq8YeLmeyaENEnsg",
+ "actions": [
+ {
+ "clickTrackingParams": "CGsQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "hideEnclosingAction": {
+ "hack": true
+ }
+ },
+ {
+ "clickTrackingParams": "CGsQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "This item has been removed from your history."
+ }
+ ]
+ },
+ "trackingParams": "CG0QyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CGsQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ }
+ ],
+ "trackingParams": "CGsQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "topLevelButtons": [
+ {
+ "likeButtonRenderer": {
+ "target": {
+ "videoId": "UFFa0QoHWvE"
+ },
+ "likeStatus": "INDIFFERENT",
+ "trackingParams": "CGwQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likesAllowed": true,
+ "serviceEndpoints": [
+ {
+ "clickTrackingParams": "CGwQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "LIKE",
+ "target": {
+ "videoId": "UFFa0QoHWvE"
+ },
+ "actions": [
+ {
+ "clickTrackingParams": "CGwQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "musicLibraryStatusUpdateCommand": {
+ "libraryStatus": "MUSIC_LIBRARY_STATUS_IN_LIBRARY",
+ "addToLibraryFeedbackToken": "AB9zfpLZbVGiTSImuqmPNeXJmm2W-Y1TyQzRvdo5NpgVtyiRGffScEIAt5IJNuo7JMCJIgZM3tYogOBrBw9xXYvD7AdX3-U-Ww"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "clickTrackingParams": "CGwQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "DISLIKE",
+ "target": {
+ "videoId": "UFFa0QoHWvE"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CGwQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "INDIFFERENT",
+ "target": {
+ "videoId": "UFFa0QoHWvE"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "accessibility": {
+ "accessibilityData": {
+ "label": "Action menu"
+ }
+ }
+ }
+ },
+ "playlistItemData": {
+ "videoId": "UFFa0QoHWvE"
+ }
+ }
+ },
+ {
+ "musicResponsiveListItemRenderer": {
+ "trackingParams": "CFgQyfQCGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "thumbnail": {
+ "musicThumbnailRenderer": {
+ "thumbnail": {
+ "thumbnails": [
+ {
+ "url": "https://lh3.googleusercontent.com/QgFG5RHpesQcNq4JDY51ot0i2GRRf7GFpiO49zyAVO2C5YyKxCTglY0A9c4zBCHWkLrtg7mi-0UY5Uc=w60-h60-l90-rj",
+ "width": 60,
+ "height": 60
+ },
+ {
+ "url": "https://lh3.googleusercontent.com/QgFG5RHpesQcNq4JDY51ot0i2GRRf7GFpiO49zyAVO2C5YyKxCTglY0A9c4zBCHWkLrtg7mi-0UY5Uc=w120-h120-l90-rj",
+ "width": 120,
+ "height": 120
+ }
+ ]
+ },
+ "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED",
+ "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT",
+ "trackingParams": "CGkQhL8CIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ "overlay": {
+ "musicItemThumbnailOverlayRenderer": {
+ "background": {
+ "verticalGradient": {
+ "gradientLayerColors": [
+ "3422552064",
+ "3422552064"
+ ]
+ }
+ },
+ "content": {
+ "musicPlayButtonRenderer": {
+ "playNavigationEndpoint": {
+ "clickTrackingParams": "CGgQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "Cg90gxYZ1C0",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CGgQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "playIcon": {
+ "iconType": "PLAY_ARROW"
+ },
+ "pauseIcon": {
+ "iconType": "PAUSE"
+ },
+ "iconColor": 4294967295,
+ "backgroundColor": 0,
+ "activeBackgroundColor": 0,
+ "loadingIndicatorColor": 14745645,
+ "playingIcon": {
+ "iconType": "VOLUME_UP"
+ },
+ "iconLoadingColor": 0,
+ "activeScaleFactor": 1,
+ "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL",
+ "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF",
+ "accessibilityPlayData": {
+ "accessibilityData": {
+ "label": "Play Dang! - Mac Miller"
+ }
+ },
+ "accessibilityPauseData": {
+ "accessibilityData": {
+ "label": "Pause Dang! - Mac Miller"
+ }
+ }
+ }
+ },
+ "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED",
+ "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT"
+ }
+ },
+ "flexColumns": [
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Dang! (feat. Anderson .Paak)",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CFgQyfQCGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "Cg90gxYZ1C0",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Mac Miller",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CFgQyfQCGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UC52ZqHVQz5OoGhvbWiRal6g",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "The Divine Feminine",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CFgQyfQCGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_kCZ6WUs8Rg3",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM"
+ }
+ }
+ ],
+ "fixedColumns": [
+ {
+ "musicResponsiveListItemFixedColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "5:06"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH",
+ "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL"
+ }
+ }
+ ],
+ "menu": {
+ "menuRenderer": {
+ "items": [
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Start radio"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "MIX"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CGcQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "Cg90gxYZ1C0",
+ "playlistId": "RDAMVMCg90gxYZ1C0",
+ "params": "wAEB",
+ "loggingContext": {
+ "vssLoggingContext": {
+ "serializedContextData": "GhFSREFNVk1DZzkwZ3hZWjFDMA%3D%3D"
+ }
+ },
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CGcQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Play next"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "QUEUE_PLAY_NEXT"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CGUQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "Cg90gxYZ1C0",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CGUQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "Cg90gxYZ1C0"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO",
+ "commands": [
+ {
+ "clickTrackingParams": "CGUQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song will play next"
+ }
+ ]
+ },
+ "trackingParams": "CGYQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CGUQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Add to queue"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_REMOTE_QUEUE"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CGMQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "Cg90gxYZ1C0",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CGMQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "Cg90gxYZ1C0"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AT_END",
+ "commands": [
+ {
+ "clickTrackingParams": "CGMQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song added to queue"
+ }
+ ]
+ },
+ "trackingParams": "CGQQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CGMQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "toggleMenuServiceItemRenderer": {
+ "defaultText": {
+ "runs": [
+ {
+ "text": "Remove from library"
+ }
+ ]
+ },
+ "defaultIcon": {
+ "iconType": "LIBRARY_SAVED"
+ },
+ "defaultServiceEndpoint": {
+ "clickTrackingParams": "CGIQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpKCoTcJoGS7RGWGTxtTbZPe-SIBzyeO79F_h1Wv4Mq1PJK6JQrNoNsg-oJax_Qt-gjVL72Lm3o1A25yTP_kg_xIliwJQw"
+ }
+ },
+ "toggledText": {
+ "runs": [
+ {
+ "text": "Save to library"
+ }
+ ]
+ },
+ "toggledIcon": {
+ "iconType": "LIBRARY_ADD"
+ },
+ "toggledServiceEndpoint": {
+ "clickTrackingParams": "CGIQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpLanq6fYOBQp2MpLP0zOfqAu9vm5oGQoiD5EhyUTSkBowi6IvsQ_vk1Chd-gUnoo1ESxOw4svtrC-i_shCEm1hh_R96ng"
+ }
+ },
+ "trackingParams": "CGIQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Save to playlist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_PLAYLIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CGEQw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToPlaylistEndpoint": {
+ "videoId": "Cg90gxYZ1C0"
+ }
+ },
+ "trackingParams": "CGEQw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to album"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ALBUM"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CGAQj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_kCZ6WUs8Rg3",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ },
+ "trackingParams": "CGAQj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to artist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ARTIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CF8QkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UC52ZqHVQz5OoGhvbWiRal6g",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ },
+ "trackingParams": "CF8QkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "View song credits"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "PEOPLE_GROUP"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CF4Qr6MKGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPTCCg90gxYZ1C0",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_TRACK_CREDITS"
+ }
+ }
+ }
+ },
+ "trackingParams": "CF4Qr6MKGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Share"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "SHARE"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CF0QkfsFGAgiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "shareEntityEndpoint": {
+ "serializedShareEntity": "CgtDZzkwZ3hZWjFDMA%3D%3D",
+ "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL"
+ }
+ },
+ "trackingParams": "CF0QkfsFGAgiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Remove from history"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "REMOVE_FROM_HISTORY"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CFoQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpKD66WoJdanHu2afRa1D2sUJ2KBQEIQkXYQqw-bVqTwgblrd0Y2Yrk4sakynVmcj8iAV-JKHahNbnRyMIUe_aqsT9wvpA",
+ "actions": [
+ {
+ "clickTrackingParams": "CFoQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "hideEnclosingAction": {
+ "hack": true
+ }
+ },
+ {
+ "clickTrackingParams": "CFoQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "This item has been removed from your history."
+ }
+ ]
+ },
+ "trackingParams": "CFwQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CFoQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ }
+ ],
+ "trackingParams": "CFoQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "topLevelButtons": [
+ {
+ "likeButtonRenderer": {
+ "target": {
+ "videoId": "Cg90gxYZ1C0"
+ },
+ "likeStatus": "INDIFFERENT",
+ "trackingParams": "CFsQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likesAllowed": true,
+ "serviceEndpoints": [
+ {
+ "clickTrackingParams": "CFsQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "LIKE",
+ "target": {
+ "videoId": "Cg90gxYZ1C0"
+ },
+ "actions": [
+ {
+ "clickTrackingParams": "CFsQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "musicLibraryStatusUpdateCommand": {
+ "libraryStatus": "MUSIC_LIBRARY_STATUS_IN_LIBRARY",
+ "addToLibraryFeedbackToken": "AB9zfpLanq6fYOBQp2MpLP0zOfqAu9vm5oGQoiD5EhyUTSkBowi6IvsQ_vk1Chd-gUnoo1ESxOw4svtrC-i_shCEm1hh_R96ng"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "clickTrackingParams": "CFsQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "DISLIKE",
+ "target": {
+ "videoId": "Cg90gxYZ1C0"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CFsQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "INDIFFERENT",
+ "target": {
+ "videoId": "Cg90gxYZ1C0"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "accessibility": {
+ "accessibilityData": {
+ "label": "Action menu"
+ }
+ }
+ }
+ },
+ "badges": [
+ {
+ "musicInlineBadgeRenderer": {
+ "trackingParams": "CFkQoe0CGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "icon": {
+ "iconType": "MUSIC_EXPLICIT_BADGE"
+ },
+ "accessibilityData": {
+ "accessibilityData": {
+ "label": "Explicit"
+ }
+ }
+ }
+ }
+ ],
+ "playlistItemData": {
+ "videoId": "Cg90gxYZ1C0"
+ }
+ }
+ },
+ {
+ "musicResponsiveListItemRenderer": {
+ "trackingParams": "CEgQyfQCGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "thumbnail": {
+ "musicThumbnailRenderer": {
+ "thumbnail": {
+ "thumbnails": [
+ {
+ "url": "https://lh3.googleusercontent.com/aZlTfoNytQ8aa6nJkrN3GclMwvPpTWoWNjaIhH4k1IZ_FB1olspeJWZELsABC032Gcm1Vq7VWUx7x2gXug=w60-h60-l90-rj",
+ "width": 60,
+ "height": 60
+ },
+ {
+ "url": "https://lh3.googleusercontent.com/aZlTfoNytQ8aa6nJkrN3GclMwvPpTWoWNjaIhH4k1IZ_FB1olspeJWZELsABC032Gcm1Vq7VWUx7x2gXug=w120-h120-l90-rj",
+ "width": 120,
+ "height": 120
+ }
+ ]
+ },
+ "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED",
+ "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT",
+ "trackingParams": "CFcQhL8CIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ "overlay": {
+ "musicItemThumbnailOverlayRenderer": {
+ "background": {
+ "verticalGradient": {
+ "gradientLayerColors": [
+ "3422552064",
+ "3422552064"
+ ]
+ }
+ },
+ "content": {
+ "musicPlayButtonRenderer": {
+ "playNavigationEndpoint": {
+ "clickTrackingParams": "CFYQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "2SqWRLU32BU",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CFYQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "playIcon": {
+ "iconType": "PLAY_ARROW"
+ },
+ "pauseIcon": {
+ "iconType": "PAUSE"
+ },
+ "iconColor": 4294967295,
+ "backgroundColor": 0,
+ "activeBackgroundColor": 0,
+ "loadingIndicatorColor": 14745645,
+ "playingIcon": {
+ "iconType": "VOLUME_UP"
+ },
+ "iconLoadingColor": 0,
+ "activeScaleFactor": 1,
+ "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL",
+ "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF",
+ "accessibilityPlayData": {
+ "accessibilityData": {
+ "label": "Play Want You Gone (From \"Portal 2\") - The 8-Bit Big Band"
+ }
+ },
+ "accessibilityPauseData": {
+ "accessibilityData": {
+ "label": "Pause Want You Gone (From \"Portal 2\") - The 8-Bit Big Band"
+ }
+ }
+ }
+ },
+ "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED",
+ "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT"
+ }
+ },
+ "flexColumns": [
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Want You Gone (From \"Portal 2\") (feat. Benny Benack III)",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CEgQyfQCGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "2SqWRLU32BU",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "The 8-Bit Big Band",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CEgQyfQCGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UC4gpHwG5SQKJzV2qObgJdJg",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Backwards Compatible",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CEgQyfQCGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_QwI9tAIYSEf",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM"
+ }
+ }
+ ],
+ "fixedColumns": [
+ {
+ "musicResponsiveListItemFixedColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "3:41"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH",
+ "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL"
+ }
+ }
+ ],
+ "menu": {
+ "menuRenderer": {
+ "items": [
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Start radio"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "MIX"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CFUQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "2SqWRLU32BU",
+ "playlistId": "RDAMVM2SqWRLU32BU",
+ "params": "wAEB",
+ "loggingContext": {
+ "vssLoggingContext": {
+ "serializedContextData": "GhFSREFNVk0yU3FXUkxVMzJCVQ%3D%3D"
+ }
+ },
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CFUQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Play next"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "QUEUE_PLAY_NEXT"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CFMQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "2SqWRLU32BU",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CFMQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "2SqWRLU32BU"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO",
+ "commands": [
+ {
+ "clickTrackingParams": "CFMQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song will play next"
+ }
+ ]
+ },
+ "trackingParams": "CFQQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CFMQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Add to queue"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_REMOTE_QUEUE"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CFEQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "2SqWRLU32BU",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CFEQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "2SqWRLU32BU"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AT_END",
+ "commands": [
+ {
+ "clickTrackingParams": "CFEQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song added to queue"
+ }
+ ]
+ },
+ "trackingParams": "CFIQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CFEQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "toggleMenuServiceItemRenderer": {
+ "defaultText": {
+ "runs": [
+ {
+ "text": "Save to library"
+ }
+ ]
+ },
+ "defaultIcon": {
+ "iconType": "LIBRARY_ADD"
+ },
+ "defaultServiceEndpoint": {
+ "clickTrackingParams": "CFAQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpLlPWHHrxpeMjCiq0OOYwhvoD09J3NyLMsf-FOjvxjEM4z73aluqVrtTi1caj7mlc7mNzjvfQ8-YHRywKUdAAvMKXcVBQ"
+ }
+ },
+ "toggledText": {
+ "runs": [
+ {
+ "text": "Remove from library"
+ }
+ ]
+ },
+ "toggledIcon": {
+ "iconType": "LIBRARY_SAVED"
+ },
+ "toggledServiceEndpoint": {
+ "clickTrackingParams": "CFAQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpI0qa28UYPekFWZkSvvEgFGDH79RQF6vYaxiT62Y_jtsqlCSr7pxiEplJrSjuTtNNaPSdvRZuDCMg4HPzg0x36eOErmKg"
+ }
+ },
+ "trackingParams": "CFAQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Save to playlist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_PLAYLIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CE8Qw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToPlaylistEndpoint": {
+ "videoId": "2SqWRLU32BU"
+ }
+ },
+ "trackingParams": "CE8Qw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to album"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ALBUM"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CE4Qj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_QwI9tAIYSEf",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ },
+ "trackingParams": "CE4Qj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to artist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ARTIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CE0QkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UC4gpHwG5SQKJzV2qObgJdJg",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ },
+ "trackingParams": "CE0QkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Share"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "SHARE"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CEwQkfsFGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "shareEntityEndpoint": {
+ "serializedShareEntity": "CgsyU3FXUkxVMzJCVQ%3D%3D",
+ "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL"
+ }
+ },
+ "trackingParams": "CEwQkfsFGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Remove from history"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "REMOVE_FROM_HISTORY"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CEkQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpJ8N3kDghKreUTXjJNCA4M3mYI8JJ5Fwubaj0sgNejydirRhHEEp_zLnXMRxuwptDlmLl7whMofuuj7PimO7s2G5Vmk4w",
+ "actions": [
+ {
+ "clickTrackingParams": "CEkQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "hideEnclosingAction": {
+ "hack": true
+ }
+ },
+ {
+ "clickTrackingParams": "CEkQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "This item has been removed from your history."
+ }
+ ]
+ },
+ "trackingParams": "CEsQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CEkQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ }
+ ],
+ "trackingParams": "CEkQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "topLevelButtons": [
+ {
+ "likeButtonRenderer": {
+ "target": {
+ "videoId": "2SqWRLU32BU"
+ },
+ "likeStatus": "INDIFFERENT",
+ "trackingParams": "CEoQpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likesAllowed": true,
+ "serviceEndpoints": [
+ {
+ "clickTrackingParams": "CEoQpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "LIKE",
+ "target": {
+ "videoId": "2SqWRLU32BU"
+ },
+ "actions": [
+ {
+ "clickTrackingParams": "CEoQpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "musicLibraryStatusUpdateCommand": {
+ "libraryStatus": "MUSIC_LIBRARY_STATUS_IN_LIBRARY",
+ "addToLibraryFeedbackToken": "AB9zfpLlPWHHrxpeMjCiq0OOYwhvoD09J3NyLMsf-FOjvxjEM4z73aluqVrtTi1caj7mlc7mNzjvfQ8-YHRywKUdAAvMKXcVBQ"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "clickTrackingParams": "CEoQpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "DISLIKE",
+ "target": {
+ "videoId": "2SqWRLU32BU"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CEoQpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "INDIFFERENT",
+ "target": {
+ "videoId": "2SqWRLU32BU"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "accessibility": {
+ "accessibilityData": {
+ "label": "Action menu"
+ }
+ }
+ }
+ },
+ "playlistItemData": {
+ "videoId": "2SqWRLU32BU"
+ }
+ }
+ },
+ {
+ "musicResponsiveListItemRenderer": {
+ "trackingParams": "CDgQyfQCGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "thumbnail": {
+ "musicThumbnailRenderer": {
+ "thumbnail": {
+ "thumbnails": [
+ {
+ "url": "https://lh3.googleusercontent.com/Ks-HeVbqttdGlZO1T78EaBW7IAnh1jqjL7hNrN6FP5if_GnKplO5kPq2LEI826hmEfMwk0_OizVEBCTT=w60-h60-l90-rj",
+ "width": 60,
+ "height": 60
+ },
+ {
+ "url": "https://lh3.googleusercontent.com/Ks-HeVbqttdGlZO1T78EaBW7IAnh1jqjL7hNrN6FP5if_GnKplO5kPq2LEI826hmEfMwk0_OizVEBCTT=w120-h120-l90-rj",
+ "width": 120,
+ "height": 120
+ }
+ ]
+ },
+ "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED",
+ "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT",
+ "trackingParams": "CEcQhL8CIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ "overlay": {
+ "musicItemThumbnailOverlayRenderer": {
+ "background": {
+ "verticalGradient": {
+ "gradientLayerColors": [
+ "3422552064",
+ "3422552064"
+ ]
+ }
+ },
+ "content": {
+ "musicPlayButtonRenderer": {
+ "playNavigationEndpoint": {
+ "clickTrackingParams": "CEYQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "oHk4YYGjmHw",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CEYQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "playIcon": {
+ "iconType": "PLAY_ARROW"
+ },
+ "pauseIcon": {
+ "iconType": "PAUSE"
+ },
+ "iconColor": 4294967295,
+ "backgroundColor": 0,
+ "activeBackgroundColor": 0,
+ "loadingIndicatorColor": 14745645,
+ "playingIcon": {
+ "iconType": "VOLUME_UP"
+ },
+ "iconLoadingColor": 0,
+ "activeScaleFactor": 1,
+ "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL",
+ "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF",
+ "accessibilityPlayData": {
+ "accessibilityData": {
+ "label": "Play Still Alive (From \"Portal\") - The 8-Bit Big Band"
+ }
+ },
+ "accessibilityPauseData": {
+ "accessibilityData": {
+ "label": "Pause Still Alive (From \"Portal\") - The 8-Bit Big Band"
+ }
+ }
+ }
+ },
+ "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED",
+ "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT"
+ }
+ },
+ "flexColumns": [
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Still Alive (From \"Portal\")",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CDgQyfQCGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "oHk4YYGjmHw",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "The 8-Bit Big Band",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CDgQyfQCGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UC4gpHwG5SQKJzV2qObgJdJg",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Choose Your Character!",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CDgQyfQCGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_c367wl7Zw7K",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM"
+ }
+ }
+ ],
+ "fixedColumns": [
+ {
+ "musicResponsiveListItemFixedColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "3:12"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH",
+ "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL"
+ }
+ }
+ ],
+ "menu": {
+ "menuRenderer": {
+ "items": [
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Start radio"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "MIX"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CEUQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "oHk4YYGjmHw",
+ "playlistId": "RDAMVMoHk4YYGjmHw",
+ "params": "wAEB",
+ "loggingContext": {
+ "vssLoggingContext": {
+ "serializedContextData": "GhFSREFNVk1vSGs0WVlHam1Idw%3D%3D"
+ }
+ },
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CEUQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Play next"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "QUEUE_PLAY_NEXT"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CEMQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "oHk4YYGjmHw",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CEMQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "oHk4YYGjmHw"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO",
+ "commands": [
+ {
+ "clickTrackingParams": "CEMQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song will play next"
+ }
+ ]
+ },
+ "trackingParams": "CEQQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CEMQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Add to queue"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_REMOTE_QUEUE"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CEEQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "oHk4YYGjmHw",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CEEQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "oHk4YYGjmHw"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AT_END",
+ "commands": [
+ {
+ "clickTrackingParams": "CEEQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song added to queue"
+ }
+ ]
+ },
+ "trackingParams": "CEIQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CEEQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "toggleMenuServiceItemRenderer": {
+ "defaultText": {
+ "runs": [
+ {
+ "text": "Save to library"
+ }
+ ]
+ },
+ "defaultIcon": {
+ "iconType": "LIBRARY_ADD"
+ },
+ "defaultServiceEndpoint": {
+ "clickTrackingParams": "CEAQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpJSgYpvN9UPyc35j80lfhua3PI4HDiHZhFvW0JYRiviCt8jDSi1Z_IBqrQRi6r6SyOwFF7S_hydAKnEeBB3wKPPHFG4mA"
+ }
+ },
+ "toggledText": {
+ "runs": [
+ {
+ "text": "Remove from library"
+ }
+ ]
+ },
+ "toggledIcon": {
+ "iconType": "LIBRARY_SAVED"
+ },
+ "toggledServiceEndpoint": {
+ "clickTrackingParams": "CEAQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpIH8l8P0YOBro7HQXuq8iSR5kmNXF4XB1UTr7uzQUjPGGVmZLy25JtttODE658jDS2HmJWIaKQ0S2mvLHtdC5JnNcdJlw"
+ }
+ },
+ "trackingParams": "CEAQhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Save to playlist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_PLAYLIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CD8Qw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToPlaylistEndpoint": {
+ "videoId": "oHk4YYGjmHw"
+ }
+ },
+ "trackingParams": "CD8Qw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to album"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ALBUM"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CD4Qj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_c367wl7Zw7K",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ },
+ "trackingParams": "CD4Qj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to artist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ARTIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CD0QkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UC4gpHwG5SQKJzV2qObgJdJg",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ },
+ "trackingParams": "CD0QkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Share"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "SHARE"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CDwQkfsFGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "shareEntityEndpoint": {
+ "serializedShareEntity": "CgtvSGs0WVlHam1Idw%3D%3D",
+ "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL"
+ }
+ },
+ "trackingParams": "CDwQkfsFGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Remove from history"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "REMOVE_FROM_HISTORY"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CDkQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpLzTm-h1Kkqs50pWrr3wO8sBRvhrQG-nXtPo5pRhvbuAyvOzayjptqjneqX1K905qkW08-qRS6dnfvRvQHG01WC_QMuiA",
+ "actions": [
+ {
+ "clickTrackingParams": "CDkQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "hideEnclosingAction": {
+ "hack": true
+ }
+ },
+ {
+ "clickTrackingParams": "CDkQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "This item has been removed from your history."
+ }
+ ]
+ },
+ "trackingParams": "CDsQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CDkQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ }
+ ],
+ "trackingParams": "CDkQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "topLevelButtons": [
+ {
+ "likeButtonRenderer": {
+ "target": {
+ "videoId": "oHk4YYGjmHw"
+ },
+ "likeStatus": "INDIFFERENT",
+ "trackingParams": "CDoQpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likesAllowed": true,
+ "serviceEndpoints": [
+ {
+ "clickTrackingParams": "CDoQpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "LIKE",
+ "target": {
+ "videoId": "oHk4YYGjmHw"
+ },
+ "actions": [
+ {
+ "clickTrackingParams": "CDoQpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "musicLibraryStatusUpdateCommand": {
+ "libraryStatus": "MUSIC_LIBRARY_STATUS_IN_LIBRARY",
+ "addToLibraryFeedbackToken": "AB9zfpJSgYpvN9UPyc35j80lfhua3PI4HDiHZhFvW0JYRiviCt8jDSi1Z_IBqrQRi6r6SyOwFF7S_hydAKnEeBB3wKPPHFG4mA"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "clickTrackingParams": "CDoQpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "DISLIKE",
+ "target": {
+ "videoId": "oHk4YYGjmHw"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CDoQpUEYCSITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "INDIFFERENT",
+ "target": {
+ "videoId": "oHk4YYGjmHw"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "accessibility": {
+ "accessibilityData": {
+ "label": "Action menu"
+ }
+ }
+ }
+ },
+ "playlistItemData": {
+ "videoId": "oHk4YYGjmHw"
+ }
+ }
+ }
+ ],
+ "trackingParams": "CDcQ-V4YASITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "shelfDivider": {
+ "musicShelfDividerRenderer": {
+ "hidden": true
+ }
+ }
+ }
+ },
+ {
+ "musicShelfRenderer": {
+ "title": {
+ "runs": [
+ {
+ "text": "January 2023"
+ }
+ ]
+ },
+ "contents": [
+ {
+ "musicResponsiveListItemRenderer": {
+ "trackingParams": "CCYQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "thumbnail": {
+ "musicThumbnailRenderer": {
+ "thumbnail": {
+ "thumbnails": [
+ {
+ "url": "https://lh3.googleusercontent.com/2ORsVnMoDz54nNIDYYE14YP5r7C1NQXsIVFgO5IMs6y64rY2u4VRQYsvjpaiXlew0hQf9IFmfq4gw6-u=w60-h60-l90-rj",
+ "width": 60,
+ "height": 60
+ },
+ {
+ "url": "https://lh3.googleusercontent.com/2ORsVnMoDz54nNIDYYE14YP5r7C1NQXsIVFgO5IMs6y64rY2u4VRQYsvjpaiXlew0hQf9IFmfq4gw6-u=w120-h120-l90-rj",
+ "width": 120,
+ "height": 120
+ }
+ ]
+ },
+ "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED",
+ "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT",
+ "trackingParams": "CDYQhL8CIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ "overlay": {
+ "musicItemThumbnailOverlayRenderer": {
+ "background": {
+ "verticalGradient": {
+ "gradientLayerColors": [
+ "3422552064",
+ "3422552064"
+ ]
+ }
+ },
+ "content": {
+ "musicPlayButtonRenderer": {
+ "playNavigationEndpoint": {
+ "clickTrackingParams": "CDUQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "bsL1wgy1j-Q",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CDUQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "playIcon": {
+ "iconType": "PLAY_ARROW"
+ },
+ "pauseIcon": {
+ "iconType": "PAUSE"
+ },
+ "iconColor": 4294967295,
+ "backgroundColor": 0,
+ "activeBackgroundColor": 0,
+ "loadingIndicatorColor": 14745645,
+ "playingIcon": {
+ "iconType": "VOLUME_UP"
+ },
+ "iconLoadingColor": 0,
+ "activeScaleFactor": 1,
+ "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL",
+ "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF",
+ "accessibilityPlayData": {
+ "accessibilityData": {
+ "label": "Play Shadow Stabbing - CAKE"
+ }
+ },
+ "accessibilityPauseData": {
+ "accessibilityData": {
+ "label": "Pause Shadow Stabbing - CAKE"
+ }
+ }
+ }
+ },
+ "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED",
+ "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT"
+ }
+ },
+ "flexColumns": [
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Shadow Stabbing",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CCYQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "bsL1wgy1j-Q",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "CAKE",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CCYQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UCPEA0kfpI53U9vmqnc9lJ-A",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Comfort Eagle",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CCYQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_sHzavCc6vDo",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM"
+ }
+ }
+ ],
+ "fixedColumns": [
+ {
+ "musicResponsiveListItemFixedColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "3:08"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH",
+ "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL"
+ }
+ }
+ ],
+ "menu": {
+ "menuRenderer": {
+ "items": [
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Start radio"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "MIX"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CDQQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "bsL1wgy1j-Q",
+ "playlistId": "RDAMVMbsL1wgy1j-Q",
+ "params": "wAEB",
+ "loggingContext": {
+ "vssLoggingContext": {
+ "serializedContextData": "GhFSREFNVk1ic0wxd2d5MWotUQ%3D%3D"
+ }
+ },
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CDQQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Play next"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "QUEUE_PLAY_NEXT"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CDIQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "bsL1wgy1j-Q",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CDIQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "bsL1wgy1j-Q"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO",
+ "commands": [
+ {
+ "clickTrackingParams": "CDIQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song will play next"
+ }
+ ]
+ },
+ "trackingParams": "CDMQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CDIQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Add to queue"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_REMOTE_QUEUE"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CDAQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "bsL1wgy1j-Q",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CDAQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "bsL1wgy1j-Q"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AT_END",
+ "commands": [
+ {
+ "clickTrackingParams": "CDAQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song added to queue"
+ }
+ ]
+ },
+ "trackingParams": "CDEQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CDAQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "toggleMenuServiceItemRenderer": {
+ "defaultText": {
+ "runs": [
+ {
+ "text": "Save to library"
+ }
+ ]
+ },
+ "defaultIcon": {
+ "iconType": "LIBRARY_ADD"
+ },
+ "defaultServiceEndpoint": {
+ "clickTrackingParams": "CC8QhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpL_ryR1M99Jzih_0ldsLXcBwa4YGduyKopUYo8Ka7aMdQNQWnj8v3eZIlKFqQHyuXwZtz1vbGuO7yjwir5jA34vnBAagA"
+ }
+ },
+ "toggledText": {
+ "runs": [
+ {
+ "text": "Remove from library"
+ }
+ ]
+ },
+ "toggledIcon": {
+ "iconType": "LIBRARY_SAVED"
+ },
+ "toggledServiceEndpoint": {
+ "clickTrackingParams": "CC8QhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpJ8B1uAfrhorrrb3LNFyLRKK6pd4PVOAd17lrSURsNhvdD81oVCsQv3C_aNcDZg34A5Xiq5M3OnX1AFXYLmSNk4OiCEyg"
+ }
+ },
+ "trackingParams": "CC8QhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Save to playlist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_PLAYLIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CC4Qw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToPlaylistEndpoint": {
+ "videoId": "bsL1wgy1j-Q"
+ }
+ },
+ "trackingParams": "CC4Qw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to album"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ALBUM"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CC0Qj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_sHzavCc6vDo",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ },
+ "trackingParams": "CC0Qj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to artist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ARTIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CCwQkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UCPEA0kfpI53U9vmqnc9lJ-A",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ },
+ "trackingParams": "CCwQkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "View song credits"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "PEOPLE_GROUP"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CCsQr6MKGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPTCbsL1wgy1j-Q",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_TRACK_CREDITS"
+ }
+ }
+ }
+ },
+ "trackingParams": "CCsQr6MKGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Share"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "SHARE"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CCoQkfsFGAgiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "shareEntityEndpoint": {
+ "serializedShareEntity": "Cgtic0wxd2d5MWotUQ%3D%3D",
+ "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL"
+ }
+ },
+ "trackingParams": "CCoQkfsFGAgiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Remove from history"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "REMOVE_FROM_HISTORY"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CCcQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpKVzCu4tmZ5slH81PeCcXKhErbHcynfcKk116yMYjUcQGST276b7LBoU3gJl0tAHdC-LPkZOViU_hzzX71pkrp5DQ1XFw",
+ "actions": [
+ {
+ "clickTrackingParams": "CCcQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "hideEnclosingAction": {
+ "hack": true
+ }
+ },
+ {
+ "clickTrackingParams": "CCcQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "This item has been removed from your history."
+ }
+ ]
+ },
+ "trackingParams": "CCkQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CCcQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ }
+ ],
+ "trackingParams": "CCcQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "topLevelButtons": [
+ {
+ "likeButtonRenderer": {
+ "target": {
+ "videoId": "bsL1wgy1j-Q"
+ },
+ "likeStatus": "INDIFFERENT",
+ "trackingParams": "CCgQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likesAllowed": true,
+ "serviceEndpoints": [
+ {
+ "clickTrackingParams": "CCgQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "LIKE",
+ "target": {
+ "videoId": "bsL1wgy1j-Q"
+ },
+ "actions": [
+ {
+ "clickTrackingParams": "CCgQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "musicLibraryStatusUpdateCommand": {
+ "libraryStatus": "MUSIC_LIBRARY_STATUS_IN_LIBRARY",
+ "addToLibraryFeedbackToken": "AB9zfpL_ryR1M99Jzih_0ldsLXcBwa4YGduyKopUYo8Ka7aMdQNQWnj8v3eZIlKFqQHyuXwZtz1vbGuO7yjwir5jA34vnBAagA"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "clickTrackingParams": "CCgQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "DISLIKE",
+ "target": {
+ "videoId": "bsL1wgy1j-Q"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CCgQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "INDIFFERENT",
+ "target": {
+ "videoId": "bsL1wgy1j-Q"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "accessibility": {
+ "accessibilityData": {
+ "label": "Action menu"
+ }
+ }
+ }
+ },
+ "playlistItemData": {
+ "videoId": "bsL1wgy1j-Q"
+ }
+ }
+ }
+ ],
+ "trackingParams": "CCUQ-V4YAiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "shelfDivider": {
+ "musicShelfDividerRenderer": {
+ "hidden": true
+ }
+ }
+ }
+ },
+ {
+ "musicShelfRenderer": {
+ "title": {
+ "runs": [
+ {
+ "text": "December 2022"
+ }
+ ]
+ },
+ "contents": [
+ {
+ "musicResponsiveListItemRenderer": {
+ "trackingParams": "CBQQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "thumbnail": {
+ "musicThumbnailRenderer": {
+ "thumbnail": {
+ "thumbnails": [
+ {
+ "url": "https://lh3.googleusercontent.com/kSPVOVNh0C9kfkYFD8UuurMsnCB8r5WKzvxSP68HxM1fZnOs-FetIJlatZpXeTuoTIBFd_jrK-Y8W6wn=w60-h60-l90-rj",
+ "width": 60,
+ "height": 60
+ },
+ {
+ "url": "https://lh3.googleusercontent.com/kSPVOVNh0C9kfkYFD8UuurMsnCB8r5WKzvxSP68HxM1fZnOs-FetIJlatZpXeTuoTIBFd_jrK-Y8W6wn=w120-h120-l90-rj",
+ "width": 120,
+ "height": 120
+ }
+ ]
+ },
+ "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED",
+ "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT",
+ "trackingParams": "CCQQhL8CIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ "overlay": {
+ "musicItemThumbnailOverlayRenderer": {
+ "background": {
+ "verticalGradient": {
+ "gradientLayerColors": [
+ "3422552064",
+ "3422552064"
+ ]
+ }
+ },
+ "content": {
+ "musicPlayButtonRenderer": {
+ "playNavigationEndpoint": {
+ "clickTrackingParams": "CCMQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "Bcus42ihkTI",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CCMQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "playIcon": {
+ "iconType": "PLAY_ARROW"
+ },
+ "pauseIcon": {
+ "iconType": "PAUSE"
+ },
+ "iconColor": 4294967295,
+ "backgroundColor": 0,
+ "activeBackgroundColor": 0,
+ "loadingIndicatorColor": 14745645,
+ "playingIcon": {
+ "iconType": "VOLUME_UP"
+ },
+ "iconLoadingColor": 0,
+ "activeScaleFactor": 1,
+ "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL",
+ "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF",
+ "accessibilityPlayData": {
+ "accessibilityData": {
+ "label": "Play I'd Rather Go Blind - Etta James"
+ }
+ },
+ "accessibilityPauseData": {
+ "accessibilityData": {
+ "label": "Pause I'd Rather Go Blind - Etta James"
+ }
+ }
+ }
+ },
+ "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED",
+ "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT"
+ }
+ },
+ "flexColumns": [
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "I'd Rather Go Blind",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CBQQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "Bcus42ihkTI",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Etta James",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CBQQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UCieyolnCbsWzyEt6wsd7lgQ",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Tell Mama",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CBQQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_zqisM59IhFI",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM"
+ }
+ }
+ ],
+ "fixedColumns": [
+ {
+ "musicResponsiveListItemFixedColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "2:37"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH",
+ "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL"
+ }
+ }
+ ],
+ "menu": {
+ "menuRenderer": {
+ "items": [
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Start radio"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "MIX"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CCIQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "Bcus42ihkTI",
+ "playlistId": "RDAMVMBcus42ihkTI",
+ "params": "wAEB",
+ "loggingContext": {
+ "vssLoggingContext": {
+ "serializedContextData": "GhFSREFNVk1CY3VzNDJpaGtUSQ%3D%3D"
+ }
+ },
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_ATV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CCIQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Play next"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "QUEUE_PLAY_NEXT"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CCAQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "Bcus42ihkTI",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CCAQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "Bcus42ihkTI"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO",
+ "commands": [
+ {
+ "clickTrackingParams": "CCAQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song will play next"
+ }
+ ]
+ },
+ "trackingParams": "CCEQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CCAQvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Add to queue"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_REMOTE_QUEUE"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CB4Q--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "Bcus42ihkTI",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CB4Q--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "Bcus42ihkTI"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AT_END",
+ "commands": [
+ {
+ "clickTrackingParams": "CB4Q--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song added to queue"
+ }
+ ]
+ },
+ "trackingParams": "CB8QyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CB4Q--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "toggleMenuServiceItemRenderer": {
+ "defaultText": {
+ "runs": [
+ {
+ "text": "Save to library"
+ }
+ ]
+ },
+ "defaultIcon": {
+ "iconType": "LIBRARY_ADD"
+ },
+ "defaultServiceEndpoint": {
+ "clickTrackingParams": "CB0QhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpLHMvI9NTAH1b72E3E8M_TiRHfeAV2QQG99zKHXwLc1s4bS1bRiAuxjZcPZa8eCR9-LkFBlnpMLPwhsWd5JH6-jwLOk0Q"
+ }
+ },
+ "toggledText": {
+ "runs": [
+ {
+ "text": "Remove from library"
+ }
+ ]
+ },
+ "toggledIcon": {
+ "iconType": "LIBRARY_SAVED"
+ },
+ "toggledServiceEndpoint": {
+ "clickTrackingParams": "CB0QhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpJmCHH0N61R-ck4nVDG4wtOOshhZc320HAfVdKraBseoCJBO23YO04iwGWaW3Ss4OOjDmHbiQo67BXYjioJ6O5s3e5uLg"
+ }
+ },
+ "trackingParams": "CB0QhP8FGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Save to playlist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_PLAYLIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CBwQw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToPlaylistEndpoint": {
+ "videoId": "Bcus42ihkTI"
+ }
+ },
+ "trackingParams": "CBwQw5QGGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to album"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ALBUM"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CBsQj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPREb_zqisM59IhFI",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ALBUM"
+ }
+ }
+ }
+ },
+ "trackingParams": "CBsQj_sFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to artist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ARTIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CBoQkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UCieyolnCbsWzyEt6wsd7lgQ",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ },
+ "trackingParams": "CBoQkPsFGAYiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "View song credits"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "PEOPLE_GROUP"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CBkQr6MKGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "MPTCBcus42ihkTI",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_TRACK_CREDITS"
+ }
+ }
+ }
+ },
+ "trackingParams": "CBkQr6MKGAciEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Share"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "SHARE"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CBgQkfsFGAgiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "shareEntityEndpoint": {
+ "serializedShareEntity": "CgtCY3VzNDJpaGtUSQ%3D%3D",
+ "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL"
+ }
+ },
+ "trackingParams": "CBgQkfsFGAgiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Remove from history"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "REMOVE_FROM_HISTORY"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CBUQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpJej_VTpKrs8fIOKS7t0oBIpfXVkIK34ypeEKoP6dsYm3e-A0EiO80JiEWv-k0dVGYDMAiyJz_BmNEvHFta1l-1f_eYoQ",
+ "actions": [
+ {
+ "clickTrackingParams": "CBUQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "hideEnclosingAction": {
+ "hack": true
+ }
+ },
+ {
+ "clickTrackingParams": "CBUQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "This item has been removed from your history."
+ }
+ ]
+ },
+ "trackingParams": "CBcQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CBUQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ }
+ ],
+ "trackingParams": "CBUQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "topLevelButtons": [
+ {
+ "likeButtonRenderer": {
+ "target": {
+ "videoId": "Bcus42ihkTI"
+ },
+ "likeStatus": "INDIFFERENT",
+ "trackingParams": "CBYQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likesAllowed": true,
+ "serviceEndpoints": [
+ {
+ "clickTrackingParams": "CBYQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "LIKE",
+ "target": {
+ "videoId": "Bcus42ihkTI"
+ },
+ "actions": [
+ {
+ "clickTrackingParams": "CBYQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "musicLibraryStatusUpdateCommand": {
+ "libraryStatus": "MUSIC_LIBRARY_STATUS_IN_LIBRARY",
+ "addToLibraryFeedbackToken": "AB9zfpLHMvI9NTAH1b72E3E8M_TiRHfeAV2QQG99zKHXwLc1s4bS1bRiAuxjZcPZa8eCR9-LkFBlnpMLPwhsWd5JH6-jwLOk0Q"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "clickTrackingParams": "CBYQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "DISLIKE",
+ "target": {
+ "videoId": "Bcus42ihkTI"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CBYQpUEYCiITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "INDIFFERENT",
+ "target": {
+ "videoId": "Bcus42ihkTI"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "accessibility": {
+ "accessibilityData": {
+ "label": "Action menu"
+ }
+ }
+ }
+ },
+ "playlistItemData": {
+ "videoId": "Bcus42ihkTI"
+ }
+ }
+ }
+ ],
+ "trackingParams": "CBMQ-V4YAyITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "shelfDivider": {
+ "musicShelfDividerRenderer": {
+ "hidden": true
+ }
+ }
+ }
+ },
+ {
+ "musicShelfRenderer": {
+ "title": {
+ "runs": [
+ {
+ "text": "July 2022"
+ }
+ ]
+ },
+ "contents": [
+ {
+ "musicResponsiveListItemRenderer": {
+ "trackingParams": "CAUQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "thumbnail": {
+ "musicThumbnailRenderer": {
+ "thumbnail": {
+ "thumbnails": [
+ {
+ "url": "https://i.ytimg.com/vi/iBs8XgoNe1c/sddefault.jpg?sqp=-oaymwEWCJADEOEBIAQqCghqEJQEGHgg6AJIWg&rs=AMzJL3kTwvgU5Fs-nyi0thvefssM2_6h3g",
+ "width": 400,
+ "height": 225
+ }
+ ]
+ },
+ "thumbnailCrop": "MUSIC_THUMBNAIL_CROP_UNSPECIFIED",
+ "thumbnailScale": "MUSIC_THUMBNAIL_SCALE_ASPECT_FIT",
+ "trackingParams": "CBIQhL8CIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ },
+ "overlay": {
+ "musicItemThumbnailOverlayRenderer": {
+ "background": {
+ "verticalGradient": {
+ "gradientLayerColors": [
+ "3422552064",
+ "3422552064"
+ ]
+ }
+ },
+ "content": {
+ "musicPlayButtonRenderer": {
+ "playNavigationEndpoint": {
+ "clickTrackingParams": "CBEQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "watchEndpoint": {
+ "videoId": "iBs8XgoNe1c",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_OMV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CBEQyN4CIhMIt_TqieGBiQMVxdVyCR1QITDt",
+ "playIcon": {
+ "iconType": "PLAY_ARROW"
+ },
+ "pauseIcon": {
+ "iconType": "PAUSE"
+ },
+ "iconColor": 4294967295,
+ "backgroundColor": 0,
+ "activeBackgroundColor": 0,
+ "loadingIndicatorColor": 14745645,
+ "playingIcon": {
+ "iconType": "VOLUME_UP"
+ },
+ "iconLoadingColor": 0,
+ "activeScaleFactor": 1,
+ "buttonSize": "MUSIC_PLAY_BUTTON_SIZE_SMALL",
+ "rippleTarget": "MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF",
+ "accessibilityPlayData": {
+ "accessibilityData": {
+ "label": "Play Generous Heart - Maya Hawke"
+ }
+ },
+ "accessibilityPauseData": {
+ "accessibilityData": {
+ "label": "Pause Generous Heart - Maya Hawke"
+ }
+ }
+ }
+ },
+ "contentPosition": "MUSIC_ITEM_THUMBNAIL_OVERLAY_CONTENT_POSITION_CENTERED",
+ "displayStyle": "MUSIC_ITEM_THUMBNAIL_OVERLAY_DISPLAY_STYLE_PERSISTENT"
+ }
+ },
+ "flexColumns": [
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Generous Heart",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CAUQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "iBs8XgoNe1c",
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_OMV"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Maya Hawke",
+ "navigationEndpoint": {
+ "clickTrackingParams": "CAUQyfQCGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UCpCdLTLfDakfXAI29jeytkg",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ }
+ },
+ {
+ "text": " • "
+ },
+ {
+ "text": "1.1M views"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH"
+ }
+ },
+ {
+ "musicResponsiveListItemFlexColumnRenderer": {
+ "text": {},
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_MEDIUM"
+ }
+ }
+ ],
+ "fixedColumns": [
+ {
+ "musicResponsiveListItemFixedColumnRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "3:49"
+ }
+ ]
+ },
+ "displayPriority": "MUSIC_RESPONSIVE_LIST_ITEM_COLUMN_DISPLAY_PRIORITY_HIGH",
+ "size": "MUSIC_RESPONSIVE_LIST_ITEM_FIXED_COLUMN_SIZE_SMALL"
+ }
+ }
+ ],
+ "menu": {
+ "menuRenderer": {
+ "items": [
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Start radio"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "MIX"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CBAQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "iBs8XgoNe1c",
+ "playlistId": "RDAMVMiBs8XgoNe1c",
+ "params": "wAEB",
+ "loggingContext": {
+ "vssLoggingContext": {
+ "serializedContextData": "GhFSREFNVk1pQnM4WGdvTmUxYw%3D%3D"
+ }
+ },
+ "watchEndpointMusicSupportedConfigs": {
+ "watchEndpointMusicConfig": {
+ "musicVideoType": "MUSIC_VIDEO_TYPE_OMV"
+ }
+ }
+ }
+ },
+ "trackingParams": "CBAQm_MFGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Play next"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "QUEUE_PLAY_NEXT"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CA4Qvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "iBs8XgoNe1c",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CA4Qvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "iBs8XgoNe1c"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AFTER_CURRENT_VIDEO",
+ "commands": [
+ {
+ "clickTrackingParams": "CA4Qvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song will play next"
+ }
+ ]
+ },
+ "trackingParams": "CA8QyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CA4Qvu4FGAEiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Add to queue"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_REMOTE_QUEUE"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CAwQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "queueAddEndpoint": {
+ "queueTarget": {
+ "videoId": "iBs8XgoNe1c",
+ "onEmptyQueue": {
+ "clickTrackingParams": "CAwQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "watchEndpoint": {
+ "videoId": "iBs8XgoNe1c"
+ }
+ }
+ },
+ "queueInsertPosition": "INSERT_AT_END",
+ "commands": [
+ {
+ "clickTrackingParams": "CAwQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "Song added to queue"
+ }
+ ]
+ },
+ "trackingParams": "CA0QyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CAwQ--8FGAIiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Save to playlist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ADD_TO_PLAYLIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CAsQw5QGGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToPlaylistEndpoint": {
+ "videoId": "iBs8XgoNe1c"
+ }
+ },
+ "trackingParams": "CAsQw5QGGAMiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Go to artist"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "ARTIST"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CAoQkPsFGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "browseEndpoint": {
+ "browseId": "UCpCdLTLfDakfXAI29jeytkg",
+ "browseEndpointContextSupportedConfigs": {
+ "browseEndpointContextMusicConfig": {
+ "pageType": "MUSIC_PAGE_TYPE_ARTIST"
+ }
+ }
+ }
+ },
+ "trackingParams": "CAoQkPsFGAQiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuNavigationItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Share"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "SHARE"
+ },
+ "navigationEndpoint": {
+ "clickTrackingParams": "CAkQkfsFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "shareEntityEndpoint": {
+ "serializedShareEntity": "CgtpQnM4WGdvTmUxYw%3D%3D",
+ "sharePanelType": "SHARE_PANEL_TYPE_UNIFIED_SHARE_PANEL"
+ }
+ },
+ "trackingParams": "CAkQkfsFGAUiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ {
+ "menuServiceItemRenderer": {
+ "text": {
+ "runs": [
+ {
+ "text": "Remove from history"
+ }
+ ]
+ },
+ "icon": {
+ "iconType": "REMOVE_FROM_HISTORY"
+ },
+ "serviceEndpoint": {
+ "clickTrackingParams": "CAYQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "feedbackEndpoint": {
+ "feedbackToken": "AB9zfpJ3thZOEUQswqS4m4Lzmd53sj00aZ0LU4nzWKeZhzICUgXTnd6_HTpAYp-SaerIhrB2gYL5Y_evqwErFfx8qiUAGzpHZA",
+ "actions": [
+ {
+ "clickTrackingParams": "CAYQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "hideEnclosingAction": {
+ "hack": true
+ }
+ },
+ {
+ "clickTrackingParams": "CAYQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "addToToastAction": {
+ "item": {
+ "notificationTextRenderer": {
+ "successResponseText": {
+ "runs": [
+ {
+ "text": "This item has been removed from your history."
+ }
+ ]
+ },
+ "trackingParams": "CAgQyscDIhMIt_TqieGBiQMVxdVyCR1QITDt"
+ }
+ }
+ }
+ }
+ ]
+ }
+ },
+ "trackingParams": "CAYQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ }
+ ],
+ "trackingParams": "CAYQpzsiEwi39OqJ4YGJAxXF1XIJHVAhMO0=",
+ "topLevelButtons": [
+ {
+ "likeButtonRenderer": {
+ "target": {
+ "videoId": "iBs8XgoNe1c"
+ },
+ "likeStatus": "INDIFFERENT",
+ "trackingParams": "CAcQpUEYByITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likesAllowed": true,
+ "serviceEndpoints": [
+ {
+ "clickTrackingParams": "CAcQpUEYByITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "LIKE",
+ "target": {
+ "videoId": "iBs8XgoNe1c"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CAcQpUEYByITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "DISLIKE",
+ "target": {
+ "videoId": "iBs8XgoNe1c"
+ }
+ }
+ },
+ {
+ "clickTrackingParams": "CAcQpUEYByITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "likeEndpoint": {
+ "status": "INDIFFERENT",
+ "target": {
+ "videoId": "iBs8XgoNe1c"
+ }
+ }
+ }
+ ]
+ }
+ }
+ ],
+ "accessibility": {
+ "accessibilityData": {
+ "label": "Action menu"
+ }
+ }
+ }
+ },
+ "playlistItemData": {
+ "videoId": "iBs8XgoNe1c"
+ }
+ }
+ }
+ ],
+ "trackingParams": "CAQQ-V4YBCITCLf06onhgYkDFcXVcgkdUCEw7Q==",
+ "shelfDivider": {
+ "musicShelfDividerRenderer": {
+ "hidden": true
+ }
+ }
+ }
+ }
+ ],
+ "trackingParams": "CAMQui8iEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ "tabIdentifier": "FEmusic_history",
+ "trackingParams": "CAIQ8JMBGAAiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ }
+ ]
+ }
+ },
+ "header": {
+ "musicHeaderRenderer": {
+ "title": {
+ "runs": [
+ {
+ "text": "History"
+ }
+ ]
+ },
+ "trackingParams": "CAEQ4HIiEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+ },
+ "trackingParams": "CAAQhGciEwi39OqJ4YGJAxXF1XIJHVAhMO0="
+ }
+}
diff --git a/src/backend/utils/PlayComparisonUtils.ts b/src/backend/utils/PlayComparisonUtils.ts
index c81f5f2f..330fe449 100644
--- a/src/backend/utils/PlayComparisonUtils.ts
+++ b/src/backend/utils/PlayComparisonUtils.ts
@@ -1,4 +1,4 @@
-import { getListDiff } from "@donedeal0/superdiff";
+import { getListDiff, ListDiff } from "@donedeal0/superdiff";
import { PlayObject } from "../../core/Atomic.js";
import { buildTrackString } from "../../core/StringUtils.js";
@@ -38,7 +38,7 @@ export type ListTransformers = PlayTransformer[];
export const defaultListTransformers: ListTransformers = [metaInvariantTransform, playDateInvariantTransform];
-export const getPlaysDiff = (aPlays: PlayObject[], bPlays: PlayObject[], transformers: ListTransformers = defaultListTransformers) => {
+export const getPlaysDiff = (aPlays: PlayObject[], bPlays: PlayObject[], transformers: ListTransformers = defaultListTransformers): ListDiff => {
const cleanAPlays = transformers === undefined ? aPlays : transformers.reduce((acc: PlayObject[], curr) => acc.map(curr), aPlays);
const cleanBPlays = transformers === undefined ? bPlays : transformers.reduce((acc: PlayObject[], curr) => acc.map(curr), bPlays);
@@ -114,13 +114,69 @@ export const playsAreAddedOnly = (aPlays: PlayObject[], bPlays: PlayObject[], tr
}
}
const added = results.diff.filter(x => x.status === 'added');
- return [addType !== 'insert', added.map(x => bPlays[x.newIndex]), addType];
+ return [addType !== 'insert' && addType !== undefined, added.map(x => bPlays[x.newIndex]), addType];
}
-export const humanReadableDiff = (aPlay: PlayObject[], bPlay: PlayObject[], result: any): string => {
+export const playsAreBumpedOnly = (aPlays: PlayObject[], bPlays: PlayObject[], transformers: ListTransformers = defaultListTransformers): [boolean, PlayObject[]?, ('append' | 'prepend')?] => {
+ const results = getPlaysDiff(aPlays, bPlays, transformers);
+ if(results.status === 'equal' || results.status === 'deleted') {
+ return [false];
+ }
+ if(aPlays.length !== bPlays.length) {
+ return [false];
+ }
+
+ let addTypeShouldBe: 'append' | 'prepend';
+ let cursor: 'moved' | 'equal';
+
+ for(const [index, diffData] of results.diff.entries()) {
+ if(diffData.status !== 'moved' && diffData.status !== 'equal') {
+ return [false];
+ }
+
+ if(index === 0) {
+ if(diffData.status === 'moved' && diffData.indexDiff < 0) {
+ addTypeShouldBe = 'prepend';
+ } else if(diffData.status === 'equal') {
+ addTypeShouldBe = 'append';
+ } else {
+ return [false];
+ }
+ } else {
+
+ if(index === results.diff.length - 1) {
+ if(addTypeShouldBe === 'append' && diffData.status !== 'moved') {
+ return [false];
+ }
+ } else {
+
+ if(![-1,0,1].includes(diffData.indexDiff)) {
+ return [false]; // shifted more than one spot in list which isn't a bump
+ }
+ if(cursor === undefined) { // first non-initial item
+ cursor = diffData.status;
+ continue;
+ } else if(
+ (addTypeShouldBe === 'prepend' && cursor === 'equal' && diffData.status === 'moved')
+ || (addTypeShouldBe === 'append' && cursor === 'moved' && diffData.status === 'equal')
+ ) {
+ // can't go back from equal (passed bump point) to moved b/c would mean more than one item moved and not just one bump
+ return [false];
+ }
+
+ // otherwise intermediate
+ cursor = diffData.status;
+ }
+ }
+ }
+
+ return [true, addTypeShouldBe === 'prepend' ? [bPlays[0]] : [bPlays[bPlays.length - 1]], addTypeShouldBe];
+}
+
+export const humanReadableDiff = (aPlay: PlayObject[], bPlay: PlayObject[], result: ListDiff): string => {
const changes: [string, string?][] = [];
for(const [index, play] of bPlay.entries()) {
- const ab: [string, string?] = [`${index + 1}. ${buildTrackString(play)}`];
+ const ab: [string, string?] = [`${index + 1}. ${buildTrackString(play, {include: ['artist', 'track', 'trackId', 'album']})}`];
const isEqual = result.diff.some(x => x.status === 'equal' && x.prevIndex === index && x.newIndex === index);
if(!isEqual) {
@@ -141,7 +197,7 @@ export const humanReadableDiff = (aPlay: PlayObject[], bPlay: PlayObject[], resu
// was updated, probably??
const updated = result.diff.filter(x => x.status === 'deleted' && x.prevIndex === index);
if(updated.length > 0) {
- ab.push(`Updated - Original => ${buildTrackString( aPlay[updated[0].preIndex])}`);
+ ab.push(`Updated - Original => ${buildTrackString( aPlay[updated[0].prevIndex])}`);
} else {
ab.push('Should not have gotten this far!');
}
diff --git a/src/client/components/statusCard/SourceStatusCard.tsx b/src/client/components/statusCard/SourceStatusCard.tsx
index 269db1db..475ae06e 100644
--- a/src/client/components/statusCard/SourceStatusCard.tsx
+++ b/src/client/components/statusCard/SourceStatusCard.tsx
@@ -81,6 +81,7 @@ const SourceStatusCard = (props: SourceStatusCardData) => {
{discovered}: {tracksDiscovered}
{upstreamRecent}
{canPoll && hasAuthInteraction ? (Re)authenticate : null}
+ {type === 'ytmusic' && 'userCode' in data ? Code: {data.userCode as string}
: null}
);
}
return (