Add GIF export feature to video editor

Implements GIF export alongside MP4, including new export types, a GIF exporter module, UI components for format selection and GIF options, and integration into the export dialog and video editor. Adds property-based and unit tests for GIF export correctness, updates dependencies to include gif.js and related types, and refines Electron save dialog to support GIF files.
This commit is contained in:
Nikhil Solanki
2025-12-25 01:50:02 +05:30
parent 2ca99136ba
commit 6e6ecba172
21 changed files with 3381 additions and 495 deletions
+13 -6
View File
@@ -130,12 +130,18 @@ export function registerIpcHandlers(
ipcMain.handle('save-exported-video', async (_, videoData: ArrayBuffer, fileName: string) => {
try {
const result = await dialog.showSaveDialog({
title: 'Save Exported Video',
const mainWindow = getMainWindow();
// Determine file type from extension
const isGif = fileName.toLowerCase().endsWith('.gif');
const filters = isGif
? [{ name: 'GIF Image', extensions: ['gif'] }]
: [{ name: 'MP4 Video', extensions: ['mp4'] }];
const result = await dialog.showSaveDialog(mainWindow || undefined, {
title: isGif ? 'Save Exported GIF' : 'Save Exported Video',
defaultPath: path.join(app.getPath('downloads'), fileName),
filters: [
{ name: 'MP4 Video', extensions: ['mp4'] }
],
filters,
properties: ['createDirectory', 'showOverwriteConfirmation']
});
@@ -146,8 +152,9 @@ export function registerIpcHandlers(
message: 'Export cancelled'
};
}
await fs.writeFile(result.filePath, Buffer.from(videoData));
return {
success: true,
path: result.filePath,