OpenScreen Deployment and Usage Guide
1. Prerequisites
Development Environment:
- Node.js 18+ (for building from source)
- npm or yarn package manager
- Git
Operating System Permissions:
- macOS: Full Disk Access for Terminal (to bypass Gatekeeper) and Screen Recording/Accessibility permissions
- Linux: Screen recording permissions for your desktop environment (varies by distro)
- Windows: No special permissions beyond standard screen recording access
Hardware:
- Modern CPU with hardware video encoding support (recommended)
- Sufficient RAM for video processing (minimum 4GB, 8GB+ recommended)
2. Installation
Option A: Download Pre-built Binaries (Recommended for End Users)
- Visit the GitHub Releases page
- Download the appropriate installer for your platform:
- macOS:
.dmgfile - Linux:
.AppImagefile - Windows:
.exefile
- macOS:
Option B: Build from Source (For Developers/Contributors)
-
Clone the repository:
git clone https://github.com/siddharthvaddem/openscreen.git cd openscreen -
Install dependencies:
npm install # or yarn install
3. Configuration
Environment Setup
No API keys or external services required. OpenScreen is entirely local and offline.
Important Build Dependencies:
- Electron 25+ (handled by npm dependencies)
- WebAssembly support for
web-demuxer(included in build) - PixiJS for canvas rendering (included)
Project Structure Key Files:
src/lib/exporter/frameRenderer.ts- Handles frame composition with effectssrc/lib/exporter/videoExporter.ts- Main video export pipelinesrc/lib/exporter/streamingDecoder.ts- Video decoding using WebDemuxersrc/lib/exporter/gifExporter.ts- GIF export functionalitysrc/lib/exporter/annotationRenderer.ts- Annotation rendering system
4. Build & Run
Development Mode
-
Start the development server:
npm run dev # or yarn dev -
The app will open in Electron with hot-reload enabled for React components.
Production Build
-
Build the application:
npm run build # or yarn build -
Package for your platform:
# For current platform npm run dist # For specific platforms npm run dist:mac npm run dist:linux npm run dist:win -
Find the packaged application in the
distfolder.
macOS Specific Setup (After Installation)
If Gatekeeper blocks the app:
-
Open Terminal
-
Run the bypass command:
xattr -rd com.apple.quarantine /Applications/Openscreen.app -
Grant necessary permissions:
- Go to System Settings > Privacy & Security
- Grant "Screen Recording" permission
- Grant "Accessibility" permission
Linux Specific Setup
-
Make the AppImage executable:
chmod +x Openscreen-Linux-*.AppImage -
Run the application:
./Openscreen-Linux-*.AppImage -
If you encounter sandbox errors:
./Openscreen-Linux-*.AppImage --no-sandbox
5. Deployment
For End Users
- macOS: Distribute via
.dmgfiles (consider notarization for better Gatekeeper compatibility) - Linux: Use
.AppImagefor universal compatibility across distributions - Windows: Use
.exeinstaller with proper code signing (recommended)
Distribution Platforms
- GitHub Releases: Primary distribution channel
- Homebrew (for macOS): Consider creating a cask for easier installation
- Snap/Flatpak (for Linux): Package for Linux app stores
- Microsoft Store (for Windows): For wider Windows distribution
Self-Hosting Considerations
Since OpenScreen is a desktop Electron application, traditional web hosting doesn't apply. However:
-
Update Server: Consider implementing an auto-update mechanism using:
- Electron's
autoUpdatermodule - GitHub Releases as update source
- S3 or similar for hosting update files
- Electron's
-
Asset Hosting: Background wallpapers and templates can be hosted on CDN for in-app downloads
6. Troubleshooting
Common Issues and Solutions
Issue: App crashes on launch
- Solution: Check console logs with
npm run devto identify the error - macOS: Ensure all permissions are granted in System Settings
- Linux: Try running with
--no-sandboxflag
Issue: Screen recording not working
- macOS:
- Ensure Terminal has Full Disk Access
- Grant Screen Recording permission to OpenScreen
- Restart the app after granting permissions
- Linux:
- Check your desktop environment's screen recording settings
- For GNOME: Enable screen recording in Settings > Privacy
- For KDE: Check system permissions
Issue: Video export fails or is slow
- Solution:
- Ensure hardware encoding is supported (check
VideoEncoder.isConfigSupported) - Reduce export resolution if hardware encoding fails
- Close other memory-intensive applications during export
- Ensure hardware encoding is supported (check
Issue: GIF export quality issues
- Solution:
- Adjust frame rate in GIF export settings (lower = smaller file)
- Use appropriate size presets from
GIF_SIZE_PRESETS - Consider reducing motion in source video for better GIF compression
Issue: Annotations not rendering correctly
- Solution: Check
annotationRenderer.tsfor SVG path parsing issues - Ensure scale factors are correctly applied to annotation coordinates
Issue: "WASM not loaded" error
- Solution:
- Clear npm cache:
npm cache clean --force - Reinstall dependencies:
rm -rf node_modules && npm install - Ensure
web-demuxer.wasmis correctly copied to build output
- Clear npm cache:
Issue: Build fails on Linux
- Solution: Install required system dependencies:
# Ubuntu/Debian sudo apt-get install build-essential libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 # Fedora sudo dnf install @development-tools libX11-devel libXrandr-devel libXcursor-devel libXinerama-devel libXi-devel libXext-devel
Debugging Tips
- Enable Developer Tools: In the app, use
Ctrl+Shift+I(orCmd+Option+Ion macOS) to open dev tools - Check Console Logs: Look for errors in the console tab
- Verify Dependencies: Ensure all npm packages are correctly installed with
npm list --depth=0 - Clear Cache: Delete
node_modulesandpackage-lock.json, then reinstall if experiencing weird issues
Performance Optimization
-
For Large Videos:
- Use trim regions to export only needed sections
- Reduce zoom complexity if experiencing frame drops
- Export at lower resolution for faster processing
-
Memory Issues:
- The
MAX_ENCODE_QUEUEinvideoExporter.tsis set to 120 for hardware encoding throughput - Reduce this value if experiencing memory issues on low-RAM systems
- Monitor memory usage during export in dev tools
- The
Getting Help
- Check existing GitHub Issues
- Review the project roadmap for known limitations
- Ask questions using the DeepWiki badge in the README
Note: This is a beta project. Some features may be unstable. Always test exports before using for critical work.