YouTube's new commentEntityPayload format carries emojis as attachmentRuns
(startIndex/length into the plain text plus an image reference), which
parse_description() ignored so far - making every custom channel emoji
disappear from comments and video descriptions.
Merge attachmentRuns with the existing commandRuns handling (they share the
same UTF-16 coordinate space):
- Images hosted on /ggpht-proxiable domains (yt3.ggpht.com custom channel
emojis) are rendered as <img class="channel-emoji"> tags, reusing the
proxy and CSS class from the legacy comment renderer.
- Attachments pointing at www.youtube.com (standard unicode emojis rendered
as images by YouTube) are skipped, keeping their original characters -
they render fine natively without contacting YouTube's servers.
Fixes#5888
- View count and relative date detection now require the text to fully
look like one ('1.6M views', 'no views', '4 days ago', ...) instead of
a bare substring match, so channel names containing those words
(e.g. 'Daily Views') can no longer produce a false match. When several
parts match, the last one wins, as author rows precede metadata rows.
- Test fixtures were rebuilt keeping only the fields the parser reads:
all YouTube tracking parameters (including an accidentally captured
client IP inside thumbnail URLs) are gone.
Regression case added for tricky channel names.
Collaboration videos have an additional metadata row containing the
names of every channel involved, which means the views and published
data cannot be assumed to be located in metadataRows[0].
Iterate every metadata row instead of hardcoding the first one, using
the same approach already used by the playlist branch of this parser.
Fixes#5740
* CI: Do not build OpenSSL tests
OpenSSL compiles tests by default, making the CI and compilation of
Invidious take a long time for no real benefit, so it's better to
disable them ;)
https://github.com/openssl/openssl/blob/master/INSTALL.md#no-tests
* Use no-apps instead, as they also disable tests
* CI: Exclude development dependencies from build job
* use --production and then install spectator to skip building of Ameba
* this should prevent ameba from building
* Revert "Fix disappearing end of the comments with emoji (#5587)"
This reverts commit 86c425b43f75dd1f22034bbfbd99476651661348.
* fix: fix rendered links and timestamps in video descriptions
* Add error message when comments are disabled
* Add btn to try reddit comments when yt is disabled
* Escape warning messages for disabled comments
* Add missing semicolons
* Update comment detection to not use msg renderer
* Use short syntax for comment entry-point detection
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
* Condense try-reddit-comments-link HTML in player.js
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
* Improve locale keys for comments disabled messages
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
* Remove extra whitespace
* Use button instead of anchor for try reddit link
* Request Reddit comm when yt disabled during nojs=1
* Change order of commentsEnabled in parse results
* Lint
* Rebase error
* update the naming of the comments section in Innertube
Downstreamed from 36ac67610d
---------
Co-authored-by: Samantaz Fox <coding@samantaz.fr>
Co-authored-by: Fijxu <fijxu@nadeko.net>
Community posts comments still preserve the old author thumbnails
format that has an Array of thumbnails. I forgot to check that as I had
no idea `comments_youtube.cr` was also used for community posts comments
```json
"authorThumbnail": {
"thumbnails": [
{
"url": "//yt3.googleusercontent.com/ytc/AIdro_m9CJFVl3bEWvGnNnN4G9ErBO2lTpKePWCjx_FQtLWaDww=s32-c-k-c0x00ffffff-no-rj-mo",
"width": 32,
"height": 32
},
{
"url": "//yt3.googleusercontent.com/ytc/AIdro_m9CJFVl3bEWvGnNnN4G9ErBO2lTpKePWCjx_FQtLWaDww=s48-c-k-c0x00ffffff-no-rj-mo",
"width": 48,
"height": 48
},
{
"url": "//yt3.googleusercontent.com/ytc/AIdro_m9CJFVl3bEWvGnNnN4G9ErBO2lTpKePWCjx_FQtLWaDww=s76-c-k-c0x00ffffff-no-rj-mo",
"width": 76,
"height": 76
}
],
"accessibility": {
"accessibilityData": {
"label": "SomeOrdinaryGamers"
}
}
},
```
This package makes it conflict with the dependencies needed to build
Invidious (openssl, libpcre, etc). crystalline can work perfectly
without it tho, but it was added in the first place because crystalline
was trying to invoke it.
Crystal 1.21.0 now features execution contexts, they do not longer support (and recommend) the -Dpreview_mt build flag. -Dpreview_mt also worked really bad and it made Invidious to hang on high load, so it was never useful.
https://crystal-lang.org/2026/07/16/1.21.0-released/#execution-contexts