diff --git a/native/input/input-state-container.react.js b/native/input/input-state-container.react.js
--- a/native/input/input-state-container.react.js
+++ b/native/input/input-state-container.react.js
@@ -22,7 +22,7 @@
   type MultimediaUploadCallbacks,
   type MultimediaUploadExtras,
 } from 'lib/actions/upload-actions';
-import { pathFromURI } from 'lib/media/file-utils';
+import { pathFromURI, replaceExtension } from 'lib/media/file-utils';
 import { isLocalUploadID, getNextLocalUploadID } from 'lib/media/media-utils';
 import { videoDurationLimit } from 'lib/media/video-utils';
 import {
@@ -653,22 +653,49 @@
     const uploadStart = Date.now();
     let uploadExceptionMessage, uploadResult, mediaMissionResult;
     try {
-      const loop =
-        processedMedia.mediaType === 'video' ? processedMedia.loop : undefined;
-      uploadResult = await this.props.uploadMultimedia(
-        { uri: uploadURI, name: filename, type: mime },
-        { ...processedMedia.dimensions, loop },
-        {
-          onProgress: (percent: number) =>
-            this.setProgress(
-              localMessageID,
-              localMediaID,
-              'uploading',
-              percent,
-            ),
-          uploadBlob: this.uploadBlob,
-        },
+      const uploadPromises = [];
+      uploadPromises.push(
+        this.props.uploadMultimedia(
+          { uri: uploadURI, name: filename, type: mime },
+          {
+            ...processedMedia.dimensions,
+            loop:
+              processedMedia.mediaType === 'video'
+                ? processedMedia.loop
+                : undefined,
+          },
+          {
+            onProgress: (percent: number) =>
+              this.setProgress(
+                localMessageID,
+                localMediaID,
+                'uploading',
+                percent,
+              ),
+            uploadBlob: this.uploadBlob,
+          },
+        ),
       );
+
+      if (processedMedia.mediaType === 'video') {
+        uploadPromises.push(
+          this.props.uploadMultimedia(
+            {
+              uri: processedMedia.uploadThumbnailURI,
+              name: replaceExtension(`thumb${filename}`, 'jpg'),
+              type: 'image/jpeg',
+            },
+            {
+              ...processedMedia.dimensions,
+              loop: false,
+            },
+            {
+              uploadBlob: this.uploadBlob,
+            },
+          ),
+        );
+      }
+      [uploadResult] = await Promise.all(uploadPromises);
       mediaMissionResult = { success: true };
     } catch (e) {
       uploadExceptionMessage = getMessageForException(e);