Getting Started
MovieLite is an open-source Python video editing library focused on speed and simplicity. Contributions are highly welcome!GitHub Repository
View source code and open issues
Issue Tracker
Report bugs and request features
Ways to Contribute
Report Bugs
Report Bugs
Found a bug? Please open an issue with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Your environment (OS, Python version, MovieLite version)
- Minimal code example if possible
Suggest Features
Suggest Features
Have an idea for a new feature?
- Check existing issues first to avoid duplicates
- Describe the feature and its use case
- Explain how it fits with MovieLiteβs philosophy
- Consider implementation approach
Improve Documentation
Improve Documentation
Documentation improvements are always appreciated:
- Fix typos and clarify explanations
- Add examples and tutorials
- Improve API documentation
- Translate documentation
Submit Code
Submit Code
Code contributions can include:
- Bug fixes
- New features
- Performance improvements
- New effects or transitions
- Test coverage improvements
Development Setup
Prerequisites
Install FFmpeg
FFmpeg must be installed and available in your PATH:macOS:Ubuntu/Debian:Windows:
Download from ffmpeg.org and add to PATH.
Setting Up the Development Environment
Install in development mode
- MovieLite in editable mode (changes reflect immediately)
- All runtime dependencies (numpy, numba, opencv, etc.)
- Test dependencies (pytest, pytest-cov)
Project Structure
Development Workflow
Creating a New Branch
Making Changes
Testing
- Running Tests
- Writing Tests
- Test Assets
Code Style Guidelines
Python Code Style
MovieLite follows PEP 8 with some specific conventions:General Style
General Style
- Use 4 spaces for indentation (no tabs)
- Maximum line length: 88 characters (Black formatter default)
- Use descriptive variable names
- Add docstrings to all public functions and classes
- Type hints are encouraged but not required
Naming Conventions
Naming Conventions
- Classes:
PascalCase(e.g.,VideoClip,FadeIn) - Functions/methods:
snake_case(e.g.,set_position,get_frame) - Constants:
UPPER_SNAKE_CASE(e.g.,DEFAULT_FPS) - Private members: Prefix with
_(e.g.,_internal_buffer)
Imports
Imports
Order imports as follows:
Docstrings
Docstrings
Use Google-style docstrings:
Performance Considerations
-
Use Numba JIT for pixel-level operations:
- Minimize memory allocations in hot loops
- Prefer in-place operations when safe
- Profile before optimizing - measure impact
- Document performance characteristics in docstrings
Adding New Effects
When adding a new visual effect:Submitting Your Contribution
Commit Guidelines
Write clear commit messages
Follow conventional commit format:Types:
feat: New featurefix: Bug fixdocs: Documentation changesperf: Performance improvementrefactor: Code refactoringtest: Adding testschore: Maintenance tasks
Keep commits focused
- One logical change per commit
- Commit working code (tests pass)
- Avoid mixing unrelated changes
Creating a Pull Request
Open a pull request
Go to the MovieLite repository on GitHub and create a pull request from your fork.
Fill out the PR template
Include:
- Description: What does this PR do?
- Motivation: Why is this change needed?
- Type: Bug fix, new feature, performance, docs, etc.
- Testing: How was this tested?
- Breaking changes: Any backwards-incompatible changes?
- Related issues: Link to related issues
Pull Request Checklist
Before submitting, verify:
- Code follows style guidelines
- Tests added for new functionality
- All tests pass locally
- Documentation updated (if needed)
- CHANGELOG.md updated (for significant changes)
- Commit messages are clear and descriptive
- No merge conflicts with main branch
Development Roadmap
Interested in contributing but not sure where to start? Check out these priority areas:GPU Acceleration
Add optional GPU support using CuPy or PyTorch for transformations and blending.
More Output Formats
Expand codec and container support beyond MP4/H.264.
Smart Caching
Implement intelligent caching of static content to avoid redundant rendering.
Enhanced API
Add convenience features like string-based positioning and deep copy support.
More Effects
Expand the effects library with new visual and audio effects.
Better Type Hints
Improve type hinting throughout the codebase for better IDE support.
Communication
- GitHub Issues: For bug reports and feature requests
- GitHub Discussions: For questions and general discussion
- Pull Requests: For code review and collaboration
Code of Conduct
Be respectful and constructive:- Welcome newcomers and help them get started
- Provide constructive feedback on PRs
- Be patient with questions
- Respect different viewpoints and experiences
- Focus on whatβs best for the community
License
By contributing to MovieLite, you agree that your contributions will be licensed under the MIT License.Questions?
If you have questions about contributing:- Check existing documentation
- Search GitHub issues for similar questions
- Open a new issue with the
questionlabel