CutScript is a local-first, Descript-like video editor where you edit video by editing text. Delete a word from the transcript and it's cut from the video. Features: - Word-level transcription with WhisperX - Text-based video editing with undo/redo - AI filler word removal (Ollama/OpenAI/Claude) - AI clip creation for shorts - Waveform timeline with virtualized transcript - FFmpeg stream-copy (fast) and re-encode (4K) export - Caption burn-in and sidecar SRT generation - Studio Sound audio enhancement (DeepFilterNet) - Keyboard shortcuts (J/K/L, Space, Delete, Ctrl+Z/S/E) - Encrypted API key storage - Project save/load (.aive files) Architecture: - Electron + React + Tailwind (frontend) - FastAPI + Python (backend) - WhisperX for transcription - FFmpeg for video processing - Multi-provider AI support Performance optimizations: - RAF-throttled time updates - Zustand selectors for granular subscriptions - Dual-canvas waveform rendering - Virtualized transcript with react-virtuoso Built on top of DataAnts-AI/VideoTranscriber, completely rewritten as a desktop application. License: MIT
60 lines
1.4 KiB
Python
60 lines
1.4 KiB
Python
"""
|
|
AI background removal (Phase 5 - future).
|
|
Uses MediaPipe or Robust Video Matting for person segmentation.
|
|
Export-only -- no real-time preview.
|
|
"""
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
# Placeholder for Phase 5 implementation
|
|
# Will use mediapipe or rvm for segmentation at export time
|
|
|
|
MEDIAPIPE_AVAILABLE = False
|
|
RVM_AVAILABLE = False
|
|
|
|
try:
|
|
import mediapipe as mp
|
|
MEDIAPIPE_AVAILABLE = True
|
|
except ImportError:
|
|
pass
|
|
|
|
try:
|
|
pass # rvm import would go here
|
|
except ImportError:
|
|
pass
|
|
|
|
|
|
def is_available() -> bool:
|
|
return MEDIAPIPE_AVAILABLE or RVM_AVAILABLE
|
|
|
|
|
|
def remove_background_on_export(
|
|
input_path: str,
|
|
output_path: str,
|
|
replacement: str = "blur",
|
|
replacement_value: str = "",
|
|
) -> str:
|
|
"""
|
|
Process video frame-by-frame to remove/replace background.
|
|
Only runs during export (not real-time).
|
|
|
|
Args:
|
|
input_path: source video
|
|
output_path: destination
|
|
replacement: 'blur', 'color', 'image', or 'video'
|
|
replacement_value: hex color, image path, or video path
|
|
|
|
Returns:
|
|
output_path
|
|
"""
|
|
if not is_available():
|
|
raise RuntimeError(
|
|
"Background removal requires mediapipe or robust-video-matting. "
|
|
"Install with: pip install mediapipe"
|
|
)
|
|
|
|
# Phase 5 implementation will go here
|
|
raise NotImplementedError("Background removal is planned for Phase 5")
|