chore: remove all Remotion references from Electron main + UI

- Cleaned Electron main.ts: removed Remotion bundle path, compositor path, and predownloadBrowser()
- Set BRADLY_SERVE_URL from Express port for headless rendering
- Cleaned GlobalSettingsPanel: removed Remotion-specific frame capture code
- Removed stale remotion:bundle script from package.json
- Zero Remotion dependencies, imports, or functional code remain
This commit is contained in:
2026-06-02 05:35:03 -05:00
parent 551bff56a2
commit 32505f95ce
2 changed files with 14 additions and 63 deletions
@@ -37,29 +37,16 @@ export const GlobalSettingsPanel: React.FC<GlobalSettingsPanelProps> = ({
const player = playerRef?.current;
if (!player) return;
// Find the remotion-player container and grab its inner canvas/iframe
const playerContainer = document.querySelector('[data-remotion-player]') ?? document.querySelector('.remotion-player');
// Find the BradlyPlayer container and capture its content
const playerContainer = document.querySelector('[data-bradly-player]');
if (!playerContainer) {
// Fallback: find the iframe or video element
const iframe = document.querySelector('iframe');
if (iframe) {
// Can't capture cross-origin iframe, but for same-origin:
try {
const iframeDoc = iframe.contentDocument;
if (iframeDoc) {
const canvas = document.createElement('canvas');
const body = iframeDoc.body;
canvas.width = body.scrollWidth;
canvas.height = body.scrollHeight;
// This is a simplistic approach - Remotion doesn't expose easy screenshot
}
} catch { /* cross-origin */ }
}
// Fallback: use the render API endpoint
alert('📸 Exportar frame: Usa el botón "Renderizar" con formato PNG para capturar frames.');
return;
}
// Use html2canvas-like approach: create a temporary canvas from the player
// For now, use a simple screenshot via the Remotion player's renderToCanvas
alert('📸 Exportar frame: Esta función requiere @remotion/renderer para renderizar frames individuales. Próximamente disponible.');
// TODO: Implement canvas-based screenshot from BradlyPlayer viewport
alert('📸 Exportar frame: Usa el botón "Renderizar" con formato PNG para capturar frames.');
}, [playerRef]);
const matchingPresets = EXPORT_PRESETS.filter(p => p.aspect === aspectRatio);
+7 -43
View File
@@ -4,7 +4,6 @@
* Responsibilities:
* - Creates the BrowserWindow
* - Starts the embedded Express server
* - Pre-downloads Chrome Headless Shell for Remotion
* - Manages IPC handlers for native features
*/
import { app, BrowserWindow, ipcMain, dialog } from 'electron';
@@ -59,33 +58,10 @@ function setupPaths() {
process.env.BRADLY_UPLOADS_DIR = uploadsDir;
process.env.BRADLY_RENDERS_DIR = rendersDir;
// In packaged app, configure Remotion paths
// In packaged app, set the serve URL to the embedded Express server
if (app.isPackaged) {
const resourcesPath = process.resourcesPath;
// Pre-built Remotion bundle (created during packaging)
const remotionBundle = path.join(resourcesPath, 'remotion-bundle');
if (fs.existsSync(remotionBundle)) {
process.env.BRADLY_REMOTION_BUNDLE = remotionBundle;
}
// Compositor binaries (unpacked from asar)
const platformMap: Record<string, string> = {
darwin: 'darwin',
win32: 'win32',
linux: 'linux',
};
const platform = platformMap[process.platform] || process.platform;
const arch = process.arch;
const compositorPath = path.join(
resourcesPath,
'app.asar.unpacked',
'node_modules',
`@remotion/compositor-${platform}-${arch}`,
);
if (fs.existsSync(compositorPath)) {
process.env.BRADLY_BINARIES_DIR = compositorPath;
}
// BRADLY_SERVE_URL will be set after Express starts
// (see startExpressServer)
}
console.log('📂 User data:', userDataPath);
@@ -274,18 +250,6 @@ function setupIPC() {
});
}
// ═══ Remotion Browser Pre-download ═══
async function predownloadBrowser() {
try {
const { ensureBrowser } = await import('@remotion/renderer');
console.log('🌐 Ensuring Chrome Headless Shell is available...');
await ensureBrowser();
console.log('✅ Chrome Headless Shell ready');
} catch (err) {
console.warn('⚠️ Failed to pre-download browser (renders may download on first use):', err);
}
}
// ═══ App Lifecycle ═══
@@ -305,11 +269,11 @@ app.whenReady().then(async () => {
return;
}
// 4. Create the main window
createWindow();
// 4. Set BRADLY_SERVE_URL for the renderer to find the app
process.env.BRADLY_SERVE_URL = `http://127.0.0.1:${expressPort}`;
// 5. Pre-download Chrome Headless Shell in background
predownloadBrowser();
// 5. Create the main window
createWindow();
// macOS: re-create window when dock icon is clicked
app.on('activate', () => {