CCExtractor Flutter GUI
The new cross-platform interface is all you need, as it includes all the options. After installing GUI you will have a shortcut in your desktop, this lets users not familiar with CLI to extract subtitles.
Usually, you will never need to use all the options (and even if you do, all the settings are saved locally at Documents/config.json in your PC) for regular usage.
The GUI basically uses dart’s process class to start the ccextractor executable and shows the progress and live output.
Table of contents
Installation Usage Contributing
Installation
Depending on your OS of choice, one or multiple options are available.
Windows
(preferred) Download the .msi to install CCExtractor and this GUI Download the built GUI from the releases on this repository. You’ll have to provide a CCExtractor binary yourself Download this repository and build the GUI by yourself. You’ll have to provide a CCExtractor binary yourself
Linux
Executables for Linux can be found here or on the releases page . Both still require to get ccextractor manually.
macOS
MacOS requires you to build the GUI from source and get ccextractor manually. For detailed information on this please refer INSTALL.MD .
Usage
For users new to GUI check out the usage guide here . You can also check all the options avaiable in ccextractor here
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. Please make sure to update tests as appropriate. For more details, see the Contributing Page
Download CCExtractor Flutter GUI source code on GitHub
A cross platform GUI for CCExtractor https://github.com/CCExtractor/ccextractorfluttergui 34 forks. 27 stars. 9 open issues. Recent commits: fix: Use proper app support directory for config storage (#74)Move config.json from Documents folder to the proper applicationsupport directory (AppData\Roaming on Windows, ~/.local/share on Linux,~/Library/Application Support on macOS).This fixes the app hanging on startup on Windows 11 25H2 when theDocuments folder is inaccessible (OneDrive sync issues, permissions,network redirects, etc.).Changes:- Use getApplicationSupportDirectory() instead of getApplicationDocumentsDirectory()- Add 10-second timeout on directory resolution- Ensure directory exists before writing config- Add try-catch in SettingsBloc to emit error state instead of hangingFixes: CCExtractor/ccextractor#1936🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> , GitHub refactor: Code quality improvements and testing (#73)* refactor: Code quality improvements and testingQuick Wins:- Fix typo: orignalList -> originalList- Add logger package for proper logging- Replace all print statements with logger calls- Fix silent catch blocks with proper error loggingError Handling:- Add comprehensive HTTP error handling in updater_bloc- Add response status validation and null checks- Add proper try-catch with logging throughoutRefactoring:- Refactor triple-nested BlocBuilders in start_stop_button using context.select- Extract button logic into separate _handlePress method- Clean up process_tile.dart catch blocksAccessibility:- Add Tooltip to start/stop button- Add semantic labels to icons- Add Tooltip and Semantics to add files button- Add const constructors where applicableTesting:- Add comprehensive tests for DashboardBloc (5 tests)- Add comprehensive tests for ProcessBloc (4 tests)- Total: 14 passing tests🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* fix: Improve CCExtractor binary path resolution- Fix path resolution to check bundled executable first, then fall back to system PATH (was incorrectly detecting non-executable files)- Add debug logging to extraction process for troubleshooting- Log CCExtractor stdout/stderr output for visibility🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* style: Apply dart format🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* style: Format test file🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* ci: Update GitHub Actions to latest versions- Update actions/checkout from v2.3.4 to v4- Update subosito/flutter-action from v1.5.3 to v2- Update actions/upload-artifact from v2 to v4- Pin Flutter version to 3.27.2 for consistency🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* ci: Remove deprecated flutter config commandsDesktop support is enabled by default in Flutter 3.x, no need toexplicitly enable it. Also fix apt-get to run update first.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* ci: Fix Windows build output path for Flutter 3.xFlutter 3.x outputs Windows builds to build/windows/x64/runner/Releaseinstead of build/windows/runner/Release.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>———Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> , GitHub feat: Update CCExtractor CLI compatibility and modernize Flutter dependencies (#72)* feat: Update CCExtractor CLI compatibility and modernize Flutter dependenciesThis PR updates the GUI to ensure compatibility with the latest CCExtractor CLIand modernizes all Flutter dependencies to work with Flutter 3.x/Dart 3.x.## CCExtractor CLI Compatibility Fixes### 1. Added Missing Input Formats (`lib/utils/constants.dart`)Added support for new input formats that the latest CCExtractor CLI supports:- `m2ts` – BDAV MPEG-2 Transport Stream- `mkv` – Matroska container and WebM- `mxf` – Material Exchange Format### 2. Added Missing Output Formats (`lib/utils/constants.dart`)Added support for new output formats:- `ass` – SubStation Alpha (alternative to ssa)- `ccd` – Scenarist Closed Caption Disassembly format- `scc` – Scenarist Closed Caption format- `webvtt-full` – WebVTT format with styling- `mcc` – MacCaption Format- `g608` – Grid 608 format- `report` – Caption information report- `simple-xml` – Simple XML format### 3. Fixed Invalid `–no-timestamp-map` Argument (`lib/models/settings_model.dart`)- **Bug**: The GUI was generating `–no-timestamp-map` which doesn't exist in CCExtractor- **Fix**: Renamed `notimestamp` to `timestampMap` and changed the CLI argument to `–timestamp-map`- Updated all references throughout the settings model (property, constructor, copyWith, toJson, fromJson, toString, equality, hashCode)### 4. Fixed CCExtractor Version Parsing (`lib/repositories/ccextractor.dart`)- The previous substring-based parsing was fragile and caused RangeError exceptions- Now uses robust regex matching: `RegExp(r'Version:\s*(\S+)')`- Added proper error handling## Flutter/Dart Modernization### 5. Updated SDK and Dependencies (`pubspec.yaml`)- **SDK**: `>=2.12.0 <3.0.0` → `>=3.0.0 <4.0.0`- **bloc**: `^7.0.0` → `^8.1.0`- **flutter_bloc**: `^7.1.0` → `^8.1.0`- **flutter_svg**: `^0.22.0` → `^2.0.10`- **http**: `^0.13.3` → `^1.2.0`- **url_launcher**: `^6.0.9` → `^6.2.0`- **path_provider**: `^2.0.2` → `^2.1.0`- **file_selector**: `^0.8.2` → `^1.0.0`- **file**: `^6.1.4` → `^7.0.0`- **percent_indicator**: `^3.0.1` → `^4.2.0`- **flutter_markdown**: `^0.6.3` → `^0.6.22`- **hive_generator**: `^1.1.0` → `^2.0.1`- **build_runner**: `^2.1.0` → `^2.4.0`- Replaced `window_size` (git dependency) with `window_manager` (pub.dev)- Removed `localstorage` git dependency (now using file-based storage)- Removed deprecated `pedantic` package- Removed platform-specific file_selector packages (now handled by main package)### 6. Migrated Bloc Classes to New API (`lib/bloc/`)The bloc package 8.x uses a new event handler pattern instead of `mapEventToState`:- `dashboard_bloc.dart`: Migrated to `on<Event>()` pattern with emit- `settings_bloc.dart`: Migrated to `on<Event>()` pattern with emit- `updater_bloc.dart`: Migrated to `on<Event>()` pattern with emit- `process_bloc.dart`: Migrated to `on<Event>()` pattern with emit### 7. Updated Deprecated APIs- `lib/main.dart`: `window_size` → `window_manager` API- `lib/main.dart`: `ColorScheme.dark(background:)` → `ColorScheme.dark(surface:)`- `lib/screens/settings/components/custom_swtich_listTile.dart`: `activeColor` → `activeTrackColor`- `lib/bloc/updater_bloc/updater_bloc.dart`: `launch()` → `launchUrl(Uri.parse())`### 8. Removed Deprecated Linter Rules (`analysis_options.yaml`)Removed linter rules that were removed in Dart 3.x:- `always_require_non_null_named_parameters` (removed in Dart 3.3.0)- `prefer_equal_for_default_values` (removed in Dart 3.0.0)- `unsafe_html` (removed in Dart 3.7.0)### 9. Refactored Settings Repository (`lib/repositories/settings_repository.dart`)- Removed dependency on `localstorage` package- Now uses direct file-based JSON storage via `path_provider`- Cleaner async/await patterns### 10. Fixed NavigationRail Overflow (`lib/screens/home.dart`)- Reduced logo height from 120 to 80 pixels- Reduced top padding from 20 to 8 pixels- Added `mainAxisSize: MainAxisSize.min` to prevent overflow🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* feat: Add remaining CCExtractor CLI options to GUIAdd support for the following CLI options:Medium priority:- –hcc: Hybrid closed captions (HardSubX)- –psm: Tesseract page segmentation mode (14 modes)- –ttxtforcelatin: Force Latin charset for Teletext- –font/–italics: SPUPNG font paths- –forceflush: Flush file buffer on writeLow priority:- –screenfuls: Stop after N screenfuls- –unixts: Unix timestamp reference- –ucla: UCLA transcript format- –no-spupngocr: Disable SPUPNG OCR- -L/–list-tracks: List all tracks- –output-field: Select caption field (1/2/both)- –cc2: Process channel 2- –tverbose: Teletext verbose mode- –customtxt: Custom transcript format🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>* fix: Add TestWidgetsFlutterBinding.ensureInitialized() to testsFixes test failures caused by path_provider requiring Flutter bindingsto be initialized before use.🤖 Generated with [Claude Code](https://claude.com/claude-code)Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>———Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> , GitHub Update CCExtractor args to latest format and bundle latest build (#69)* fix: file not found on Linux* fix: update CCExtractor args to correct format* feat: bump bundled binaries to 1c7e2a0* fix: TCP and UDP optionsCo-authored-by: Deepnarayan Sett <71217129+steel-bucket@users.noreply.github.com>———Co-authored-by: Deepnarayan Sett <71217129+steel-bucket@users.noreply.github.com> , GitHub fix: migrate navigation rail to built in package (#70)Co-authored-by: Mohammed Mohsin <mdmohsin_1@hotmail.com> , GitHub
Provides the list of the opensource Flutter apps collection with GitHub repository.