Contributing
Thank you for your interest in contributing! This project welcomes contributions from the broadcast and video production community.
Getting Started
Prerequisites
- Node.js 20+
- Access to an ATEM switcher (or use mock mode for development)
- Basic understanding of broadcast workflows and EDL formats
Development Setup
# Clone the repositorygit clone https://github.com/FiLORUX/atem-iso-edl-generator.gitcd atem-iso-edl-generator
# Install dependenciesnpm install
# Copy example configurationcp config/config.example.yaml config/config.yaml
# Run in development modenpm run devCode Standards
Style
- Consistent terminology aligned with EBU/SMPTE broadcast standards
- Clear, professional documentation suitable for broadcast engineers
TypeScript
- Strict mode enabled
- Explicit types for public APIs
- Use Zod schemas for runtime validation
Commit Messages
Follow conventional commits format:
feat: add HyperDeck timecode supportfix: correct drop-frame calculation for 59.94fpsdocs: add troubleshooting section for network issuesPrefixes: feat, fix, docs, test, refactor, chore, perf
Testing
# Run all testsnpm test
# Run with coveragenpm run test:coverage
# Run in watch modenpm run test:watchPull Request Process
- Fork the repository
- Create a feature branch (
git checkout -b feat/my-feature) - Commit changes with conventional commit messages
- Test your changes thoroughly
- Push to your fork
- Open a pull request with a clear description
PR Requirements
- Tests pass (
npm test) - Linting passes (
npm run lint) - TypeScript compiles (
npm run typecheck) - Documentation updated if needed
- No breaking changes without discussion
Reporting Issues
Bug Reports
Include:
- ATEM model and firmware version
- Node.js version
- Configuration (redact IPs/passwords)
- Steps to reproduce
- Expected vs actual behaviour
- Relevant log output
Feature Requests
Describe:
- Use case and workflow
- Proposed solution
- Alternatives considered
- Impact on existing functionality
Architecture Notes
Key Components
| Component | Location | Purpose |
|---|---|---|
| ATEM Adapter | src/adapters/atem/ | Switcher communication |
| Event Store | src/core/events/ | Event types and logging |
| EDL Generator | src/generators/edl/ | CMX 3600 output |
| Timecode | src/core/timecode/ | SMPTE timecode handling |
Design Principles
- Reliability over features — Broadcast environments require stability
- Event sourcing — All state derived from immutable event log
- Graceful degradation — Continue operating if devices disconnect
- Zero configuration — Sensible defaults, minimal required setup
Licence
By contributing, you agree that your contributions will be licensed under the MIT Licence.
Questions? Open an issue or start a discussion.