From 90d650def208665b1e3181e0fe72a20179298f39 Mon Sep 17 00:00:00 2001 From: Samuel Newman Date: Mon, 16 Feb 2026 15:35:29 +0000 Subject: [PATCH] Use video thumbnail as og:image for posts with video embeds (#9877) --- bskyweb/README.md | 35 +++++++++++++++++++++-------------- bskyweb/cmd/bskyweb/server.go | 15 +++++++++++++-- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/bskyweb/README.md b/bskyweb/README.md index 6da8e1d06a..b682929975 100644 --- a/bskyweb/README.md +++ b/bskyweb/README.md @@ -6,21 +6,26 @@ To build the SPA bundle (`bundle.web.js`), first get a JavaScript development environment set up. Either follow the top-level README, or something quick like: - # install nodejs - nvm install - nvm use - npm install --global yarn +```bash +# install nodejs +nvm install +nvm use +npm install --global yarn - # setup tools and deps (in top level of this repo) - yarn install --frozen-lockfile +# setup tools and deps (in top level of this repo) +yarn install --frozen-lockfile - # run yarn web dev server, if you wanted - yarn web +# run yarn web dev server, if you wanted +yarn web +``` Then build and copy over the big 'ol `bundle.web.js` file: - # in the top level of this repo - yarn build-web + +```bash +# in the top level of this repo +yarn build-web +``` ### Golang Daemon @@ -28,11 +33,13 @@ Install golang. We generally develop against the current stable release of the l In this directory (`bskyweb/`): - # re-build and run daemon - go run ./cmd/bskyweb serve +```bash +# re-build and run daemon +go run ./cmd/bskyweb serve - # build and output a binary - go build -o bskyweb ./cmd/bskyweb/ +# build and output a binary +go build -o bskyweb ./cmd/bskyweb/ +``` The easiest way to configure the daemon is to copy `example.env` to `.env` and fill in auth values there. diff --git a/bskyweb/cmd/bskyweb/server.go b/bskyweb/cmd/bskyweb/server.go index 5b81396262..1f9c0ed649 100644 --- a/bskyweb/cmd/bskyweb/server.go +++ b/bskyweb/cmd/bskyweb/server.go @@ -574,7 +574,10 @@ func (srv *Server) WebPost(c echo.Context) error { if postView.Embed != nil && !isEmbedHidden { hasImages := postView.Embed.EmbedImages_View != nil - hasMedia := postView.Embed.EmbedRecordWithMedia_View != nil && postView.Embed.EmbedRecordWithMedia_View.Media != nil && postView.Embed.EmbedRecordWithMedia_View.Media.EmbedImages_View != nil + hasVideo := postView.Embed.EmbedVideo_View != nil + hasMedia := postView.Embed.EmbedRecordWithMedia_View != nil && postView.Embed.EmbedRecordWithMedia_View.Media != nil + hasMediaImages := hasMedia && postView.Embed.EmbedRecordWithMedia_View.Media.EmbedImages_View != nil + hasMediaVideo := hasMedia && postView.Embed.EmbedRecordWithMedia_View.Media.EmbedVideo_View != nil if hasImages { var thumbUrls []string @@ -582,12 +585,20 @@ func (srv *Server) WebPost(c echo.Context) error { thumbUrls = append(thumbUrls, postView.Embed.EmbedImages_View.Images[i].Thumb) } data["imgThumbUrls"] = thumbUrls - } else if hasMedia { + } else if hasVideo { + if postView.Embed.EmbedVideo_View.Thumbnail != nil { + data["imgThumbUrls"] = []string{*postView.Embed.EmbedVideo_View.Thumbnail} + } + } else if hasMediaImages { var thumbUrls []string for i := range postView.Embed.EmbedRecordWithMedia_View.Media.EmbedImages_View.Images { thumbUrls = append(thumbUrls, postView.Embed.EmbedRecordWithMedia_View.Media.EmbedImages_View.Images[i].Thumb) } data["imgThumbUrls"] = thumbUrls + } else if hasMediaVideo { + if postView.Embed.EmbedRecordWithMedia_View.Media.EmbedVideo_View.Thumbnail != nil { + data["imgThumbUrls"] = []string{*postView.Embed.EmbedRecordWithMedia_View.Media.EmbedVideo_View.Thumbnail} + } } }