Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

All thumbnails are gray/all titles are missing until refresh #230

Closed
QuietMisdreavus opened this issue Mar 4, 2024 · 10 comments
Closed

Comments

@QuietMisdreavus
Copy link

I seem to be in a similar boat to #137 and #206, but i feel like this situation is slightly different from the apparent causes they've got.

I'm running in Safari (v17.3.1) using the extension from the App Store (v1.5.5), and every time i load a page in a new tab, the thumbnails and titles fail to load. However, if i reload the page, the thumbnails and titles correctly load and the site displays as normal until i close the tab.

image

Extension list:

  • Nearly everything from 1Blocker (which has a site override to ignore YouTube anyway)
  • Bitwarden
  • Cascadea (nothing that modifies YouTube though)
  • Convusic
  • Ivory
  • Kagi
  • NetNewsWire "Subscribe To Feed"
  • Safarikai
  • SponsorBlock
  • StopTheMadness
  • Superagent
  • Tampermonkey
    • The only script i have installed is BetterTTV

No channel overrides set.

Uninstalling the extension (by moving the app to Trash) and reinstalling (by dragging the app out of Trash and reopening to add the extension back) allowed the correct behavior exactly once, before reverting to the bugged behavior.

Debug info
{
    "debug": {
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.3.1 Safari/605.1.15",
        "platform": "MacIntel",
        "language": "en-US",
        "extensionVersion": "1.5.5"
    },
    "config": {
        "titleReplacements": 9816,
        "vip": false,
        "alreadyActivated": true,
        "darkMode": false,
        "replaceThumbnails": true,
        "titleFormatting": -1,
        "thumbnailFallback": 0,
        "extensionEnabled": true,
        "shouldCleanEmojis": true,
        "thumbnailReplacements": 35777,
        "showInfoAboutRandomThumbnails": true,
        "alwaysShowShowOriginalButton": true,
        "allowExpirements": true,
        "showDonationLink": true,
        "showUpsells": true,
        "donateClicked": 0,
        "invidiousInstances": 0,
        "keepUnsubmitted": true,
        "keepUnsubmittedInPrivate": false,
        "onlyTitleCaseInEnglish": false,
        "serverAddress": "Default server address",
        "thumbnailServerAddress": "https://dearrow-thumb.ajay.app",
        "fetchTimeout": 7000,
        "startLocalRenderTimeout": 2000,
        "renderTimeout": 25000,
        "thumbnailCacheUse": 2,
        "showGuidelineHelp": true,
        "thumbnailFallbackAutogenerated": 0,
        "showLiveCover": true,
        "defaultToCustom": true,
        "showOriginalOnHover": false,
        "importedConfig": false,
        "replaceTitles": true,
        "useCrowdsourcedTitles": true,
        "titleMaxLines": 3,
        "channelOverrides": {},
        "customConfigurations": {},
        "showIconForFormattedTitles": true,
        "countReplacements": true,
        "ignoreAbThumbnails": true,
        "activated": true,
        "freeAccessWaitingPeriod": 259200000,
        "firefoxOldContentScriptRegistration": false,
        "lastIncognitoStatus": false,
        "showActivatedMessage": false
    }
}
@ajayyy
Copy link
Owner

ajayyy commented Mar 4, 2024

What happens if you click a video while in this state?

@QuietMisdreavus
Copy link
Author

The video page loads, and the title/thumbnail replacement starts working for the video itself and the recommendations.

@QuietMisdreavus
Copy link
Author

Oh, this is interesting, though. I finished watching that video and clicked the sidebar link back to my Subscriptions page. Those thumbnails and titles loaded correctly. However, when i navigated to the home page, i got the same behavior as #206:

image

@ajayyy
Copy link
Owner

ajayyy commented Mar 4, 2024

Could you try disabling your other extensions?

This seems to be the function listening for new thumbnails appearing not working (since it falls back to also checking for thumbnails on page navigation, which is why it works for the first few)

@QuietMisdreavus
Copy link
Author

Same behavior, though i went through the "click a video, click back to Subscriptions, click to Home" flow and the home page correctly loaded thumbnails and titles.

@IMNdi
Copy link

IMNdi commented Mar 5, 2024

I had this too on Edge, blanks for all, refreshing did get blanks again, however clicking on a link generated thumbs and everything until the next page loaded. So as a result, I managed to make it load, I don't remember how, unfortunately. Right click link? Middle click? Click and back again?

Anyway, after 24 hours it just started working again and I assumed I was A/B tested by Youtube.

I also have some other weird issues over the next 48 hours, related to lazy loading things. For example, I clicked video A, had description A, title A, etc. Clicking a video from that page ( /v= ) managed to load the next video, but not details. Title was stuck as previous title, description was left over, comments did load on scroll down.

That also went away.

I suspect it was YT A/B testing some UI. Common extensions with you: Bitwarden, TamperMonkey (YT age restriction bypass) and Sponsorblock.

@ajayyy
Copy link
Owner

ajayyy commented Mar 5, 2024

@QuietMisdreavus

Could you run the following commands in the console:

console.log("location", window.location.host, window, window?.customElements, window?.customElements?.define, window.customElements?.define?.toString());
console.log(("version", window["versionCB"], document.querySelector("#sponsorblock-document-script"), document.querySelectorAll("#sponsorblock-document-script"))
console.log(("fetch", window.fetch)

window.addEventListener("message", console.log)
document.createElement("ytd-thumbnail")
console.log("finished setup")

Then open youtube.com, wait a few seconds, then click a video, wait a few seconds, then click the back button then scroll down until more thumbnails load on the right

Then send the result from the console.

@QuietMisdreavus
Copy link
Author

Console output
> console.log("location", window.location.host, window, window?.customElements, window?.customElements?.define, window.customElements?.define?.toString());
console.log("version", window["versionCB"], document.querySelector("#sponsorblock-document-script"), document.querySelectorAll("#sponsorblock-document-script"));
console.log("fetch", window.fetch);

window.addEventListener("message", console.log);
document.createElement("ytd-thumbnail");
console.log("finished setup");
[Log] location – "www.youtube.com" (4)
Window {listeners: Object, 0: Window}
CustomElementRegistry {getName: function, whenDefined: function, upgrade: function}
(t,n,i)=>{let o=n;if(v.includes(t))if(n.toString().startsWith("class")){class e extends n{constructor(){super(),f({type:"newElement",name:t})}}o=e}else o=function(){n.call(this),f({type:"newElement",name:t})},Object.setPrototypeOf(o.prototype,n.prototype),Object.setPrototypeOf(o,n);e(t,o,i)}
"(t,n,i)=>{let o=n;if(v.includes(t))if(n.toString().startsWith(\"class\")){class e extends n{constructor(){super(),f({type:\"newElement\",name:t})}}o=e}else o=function(){n.call(this),f({type:\"newElement\",name:t})},Object.setPrototypeOf(o.prototype,n.prototype),Object.setPrototypeOf(o,n);e(t,o,i)}"
[Log] version – "1.1.40" (2)
<script id="sponsorblock-document-script" version="1.1.40">…</script>
NodeList [<script id="sponsorblock-document-script">, <div id="sponsorblock-document-script">] (2)
[Log] fetch – (e,t)=>e instanceof Request&&m.some((t=>e.url.includes(t)))?(e.url.includes("/youtubei/v1/next")&&(setTimeout((()=>f({type:"newElement",name:""})),1e3),setTimeout((()=>f({type:"newElement",name:""})),2500),setTimeout((()=>f({type:"newElement",name:""})),8e3)),new Promise(((n,o)=>i(this,void 0,void 0,(function*(){try{const i=yield c(e,t),o=yield i.json();n(new Response(JSON.stringify(o),i)),S(o)}catch(e){o(e)}}))))):c(e,t)
[Log] finished setup
< undefined
[Error] Failed to load resource: the server responded with a status of 401 (Unauthorized) (log, line 0)
[Error] Failed to load resource: the server responded with a status of 401 (Unauthorized) (log, line 0)
[Error] Failed to load resource: the server responded with a status of 401 (Unauthorized) (log, line 0)
[Error] Failed to load resource: the server responded with a status of 401 (Unauthorized) (log, line 0)
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: Object, …}
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: {type: "sb-reset-media-session-link", videoID: null}, …}
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: {type: "sb-reset-media-session-link", videoID: null}, …}
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: {source: "sponsorblock", type: "videoIDsLoaded", videoIDs: ["dOLYOSk26jQ"]}, …}
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: Object, …}
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: {source: "sponsorblock", type: "newElement", name: ""}, …}
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: Object, …}
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: Object, …}
[Log] dOLYOSk26jQ – 0.567 – "innerTube" (content.js, line 2)
[Log] BtF7mQljqyk – 0.387 – "innerTube" (content.js, line 2)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Log] QQD3yx-JF2E – 0.418 – "innerTube" (content.js, line 2)
[Log] YZ2gBai8xRA – 0.423 – "innerTube" (content.js, line 2)
[Log] eNp9-m3iCZg – 0.397 – "innerTube" (content.js, line 2)
[Log] TL4ROjzOK2E – 0.421 – "innerTube" (content.js, line 2)
[Log] 8ncsccGHX7k – 0.426 – "innerTube" (content.js, line 2)
[Log] eKVTFXQPAhs – 0.416 – "innerTube" (content.js, line 2)
[Log] iZguqSC0v1E – 0.413 – "innerTube" (content.js, line 2)
[Log] A5w-dEgIU1M – 0.398 – "innerTube" (content.js, line 2)
[Log] esNyZYTeCgY – 0.448 – "innerTube" (content.js, line 2)
[Log] Hk3zEPgSV-g – 0.468 – "innerTube" (content.js, line 2)
[Log] SVqN_FixG0M – 0.442 – "innerTube" (content.js, line 2)
[Log] zAT8frZcFAs – 0.49 – "innerTube" (content.js, line 2)
[Log] p5k_V63CAQw – 0.457 – "innerTube" (content.js, line 2)
[Log] 3Tjy5GHf1uE – 0.448 – "innerTube" (content.js, line 2)
[Log] tK6sqxT0ttQ – 0.434 – "innerTube" (content.js, line 2)
[Log] M9ZCjMtthqY – 0.464 – "innerTube" (content.js, line 2)
[Log] ovaMlxgLLi4 – 0.426 – "innerTube" (content.js, line 2)
[Log] Qu5oj9DlpX0 – 0.441 – "innerTube" (content.js, line 2)
[Log] 72sMnA9uLWM – 0.432 – "innerTube" (content.js, line 2)
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: {source: "sponsorblock", type: "newElement", name: ""}, …}
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: Object, …}
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: {source: "sponsorblock", type: "newElement", name: ""}, …}
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: Object, …}
[Log] MessageEvent {isTrusted: true, origin: "https://www.youtube.com", lastEventId: "", source: Window, data: Object, …}
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Log] ph71tLt_YUw – 1.238 – "innerTube" (content.js, line 2)
[Log] FK4RHzNHZXY – 1.232 – "innerTube" (content.js, line 2)
[Log] spiQsqHep5I – 1.228 – "innerTube" (content.js, line 2)
[Log] CxkadTTH4_0 – 1.208 – "innerTube" (content.js, line 2)
[Log] Hz6JDLMC7aw – 1.213 – "innerTube" (content.js, line 2)
[Log] midAYXO2CAo – 1.198 – "innerTube" (content.js, line 2)
[Log] jfZ8ACqsyGg – 1.225 – "innerTube" (content.js, line 2)
[Log] 7VMSEzj-CLg – 1.219 – "innerTube" (content.js, line 2)
[Log] ENI4D5PbuDw – 1.153 – "innerTube" (content.js, line 2)
[Log] W0cGX5_Kw3M – 1.194 – "innerTube" (content.js, line 2)
[Log] tbYNMZcppUg – 1.184 – "innerTube" (content.js, line 2)
[Log] eA6R82gHvLI – 1.174 – "innerTube" (content.js, line 2)
[Log] _RTiy2eLZZ4 – 1.19 – "innerTube" (content.js, line 2)
[Log] AoMQKZbS7ZI – 1.146 – "innerTube" (content.js, line 2)
[Log] JGvLntyUFjg – 1.107 – "innerTube" (content.js, line 2)
[Log] 37nLIhZYQXk – 1.127 – "innerTube" (content.js, line 2)
[Log] tAfaXFIcuvc – 1.181 – "innerTube" (content.js, line 2)
[Log] Ko3IrTe8hYY – 1.208 – "innerTube" (content.js, line 2)
[Log] H-c90t_3EC8 – 1.133 – "innerTube" (content.js, line 2)
[Log] -ziwjAO4K50 – 1.163 – "innerTube" (content.js, line 2)
[Log] GRmiOOth8tM – 1.139 – "innerTube" (content.js, line 2)
[Log] uy1WUbaeER4 – 1.125 – "innerTube" (content.js, line 2)
[Log] nZ1Oa_uHsLo – 1.121 – "innerTube" (content.js, line 2)
[Log] GOiX0-ym5lQ – 1.145 – "innerTube" (content.js, line 2)
[Log] nXDPYASqZIs – 1.093 – "innerTube" (content.js, line 2)
[Log] S7lfrpDGmwY – 1.17 – "innerTube" (content.js, line 2)
[Log] iqDcG0Iq6Pg – 1.175 – "innerTube" (content.js, line 2)
[Log] xGdK4hKo7IU – 1.108 – "innerTube" (content.js, line 2)
[Log] yYTSdlOdkn0 – 1.078 – "innerTube" (content.js, line 2)
[Log] qm7y9jlebrA – 1.104 – "innerTube" (content.js, line 2)
[Log] gBMBU9F8OKI – 1.1 – "innerTube" (content.js, line 2)
[Log] qVRqw5ir_pA – 1.06 – "innerTube" (content.js, line 2)
[Log] G9IFrPN2p3g – 1.091 – "innerTube" (content.js, line 2)
[Log] O74Qh8x8EUc – 1.085 – "innerTube" (content.js, line 2)
[Log] pJurdK6i0NY – 1.159 – "innerTube" (content.js, line 2)
[Log] rR8xzjD1dR0 – 1.067 – "innerTube" (content.js, line 2)
[Log] W2jSGUdtrZY – 1.057 – "innerTube" (content.js, line 2)
[Log] CmQzzPOR4Fo – 1.198 – "innerTube" (content.js, line 2)
[Log] gMjjNwouiPM – 1.12 – "innerTube" (content.js, line 2)
[Log] dCODWqdehWE – 1.154 – "innerTube" (content.js, line 2)
[Log] QHX-LomCb5w – 1.149 – "innerTube" (content.js, line 2)
[Log] z1mMxaYKdt0 – 1.116 – "innerTube" (content.js, line 2)
[Log] PRm9Hbz6jj0 – 1.131 – "innerTube" (content.js, line 2)
[Log] ooMCvGlbbc4 – 1.088 – "innerTube" (content.js, line 2)
[Log] 88VAovCeYO8 – 1.093 – "innerTube" (content.js, line 2)
[Log] ihvG3RgbYzE – 1.071 – "innerTube" (content.js, line 2)
[Log] ZQtRLLZkE3A – 1.128 – "innerTube" (content.js, line 2)
[Log] V9GjwkHCeNA – 1.114 – "innerTube" (content.js, line 2)
[Log] CM5vT_JSIkk – 1.109 – "innerTube" (content.js, line 2)
[Log] AWp_wgw1LyY – 1.068 – "innerTube" (content.js, line 2)
[Log] PAfwqYeljhY – 1.105 – "innerTube" (content.js, line 2)
[Log] O2nFXCwbhuI – 1.085 – "innerTube" (content.js, line 2)
[Log] TZpWmw-7THI – 1.08 – "innerTube" (content.js, line 2)
[Log] iCWn9U8HHHc – 1.053 – "innerTube" (content.js, line 2)
[Log] Q_80OQ57_24 – 1.102 – "innerTube" (content.js, line 2)
[Log] tOyDiEcLoJQ – 1.049 – "innerTube" (content.js, line 2)
[Log] gkBIGYC4pmA – 1.039 – "innerTube" (content.js, line 2)
[Log] 2DOd4RLNeT4 – 1.037 – "innerTube" (content.js, line 2)
[Log] OrpaZtt3GTg – 1.068 – "innerTube" (content.js, line 2)
[Log] yckxSGIX8UM – 1.063 – "innerTube" (content.js, line 2)
[Log] 4w2obG5fzRs – 1.029 – "innerTube" (content.js, line 2)
[Log] 5dosYWwtqXg – 1.023 – "innerTube" (content.js, line 2)
[Log] UeBz7u3kaa4 – 1.034 – "innerTube" (content.js, line 2)
[Log] bnVgwcfTztQ – 1.015 – "innerTube" (content.js, line 2)
[Log] dMpObKYu8eo – 0.995 – "innerTube" (content.js, line 2)
[Log] DbFguRIB2mI – 1.02 – "innerTube" (content.js, line 2)
[Log] YPq48Wm8y-U – 1.001 – "innerTube" (content.js, line 2)
[Log] S6rRbb0yq84 – 1.041 – "innerTube" (content.js, line 2)
[Log] 6PN13yRFtPY – 1.086 – "innerTube" (content.js, line 2)
[Log] PwDW4x6sLpY – 1.017 – "innerTube" (content.js, line 2)
[Log] 7DKv5H5Frt0 – 1.022 – "innerTube" (content.js, line 2)
[Log] Ju3JIgdYBaM – 1.028 – "innerTube" (content.js, line 2)
[Log] KI8wn9ib9nc – 0.998 – "innerTube" (content.js, line 2)
[Log] Tk684Z2IxQI – 1.013 – "innerTube" (content.js, line 2)
[Log] tnsyzbRVtxs – 1.049 – "innerTube" (content.js, line 2)
[Log] 54FChs1PtrY – 1.004 – "innerTube" (content.js, line 2)
[Log] 4skdPd3veto – 0.99 – "innerTube" (content.js, line 2)
[Log] E3p_Cv32tEo – 0.995 – "innerTube" (content.js, line 2)
[Log] 07E4iQ5z9iY – 0.985 – "innerTube" (content.js, line 2)
[Log] 5rqrOBZdFVU – 0.976 – "innerTube" (content.js, line 2)
[Log] v-vD_xZaWGg – 0.966 – "innerTube" (content.js, line 2)
[Log] F0JDK_71yDg – 0.962 – "innerTube" (content.js, line 2)
[Log] OqwSXjxqH_w – 0.974 – "innerTube" (content.js, line 2)
[Log] smyhda3m668 – 0.985 – "innerTube" (content.js, line 2)
[Log] ijeCrllTH5c – 0.946 – "innerTube" (content.js, line 2)
[Log] HouzvJGazs4 – 0.942 – "innerTube" (content.js, line 2)
[Log] 9qljpi5jiMQ – 0.927 – "innerTube" (content.js, line 2)
[Log] 32lx_B8HQbk – 0.938 – "innerTube" (content.js, line 2)
[Log] FYLkrnFVGCA – 0.933 – "innerTube" (content.js, line 2)
[Log] RBCQ1D-JAts – 0.963 – "innerTube" (content.js, line 2)
[Log] 1jxVaOY89qc – 0.957 – "innerTube" (content.js, line 2)
[Log] lDBDI35NjQg – 0.986 – "innerTube" (content.js, line 2)
[Log] xpoLtX2cLKM – 1.046 – "innerTube" (content.js, line 2)
[Log] IFA-_RKuJfg – 0.946 – "innerTube" (content.js, line 2)
[Log] d6Pcp944sRI – 0.953 – "innerTube" (content.js, line 2)
[Log] Bso6qJWb7R4 – 0.937 – "innerTube" (content.js, line 2)
[Log] 3VohJapkObs – 0.927 – "innerTube" (content.js, line 2)
[Log] _yDtLv-7xZ4 – 0.943 – "innerTube" (content.js, line 2)
[Log] pe6f5O8tKao – 0.933 – "innerTube" (content.js, line 2)
[Log] ouUyQX8Bu6A – 0.927 – "innerTube" (content.js, line 2)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
[Error] Failed to load resource: the server responded with a status of 400 (Bad Request) (getThumbnail, line 0)
Selected screenshots since the copy/pasted output didn't include the failing URLs image image image

@ajayyy
Copy link
Owner

ajayyy commented Mar 5, 2024

And in this case, what was displaying? No thumbnails, only some?

@QuietMisdreavus
Copy link
Author

  1. Loaded subscriptions page, no thumbnails visible
  2. Ran code
  3. Clicked a video - during page nav the thumbnails started appearing but then the page switched
  4. Recommendations on video page were visible
  5. Clicked back, thumbnails were visible on subscriptions page
  6. Scrolled down - upon loading a new batch of links, new thumbnails were not visible

@ajayyy ajayyy closed this as completed in 4cb6f87 Mar 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants