From 7bf29ae004861c6431f0d005204dd09495884fe0 Mon Sep 17 00:00:00 2001 From: ItsRauf <31735267+ItsRauf@users.noreply.github.com> Date: Mon, 16 Feb 2026 01:13:48 -0600 Subject: [PATCH] =?UTF-8?q?=F0=9F=A9=B9=20fix(platforms):=20use=20gif.fxtw?= =?UTF-8?q?itter.com=20for=20twitter=20gif=20media=20URLs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .changeset/wet-clouds-repair.md | 5 +++++ packages/platforms/src/Twitter.ts | 21 ++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 .changeset/wet-clouds-repair.md diff --git a/.changeset/wet-clouds-repair.md b/.changeset/wet-clouds-repair.md new file mode 100644 index 0000000..313185e --- /dev/null +++ b/.changeset/wet-clouds-repair.md @@ -0,0 +1,5 @@ +--- +"@embedly/platforms": patch +--- + +use gif.fxtwitter.com for twitter gif media URLs diff --git a/packages/platforms/src/Twitter.ts b/packages/platforms/src/Twitter.ts index 4dd43a9..5b99786 100644 --- a/packages/platforms/src/Twitter.ts +++ b/packages/platforms/src/Twitter.ts @@ -79,6 +79,21 @@ export class Twitter extends EmbedlyPlatform { return he.decode(text); } + resolveMediaUrl(media: any): string { + if ( + media.type === "gif" && + media.url.startsWith("https://video.twimg.com/tweet_video/") + ) { + return media.url + .replace( + "https://video.twimg.com/", + "https://gif.fxtwitter.com/" + ) + .replace(/\.mp4$/, ".gif"); + } + return media.url; + } + transformRawData(raw_data: any): BaseEmbedData { return { platform: this.name, @@ -111,7 +126,7 @@ export class Twitter extends EmbedlyPlatform { embed.setMedia( tweet_data.media.all.map((media: any) => ({ media: { - url: media.url + url: this.resolveMediaUrl(media) }, description: media.altText })) @@ -131,7 +146,7 @@ export class Twitter extends EmbedlyPlatform { reply_embed.setMedia( reply_tweet.media.all.map((media: any) => ({ media: { - url: media.url + url: this.resolveMediaUrl(media) }, description: media.altText })) @@ -150,7 +165,7 @@ export class Twitter extends EmbedlyPlatform { quote_embed.setMedia( quote_tweet.media.all.map((media: any) => ({ media: { - url: media.url + url: this.resolveMediaUrl(media) }, description: media.altText }))