A portable, bilingual Windows toolkit for authenticated folder containers and practical SRT subtitle cleanup/editing, reconstructed into maintainable source from the author's earlier binaries and standalone HTML.
- Copies a folder into an authenticated AES-256-GCM
.lockedcontainer. - Derives keys with PBKDF2-HMAC-SHA256 using the documented 600,000 iterations.
- Reads the supported legacy
FOLDERLOCK1andFOLDERLOCK2container formats. - Rejects symbolic links and unsafe restore paths and removes partial restoration output after failure.
- Keeps the source folder after successful encryption so the user can verify a real restore before deleting anything.
- Also provides a clearly labeled Windows/NTFS ACL quick lock. Quick lock is access control and name obfuscation, not encryption.
- Processes one or more
.srtfiles with selectable cleanup rules. - Removes adjacent repeated lines inside a block, repeated fragments on one line, duplicate later blocks, and optionally anomalous timeline tails.
- Reads UTF-8 BOM, UTF-8, GB18030, Big5, and Latin-1 inputs.
- Writes UTF-8 and creates a timestamped
*.bak-<time>.srtonly when content actually changes. - Supports optional drag-and-drop through
tkinterdnd2and works with the file picker when drag-and-drop is unavailable.
- A standalone, single-file editor at
web/srt-editor.html. - Opens directly in a browser with no server, install, build, CDN, or network connection.
- Loads an original and optional comparison subtitle, edits the right column, adjusts times and offsets, searches, adds/removes entries, supports keyboard shortcuts, and exports
_edited.srt. - Escapes subtitle text before inserting it into the DOM.
All tools run offline. They do not upload files, call remote APIs, include telemetry, or load remote runtime assets.
- Windows for the packaged desktop executables and the NTFS quick-lock mode.
- Python
>=3.12,<3.15for source execution. cryptography==49.0.0andtkinterdnd2==0.6.2fromrequirements.txt.- PyInstaller 6.21.0 only when building release executables.
Download the required file from GitHub Release v1.0.0.
| Goal | v1.0.0 asset | Start |
|---|---|---|
| Protect or restore a folder | folder-locker-v1.0.0-windows-x64.exe |
Run the EXE on Windows x64 |
| Clean SRT files in batches | srt-dedupe-v1.0.0-windows-x64.exe |
Run the EXE on Windows x64 |
| Compare and edit subtitles | srt-editor-v1.0.0.html |
Open directly in a browser |
| Keep all three portable tools | offline-utility-suite-v1.0.0-windows-x64.zip |
Extract the archive and choose a tool |
Verify the selected asset against SHA256SUMS.txt. The EXE files are not digitally signed and may trigger an unknown-publisher or antivirus warning.
py -3.12 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
$env:PYTHONPATH = "src"
.\.venv\Scripts\python.exe -m folder_locker.app
.\.venv\Scripts\python.exe -m srt_dedupe.appOpen web/srt-editor.html directly for SRT·EDIT.
Choose a source folder and destination .locked file, enter the password twice, and create the container. The source remains untouched. Restore the container to a separate destination and inspect the files before manually removing the source. A forgotten password cannot be recovered.
The advanced quick-lock tab modifies NTFS permissions and obfuscates names. Administrators or owners may bypass it, and its metadata is important for recovery.
Add one or more .srt files, select at least one cleanup rule, and start processing. Each file fails independently. The result panel reports detected encoding, old/new block count, cleanup statistics, backup path, and post-run validation.
The default rule removes adjacent duplicate text lines within each subtitle block. Cross-block removal keeps the earliest matching subtitle.
Load the source subtitle, optionally load a comparison subtitle, edit and retime the right-hand entries, search as needed, and export the edited file. The editor remains self-contained and offline.
$env:PYTHONPATH = "src"
python -m unittest discover -s tests -v
python -m compileall -q src scripts tests
.\tests\run_ui_smoke.ps1Use .\tests\run_ui_smoke.ps1 -SkipLaunch only in CI or another environment without an interactive Windows desktop. No independent lint or format command was found.
Tests cover Folder Locker, SRT core cleanup, release metadata, and the Web editor. Recovery evidence and limits are documented in docs/RECOVERY_NOTES.md; docs/TEST_REPORT.md records the repository's existing verification report.
Install build dependencies and run the release build:
.\.venv\Scripts\python.exe -m pip install -r requirements-dev.txt
powershell -ExecutionPolicy Bypass -File scripts/build.ps1The build script tests first, compiles sources, creates two Windows x64 one-file executables, copies the HTML editor, creates a portable ZIP, and writes SHA256 checksums.
Expected release assets:
release-assets\folder-locker-v1.0.0-windows-x64.exe
release-assets\srt-dedupe-v1.0.0-windows-x64.exe
release-assets\srt-editor-v1.0.0.html
release-assets\offline-utility-suite-v1.0.0-windows-x64.zip
release-assets\SHA256SUMS.txt
No MSI is generated: the tools have no service, driver, file association, or required registry state. The executables are not digitally signed; verify SHA256SUMS.txt.
The workflow in .github/workflows/release.yml runs on v* tags with Python 3.12, installs requirements-dev.txt, builds, performs run_ui_smoke.ps1 -SkipLaunch, and creates or updates the matching GitHub Release using the repository token.
| Path | Responsibility |
|---|---|
src/folder_locker/ |
Tkinter Folder Locker and cryptographic/ACL core |
src/srt_dedupe/ |
Tkinter batch interface and SRT parsing/cleanup core |
src/utility_suite/ |
Shared application identity and local language settings |
web/srt-editor.html |
Self-contained offline SRT comparison editor |
tests/ |
Folder, subtitle, release, web-editor, and GUI/package checks |
scripts/build.ps1 |
Test, compile, PyInstaller, HTML copy, ZIP, and SHA256 pipeline |
resources/ |
Folder Locker and SRT De-duplicator Windows version resources |
docs/ |
Recovery notes, open-source audit, and test report |
This repository is a maintainable behavioral reconstruction. It does not claim to reproduce lost comments, original variable names, or byte-for-byte original source. Behavior is supported by tests and documented evidence.
- Do not commit original binaries, extraction intermediates, local paths, caches, containers, restored folders, SRT backups, or release output.
- Folder encryption never deletes the source automatically; verify restoration yourself.
- SRT processing writes only when changed and creates a backup first.
- The HTML editor must remain self-contained and escape untrusted subtitle text.
- Unsigned PyInstaller binaries may trigger SmartScreen or antivirus warnings; accurate version metadata is not a digital signature.
- Keep Folder Locker behavior in
src/folder_locker/, subtitle cleanup insrc/srt_dedupe/, shared identity/settings insrc/utility_suite/, and the standalone editor inweb/srt-editor.html; do not move core rules into UI callbacks. - Add focused tests for container/path/ACL changes, SRT encoding/cleanup/backup changes, or editor import/escaping/export changes. Then run
unittest,compileall, and the applicable UI/package smoke. - Read the recovery notes, open-source audit, and test report before changing reconstructed behavior, dependencies, or release claims.
- Keep the tools fully offline and synchronize all three README versions, release notes, third-party notices, version resources, workflow, and checksums when their documented facts change.
Project source is available under the MIT License. Packaged-component notices are in THIRD_PARTY_NOTICES.md, including Python, PyInstaller's bootloader exception, cryptography, Tcl/Tk, and tkinterdnd2/tkDnD.