Releases: BKDDFS/PerfectFrameAI
Releases · BKDDFS/PerfectFrameAI
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
PerfectFrameAI v3.0.0
This major release modernizes the entire codebase, improves developer experience, and reduces Docker image size by ~450MB.
⚠️ Breaking Changes
Module Rename
extractor_service/→perfectframe/- all imports must be updatedextractor_service/main.py→perfectframe/app.py
Python Version
- Now requires Python 3.11-3.13 (previously 3.10-3.12)
Removed Components
- service_manager module removed - no more Python wrapper around Docker
- config.py removed - configuration now via docker-compose.yaml
- start.py removed - use
docker compose updirectly - Poetry removed - migrated to uv for faster installs
ML Framework
- TensorFlow removed - replaced with ONNX Runtime (~500MB → ~50MB)
✨ New Features
macOS ARM64 Support
- Native builds on Apple Silicon (M1/M2/M3)
- Conditional platform flag - uses
--platform linux/amd64only on non-ARM64 systems
GPU/CPU Automatic Fallback
onnxruntime-gpuon Linux/Windows (CUDA support)onnxruntimeon macOS (no CUDA on Apple Silicon)- Automatic detection - no manual configuration needed
Pre-commit Hooks
New .pre-commit-config.yaml with:
- Ruff - linting with ALL rules enabled
- docformatter - Google-style docstrings
- detect-secrets - prevents accidental credential commits
- pytest - runs tests before commit
100% Test Coverage Enforcement
- Coverage check via
--cov-fail-under=100 - Blocks commits and CI if coverage drops
🏗️ Architecture Changes
Simplified Project Structure
Before: After:
extractor_service/ perfectframe/
├── Dockerfile ├── app.py
├── app/ ├── dependencies.py
│ └── ... └── ...
service_manager/ Dockerfile (root)
└── ... docker-compose.yaml
Test Structure Flattened
tests/extractor_service/+tests/service_manager/merged intotests/unit/,tests/integration/,tests/e2e/
Code Consolidation
InceptionResNetNIMA+_ONNXModelmerged into singleNIMAEvaluatorclass- Common test fixtures consolidated in
tests/common.py
🔄 CI/CD Improvements
New Workflows
| Workflow | Purpose |
|---|---|
release.yml |
Automated releases with release-please |
pr-title.yml |
Conventional commit validation |
codeql.yml |
CodeQL security scanning |
scorecard.yml |
OpenSSF Scorecard integration |
Release Automation
- release-please - automatic changelog and version bumps
- SBOM attestation - Software Bill of Materials on every release
- Versioned filenames - e.g.
perfectframe-v3.0.0.tar.gz
CI Enhancements
- Pre-commit hooks run in CI (can't bypass with
--no-verify) - All GitHub Actions updated to latest versions
- Trivy security scanning (pinned to v0.28.0)
- Added
devbranch to CI and CodeQL workflows
🔒 Security
Container Hardening
- Non-root user - container no longer runs as root
- Proper file permissions for non-root operation
Workflow Security
- Permissions moved from workflow level to job level (least privilege)
Secret Detection
.secrets.baselineadded for detect-secrets- Prevents accidental credential commits
License Change
- GPL-3.0 → Apache 2.0 - more permissive for commercial use
🧹 Code Quality
Linting Migration
- Pylint → Ruff with ALL rules enabled
- Sensible ignores configured in
pyproject.toml
Type System Improvements
- New type aliases:
Image,Images,ImagesBatch,ScoresArray,ImageResolution ExtractorNameenum used consistently (replaces strings)- Runtime type checks replace
# type: ignorecomments
Testing Improvements
- Migrated from
unittest.mocktopytest-mock - Added
pytest-timeoutfor hanging test detection - New E2E tests for Docker on ARM64
🐛 Bug Fixes
- Race condition fixed -
_active_extractorflag now set immediately instart_extractor(not inside background task) - Silent failures now logged - exception logging in
ExtractorManager.__run_extractor(),cv2.imwrite()return value checked - Typos fixed -
compering_group_size→comparing_group_size,ulr→url - Test fix - added missing parentheses to
assert_not_called()call - Model download - proper
requests.RequestExceptionhandling
📦 Dependency Updates
| Category | Before | After |
|---|---|---|
| Build System | Poetry | uv 0.9.26 |
| ML Framework | TensorFlow 2.18.0 | ONNX Runtime |
| Python | 3.12 | 3.13 |
New Dependencies
pytest-mock- cleaner mock syntaxpytest-timeout- test timeout enforcement
Dependabot
- Added
uvpackage ecosystem for automatic dependency updates
📚 Documentation
README
- Improved Usage section with clear CPU/GPU mode instructions
- Removed Tests and Roadmap sections
- Added v3.0 to version comparison table
Removed
- Polish README (
.github/README.pl.md)
Added
CODEOWNERSfile for automatic review assignment
🐳 Docker
- Dockerfile moved from
extractor_service/to project root - Merged RUN instructions for smaller image layers
- Removed curl and healthcheck (not needed)
- Service renamed in docker-compose:
extractor_service→perfectframe - Non-root user with proper permissions
📋 Requirements
- Python 3.11-3.13
- Docker (optional)
- GPU with CUDA (optional - automatic fallback to CPU)
PerfectFrameAI v2.3.2
Update dependencies/security
PerfectFrameAI v2.3.1
Release Notes
New Features
Support for Additional Video and Image Extensions:
Expanded support to include more video and image file formats, enhancing the versatility and compatibility of our software.
Updates
Test Updates:
Updated tests.png to reflect the latest changes and improvements in the testing suite.
Integrations
Codecov Integration:
Integrated Codecov for code coverage analysis to ensure higher code quality and maintainability.
PerfectFrameAI v2.3.0
Release Notes
Enhancements
- Add SonarCloud
- Add GitHub Actions: Add testing code before pull request via GitHub Actions
- Dependencies Module: Added a new dependencies module.
- Created At Badge: Added a 'created at' badge to the project.
- OpenCVVideo Method Name Change: Renamed
get_next_video_framestoget_nextinOpenCVVideo. - Image Normalization: Moved image normalization from the evaluator to extractors.
- Extractor Factory Method: Renamed
get_extractor()tocreate_extractor()inExtractorFactory. - ServiceShutdownSignal: Moved
ServiceShutdownSignalinsideDockerManager. - ServiceInitializer: Made
ServiceInitializerattributes protected. - Manager Status: Added "created" status to manager and corresponding tests.
- CPU-Only Flag: Added a CPU-only flag for improved configurability.
Documentation
- README Updates:
- Added new flag information.
- Updated requirements section.
- Fixed paths in
docker-compose.yamland adjusted method 2. - Changed README files' test sections after moving tests to the root folder.
Bug Fixes
- Path Fixes: Fixed paths in Docker compose files and method descriptions in README.
- Test Imports: Moved extractor service tests and service manager tests to the root directory and fixed import paths.
- Image Evaluator: Modified
_get_image_evaluator()to returnImageEvaluatorinstead of a specific implementation. - Fix all known issues in tests
v2.2.1
Release Notes
Enhancements
-
Updated the
README.mdto include a table comparing RAM usage optimization between v1.0 and v2.0. -
Dependency Updates:
- Bumped the
requestspackage version to3.32. This ensures compatibility with the latest features and security updates.
- Bumped the
Bug Fixes
- Fix for Requests Package Update:
- Addressed an issue where an update in the
requestspackage was causing a failure in the Docker setup. The fix ensures that the application runs smoothly with the latest version of therequestspackage.
- Addressed an issue where an update in the
- Add missing input and output directories.
PerfectFrameAI v2.2.0
Release Notes
New Features
- Versioning to API Endpoints (v2):
- Added versioning to API endpoints to support multiple versions and improve backward compatibility.
Improvements
- Optimized Model Handling:
- Added functionality to skip unnecessary model downloading and evaluator creation, resulting in faster initialization times and reduced resource usage.
Bug Fixes
- High RAM Usage Issue:
- Fixed an issue causing high RAM usage due to the accumulation of frames in memory before they are written to disk. This fix improves performance and stability, especially on systems with limited memory.
- Python Versioning Fix:
- Corrected the Python versioning in
pyproject.tomlfor thefcs-filesystem(TensorFlow) to ensure compatibility and smooth deployment.
- Corrected the Python versioning in
- Manual Garbage Collection:
- Implemented manual garbage collecting and deleting of references to manage memory more efficiently.