diff --git a/frontend/src/components/FileConfigCard.jsx b/frontend/src/components/FileConfigCard.jsx
index dcc3d1b..92edb5e 100644
--- a/frontend/src/components/FileConfigCard.jsx
+++ b/frontend/src/components/FileConfigCard.jsx
@@ -9,6 +9,8 @@ const DEFAULT_ICON_SIZE = 256;
const ARCHIVE_COMPRESSION_FORMATS = ['zip', 'tar.gz', 'tar.bz2', '7z', 'tar.7z'];
const AUDIO_BITRATE_FORMATS = ['mp3', 'ogg', 'aac', 'm4a'];
const AUDIO_BITRATES = [128, 192, 256, 320];
+const VIDEO_RESOLUTION_FORMATS = ['mp4', 'webm', 'mov', 'avi', 'mkv'];
+const VIDEO_RESOLUTIONS = [480, 720, 1080];
function rangeProgress(value, min, max) {
return `${((value - min) / (max - min)) * 100}%`;
@@ -122,6 +124,33 @@ export function FileConfigCard({ item, index, t, onTargetFormatChange, onQuality
)}
+ {VIDEO_RESOLUTION_FORMATS.includes(item.targetFormat) && (
+
+
{t('quality.resolution')}
+
+
+ {VIDEO_RESOLUTIONS.map((resolution) => (
+
+ ))}
+
+
+ )}
+
{item.targetFormat === 'ico' && (
{t('quality.iconSize')}
diff --git a/frontend/src/components/FormatMarquee.jsx b/frontend/src/components/FormatMarquee.jsx
index 721460f..7f6eb3d 100644
--- a/frontend/src/components/FormatMarquee.jsx
+++ b/frontend/src/components/FormatMarquee.jsx
@@ -8,6 +8,7 @@ const PAIRS = [
['epub', 'mobi'],
['rar', 'zip'],
['wav', 'mp3'],
+ ['mov', 'mp4'],
];
function Pill({ from, to }) {
diff --git a/frontend/src/components/FormatsGrid.jsx b/frontend/src/components/FormatsGrid.jsx
index ce2b180..840ae68 100644
--- a/frontend/src/components/FormatsGrid.jsx
+++ b/frontend/src/components/FormatsGrid.jsx
@@ -1,5 +1,5 @@
import { useTranslation } from 'react-i18next';
-import { Image, FileText, TextAa, BookOpen, Archive, MusicNotes } from '@phosphor-icons/react';
+import { Image, FileText, TextAa, BookOpen, Archive, MusicNotes, VideoCamera } from '@phosphor-icons/react';
import { FORMAT_FAMILIES } from '../data/formats.js';
const FAMILY_ICONS = {
@@ -9,6 +9,7 @@ const FAMILY_ICONS = {
ebooks: BookOpen,
archives: Archive,
audio: MusicNotes,
+ video: VideoCamera,
};
export function FormatsGrid() {
diff --git a/frontend/src/data/formats.js b/frontend/src/data/formats.js
index dbac564..30ba28a 100644
--- a/frontend/src/data/formats.js
+++ b/frontend/src/data/formats.js
@@ -23,4 +23,8 @@ export const FORMAT_FAMILIES = [
key: 'audio',
formats: ['mp3', 'wav', 'ogg', 'flac', 'aac', 'm4a'],
},
+ {
+ key: 'video',
+ formats: ['mp4', 'webm', 'mov', 'avi', 'mkv'],
+ },
];
diff --git a/frontend/src/index.css b/frontend/src/index.css
index f4bf808..3800d7a 100644
--- a/frontend/src/index.css
+++ b/frontend/src/index.css
@@ -25,6 +25,7 @@
--color-family-ebooks: #10b981;
--color-family-archives: #64748b;
--color-family-audio: #ec4899;
+ --color-family-video: #38bdf8;
--font-sans: 'Plus Jakarta Sans', system-ui, 'Segoe UI', Roboto, sans-serif;
--font-display: 'Bricolage Grotesque', var(--font-sans);
@@ -55,6 +56,7 @@
--color-family-ebooks: #34d399;
--color-family-archives: #94a3b8;
--color-family-audio: #f472b6;
+ --color-family-video: #7dd3fc;
}
*, *::before, *::after {
diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json
index 51787a0..0b6401b 100644
--- a/frontend/src/locales/en.json
+++ b/frontend/src/locales/en.json
@@ -23,7 +23,9 @@
"compression": "Compression",
"iconSize": "Icon size",
"compressPdf": "Compress as JPEG",
- "bitrate": "Bitrate"
+ "bitrate": "Bitrate",
+ "resolution": "Resolution",
+ "original": "Original"
},
"job": {
"converting": "Converting...",
@@ -43,7 +45,8 @@
"fonts": "Fonts",
"ebooks": "Ebooks",
"archives": "Archives",
- "audio": "Audio"
+ "audio": "Audio",
+ "video": "Video"
},
"footer": {
"rights": "Ombrora Convert — Online file conversion"
diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json
index a0a46b7..6afe024 100644
--- a/frontend/src/locales/fr.json
+++ b/frontend/src/locales/fr.json
@@ -23,7 +23,9 @@
"compression": "Compression",
"iconSize": "Taille de l'icône",
"compressPdf": "Compresser en JPEG",
- "bitrate": "Bitrate"
+ "bitrate": "Bitrate",
+ "resolution": "Résolution",
+ "original": "Original"
},
"job": {
"converting": "Conversion en cours...",
@@ -43,7 +45,8 @@
"fonts": "Polices",
"ebooks": "Ebooks",
"archives": "Archives",
- "audio": "Audio"
+ "audio": "Audio",
+ "video": "Vidéo"
},
"footer": {
"rights": "Ombrora Convert — Conversion de fichiers en ligne"
diff --git a/frontend/src/utils/fileFamily.js b/frontend/src/utils/fileFamily.js
index 7d0745d..e768865 100644
--- a/frontend/src/utils/fileFamily.js
+++ b/frontend/src/utils/fileFamily.js
@@ -1,4 +1,4 @@
-import { Image, FileText, TextAa, BookOpen, Archive, MusicNotes, File as FileIcon } from '@phosphor-icons/react';
+import { Image, FileText, TextAa, BookOpen, Archive, MusicNotes, VideoCamera, File as FileIcon } from '@phosphor-icons/react';
import { FORMAT_FAMILIES } from '../data/formats.js';
const FAMILY_ICONS = {
@@ -8,6 +8,7 @@ const FAMILY_ICONS = {
ebooks: BookOpen,
archives: Archive,
audio: MusicNotes,
+ video: VideoCamera,
};
export function familyForExtension(extension) {