diff --git a/Telegram/SourceFiles/data/data_document.cpp b/Telegram/SourceFiles/data/data_document.cpp
index f21dad9d4..6884af1c2 100644
--- a/Telegram/SourceFiles/data/data_document.cpp
+++ b/Telegram/SourceFiles/data/data_document.cpp
@@ -721,9 +721,7 @@ int DocumentData::thumbnailByteSize() const {
 }
 
 bool DocumentData::hasVideoThumbnail() const {
-	return _videoThumbnailLocation.valid()
-		&& (_videoThumbnailLocation.width() > 0)
-		&& (_videoThumbnailLocation.height() > 0);
+	return _videoThumbnailLocation.valid();
 }
 
 bool DocumentData::videoThumbnailLoading() const {
diff --git a/Telegram/SourceFiles/data/data_session.cpp b/Telegram/SourceFiles/data/data_session.cpp
index 6acdc3027..d29fe9b5c 100644
--- a/Telegram/SourceFiles/data/data_session.cpp
+++ b/Telegram/SourceFiles/data/data_session.cpp
@@ -2482,15 +2482,20 @@ void Session::documentConvert(
 
 DocumentData *Session::documentFromWeb(
 		const MTPWebDocument &data,
-		const ImageLocation &thumbnailLocation) {
+		const ImageLocation &thumbnailLocation,
+		const ImageLocation &videoThumbnailLocation) {
 	return data.match([&](const auto &data) {
-		return documentFromWeb(data, thumbnailLocation);
+		return documentFromWeb(
+			data,
+			thumbnailLocation,
+			videoThumbnailLocation);
 	});
 }
 
 DocumentData *Session::documentFromWeb(
 		const MTPDwebDocument &data,
-		const ImageLocation &thumbnailLocation) {
+		const ImageLocation &thumbnailLocation,
+		const ImageLocation &videoThumbnailLocation) {
 	const auto result = document(
 		rand_value<DocumentId>(),
 		uint64(0),
@@ -2500,7 +2505,7 @@ DocumentData *Session::documentFromWeb(
 		data.vmime_type().v,
 		QByteArray(),
 		ImageWithLocation{ .location = thumbnailLocation },
-		ImageWithLocation(),
+		ImageWithLocation{ .location = videoThumbnailLocation },
 		MTP::maindc(),
 		int32(0)); // data.vsize().v
 	result->setWebLocation(WebFileLocation(
@@ -2511,7 +2516,8 @@ DocumentData *Session::documentFromWeb(
 
 DocumentData *Session::documentFromWeb(
 		const MTPDwebDocumentNoProxy &data,
-		const ImageLocation &thumbnailLocation) {
+		const ImageLocation &thumbnailLocation,
+		const ImageLocation &videoThumbnailLocation) {
 	const auto result = document(
 		rand_value<DocumentId>(),
 		uint64(0),
@@ -2521,7 +2527,7 @@ DocumentData *Session::documentFromWeb(
 		data.vmime_type().v,
 		QByteArray(),
 		ImageWithLocation{ .location = thumbnailLocation },
-		ImageWithLocation(),
+		ImageWithLocation{ .location = videoThumbnailLocation },
 		MTP::maindc(),
 		int32(0)); // data.vsize().v
 	result->setContentUrl(qs(data.vurl()));
diff --git a/Telegram/SourceFiles/data/data_session.h b/Telegram/SourceFiles/data/data_session.h
index c4e6483ec..aea8a2f6c 100644
--- a/Telegram/SourceFiles/data/data_session.h
+++ b/Telegram/SourceFiles/data/data_session.h
@@ -508,7 +508,8 @@ public:
 		const MTPDocument &data);
 	[[nodiscard]] DocumentData *documentFromWeb(
 		const MTPWebDocument &data,
-		const ImageLocation &thumbnailLocation);
+		const ImageLocation &thumbnailLocation,
+		const ImageLocation &videoThumbnailLocation);
 
 	[[nodiscard]] not_null<WebPageData*> webpage(WebPageId id);
 	not_null<WebPageData*> processWebpage(const MTPWebPage &data);
@@ -760,10 +761,12 @@ private:
 		int32 size);
 	DocumentData *documentFromWeb(
 		const MTPDwebDocument &data,
-		const ImageLocation &thumbnailLocation);
+		const ImageLocation &thumbnailLocation,
+		const ImageLocation &videoThumbnailLocation);
 	DocumentData *documentFromWeb(
 		const MTPDwebDocumentNoProxy &data,
-		const ImageLocation &thumbnailLocation);
+		const ImageLocation &thumbnailLocation,
+		const ImageLocation &videoThumbnailLocation);
 
 	void webpageApplyFields(
 		not_null<WebPageData*> page,
diff --git a/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp b/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp
index a68ab21d7..d74e0f8ea 100644
--- a/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp
+++ b/Telegram/SourceFiles/inline_bots/inline_bot_layout_internal.cpp
@@ -133,11 +133,12 @@ int Gif::resizeGetHeight(int width) {
 
 void Gif::paint(Painter &p, const QRect &clip, const PaintContext *context) const {
 	const auto document = getShownDocument();
-	const auto displayLoading = document->displayLoading();
 	ensureDataMediaCreated(document);
 	const auto preview = Data::VideoPreviewState(_dataMedia.get());
 	preview.automaticLoad(fileOrigin());
 
+	const auto displayLoading = !preview.usingThumbnail()
+		&& document->displayLoading();
 	const auto loaded = preview.loaded();
 	const auto loading = preview.loading();
 	if (loaded
diff --git a/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp b/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp
index 993d58737..040831799 100644
--- a/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp
+++ b/Telegram/SourceFiles/inline_bots/inline_bot_result.cpp
@@ -26,6 +26,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
 namespace InlineBots {
 namespace {
 
+const auto kVideoThumbMime = "video/mp4"_q;
+
 QString GetContentUrl(const MTPWebDocument &document) {
 	switch (document.type()) {
 	case mtpc_webDocument:
@@ -84,8 +86,19 @@ std::unique_ptr<Result> Result::create(
 		result->_title = qs(r.vtitle().value_or_empty());
 		result->_description = qs(r.vdescription().value_or_empty());
 		result->_url = qs(r.vurl().value_or_empty());
-		if (const auto thumb = r.vthumb()) {
-			result->_thumb = Images::Create(*thumb, result->thumbBox());
+		const auto thumbMime = [&] {
+			if (const auto thumb = r.vthumb()) {
+				return thumb->match([&](const auto &data) {
+					return data.vmime_type().v;
+				});
+			}
+			return QByteArray();
+		}();
+		const auto imageThumb = !thumbMime.isEmpty()
+			&& (thumbMime != kVideoThumbMime);
+		const auto videoThumb = !thumbMime.isEmpty() && !imageThumb;
+		if (imageThumb) {
+			result->_thumb = Images::Create(*r.vthumb(), result->thumbBox());
 		}
 		if (const auto content = r.vcontent()) {
 			result->_content_url = GetContentUrl(*content);
@@ -97,7 +110,10 @@ std::unique_ptr<Result> Result::create(
 			} else {
 				result->_document = Auth().data().documentFromWeb(
 					result->adjustAttributes(*content),
-					(r.vthumb()
+					(imageThumb
+						? Images::FromWebDocument(*r.vthumb())
+						: ImageLocation()),
+					(videoThumb
 						? Images::FromWebDocument(*r.vthumb())
 						: ImageLocation()));
 			}