From 4954877c06d74df94ba274c3c3538779ce3f05c2 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Fri, 23 Jan 2026 17:56:39 +0100 Subject: [PATCH] feat: optimize iPhone video quality and stabilization UI --- client/src/pages/mobile/new-reel.tsx | 43 +++++----- client/src/pages/new-reel.tsx | 119 +++++++++++---------------- task.md | 12 ++- 3 files changed, 78 insertions(+), 96 deletions(-) diff --git a/client/src/pages/mobile/new-reel.tsx b/client/src/pages/mobile/new-reel.tsx index fde5b11..576192a 100644 --- a/client/src/pages/mobile/new-reel.tsx +++ b/client/src/pages/mobile/new-reel.tsx @@ -253,13 +253,30 @@ export default function MobileNewReel() { {/* VIDEO STEP */} {currentStep === 'video' && (
+ + +
+
+
+ Stabilisation & Qualité 1080p +
+
Application automatique après capture
+
+ setStabilize(!!checked)} + /> +
+
+
+
{selectedVideo && ( -
- - -
-
-
- Stabilisation & Qualité 1080p -
-
Recommandé pour Facebook Reels
-
- setStabilize(!!checked)} - /> -
-
-
- -
+ )}
)} diff --git a/client/src/pages/new-reel.tsx b/client/src/pages/new-reel.tsx index a4d820c..df781f5 100644 --- a/client/src/pages/new-reel.tsx +++ b/client/src/pages/new-reel.tsx @@ -3,7 +3,7 @@ import { useQuery, useMutation } from "@tanstack/react-query"; import { useLocation } from "wouter"; import { Send, Sparkles, Video, Music, Type, Calendar, - Upload, Camera, Play, Pause, Volume2, VolumeX, + Upload, Play, Pause, Volume2, VolumeX, ChevronRight, Loader2, Check, RefreshCw, Mic } from "lucide-react"; import { useDropzone } from "react-dropzone"; @@ -28,7 +28,6 @@ import { useToast } from "@/hooks/use-toast"; import { apiRequest, queryClient } from "@/lib/queryClient"; import type { SocialPage, Media } from "@shared/schema"; import { DateTimePicker } from "@/components/datetime-picker"; -import { CameraRecorder } from "@/components/camera-recorder"; interface MusicTrack { id: string; @@ -49,7 +48,6 @@ export default function NewReel() { const [sidebarOpen, setSidebarOpen] = useState(false); const [, navigate] = useLocation(); const { toast } = useToast(); - const cameraInputRef = useRef(null); const audioRef = useRef(null); // État du workflow @@ -75,9 +73,6 @@ export default function NewReel() { const [isPlaying, setIsPlaying] = useState(null); const [musicOffset, setMusicOffset] = useState(0); - // État caméra custom - const [showCamera, setShowCamera] = useState(false); - // Récupérer les pages disponibles const { data: pages = [] } = useQuery({ queryKey: ['/api/pages'], @@ -232,16 +227,18 @@ export default function NewReel() { const { getRootProps, getInputProps, isDragActive, open } = useDropzone({ onDrop, accept: { - 'video/mp4': ['.mp4', '.m4v'], - 'video/quicktime': ['.mov', '.qt'], - 'video/webm': ['.webm'], - 'video/x-msvideo': ['.avi'], - 'video/*': [], // Fallback - }, - maxSize: 4 * 1024 * 1024 * 1024, // 4GB Limit - noClick: true, - noKeyboard: true, - }); + accept: { + 'video/mp4': ['.mp4', '.m4v'], + 'video/quicktime': ['.mov', '.qt'], + 'video/webm': ['.webm'], + 'video/x-msvideo': ['.avi'], + 'video/*': [], + }, + multiple: true, // Use multiple to bypass iOS Safari automatic compression + maxSize: 4 * 1024 * 1024 * 1024, // 4GB Limit + noClick: true, + noKeyboard: true, + }); const handleCameraCapture = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; @@ -357,26 +354,6 @@ export default function NewReel() { return (
- {/* Camera Recorder Modal */} - {showCamera && ( - { - if (options?.stabilize) { - setStabilize(true); - toast({ - title: "Stabilisation activée", - description: "La vidéo sera stabilisée lors de la création du Reel (ceci peut prendre plus de temps)", - }); - } else { - setStabilize(false); - } - uploadMutation.mutate(file); - setShowCamera(false); - }} - onCancel={() => setShowCamera(false)} - /> - )} - {sidebarOpen && (
+ {/* ÉTAPE 1: Vidéo */} {currentStep === 'video' && ( @@ -451,18 +429,31 @@ export default function NewReel() { Sélectionnez une Vidéo - Choisissez une vidéo existante ou capturez-en une nouvelle + Choisissez une vidéo existante ou téléchargez-en une nouvelle - - + +
+
+
+ +

+ Recommandé pour un rendu professionnel sur Facebook Reels +

+
+ + Note iPhone : Activez la stabilisation dans Réglages > Appareil Photo +
+
+ +
+
@@ -515,28 +506,11 @@ export default function NewReel() {
{selectedVideo && ( -
-
-
- -

- Recommandé pour un rendu professionnel sur Facebook Reels -

-
- -
-
- -
+
+
)} @@ -548,6 +522,7 @@ export default function NewReel() { + Choisissez une Musique @@ -1027,11 +1002,11 @@ export default function NewReel() {
-
-
- +
+ + {/* Overlay de progression */} -