We welcome contributions from the community! Whether you're fixing bugs, adding features, improving documentation, or helping with testing, your help makes Origami AI better.
- Code of Conduct
- Getting Started
- Development Setup
- Making Changes
- Pull Request Process
- Coding Standards
- Commit Guidelines
- Testing
- Documentation
- Reporting Issues
By participating in this project, you agree to:
- Be respectful and inclusive of all contributors
- Focus on constructive feedback
- Report any Code of Conduct violations to the maintainers
- Node.js >= 20.19.0
- Git
- WebGPU-capable browser (for testing features)
- Basic familiarity with React, TypeScript, and Express
- Fork the repository on GitHub
- Clone your fork locally:
git clone https://github.com/YOUR-USERNAME/Origami-AI.git cd Origami-AI - Add upstream remote:
git remote add upstream https://github.com/TechMitten/Origami-AI.git
# Fetch upstream changes
git fetch upstream
# Rebase your branch on upstream/main
git rebase upstream/main
# Or merge if you prefer
git merge upstream/mainnpm installnpm run devNavigate to http://localhost:3000
npm run buildnpm run previewThen visit http://localhost:4173
npm run lintgit checkout -b feature/your-feature-nameOr for bug fixes:
git checkout -b fix/bug-description- Features:
feature/feature-name - Bug fixes:
fix/bug-description - Documentation:
docs/documentation-update - Performance:
perf/optimization-description - Refactoring:
refactor/refactoring-description
Good Issues for Contributors:
- Issues labeled
good first issue - Issues labeled
help wanted - Documentation improvements
- Test coverage improvements
- Performance optimizations
- Bug fixes
Before starting, check if:
- Issue is already assigned to someone
- There's active discussion about the approach
- Your change aligns with project goals
Consider opening an issue or discussion first for large changes.
-
Sync with upstream:
git fetch upstream git rebase upstream/main
-
Run all checks:
npm run lint npm run build npm run preview
-
Test your changes thoroughly in dev and production builds
-
Commit your changes (see Commit Guidelines below)
- Push your branch to your fork
- Open a Pull Request on GitHub
- Fill out the PR template completely
- Link related issues:
Fixes #123 - Describe what changed and why
feat: add new feature- New featurefix: resolve bug description- Bug fixdocs: update documentation- Documentation updaterefactor: improve code- Code refactoringperf: optimize performance- Performance improvementtest: add test coverage- Test additionschore: update dependencies- Maintenance
Include:
- What problem does this solve?
- How does it solve it?
- Any breaking changes?
- Testing performed
- Screenshots/videos if applicable
- At least one maintainer review required
- Address all feedback before merge
- Keep commits clean and squash if needed
- Rebase and force-push if requested
- Use strict mode (
strict: truein tsconfig) - Provide explicit type annotations for function parameters and returns
- Avoid
anytype - useunknownwith type guards instead - Use interfaces for object shapes
Example:
interface SlideData {
id: string;
title: string;
content: string;
}
function processSlide(slide: SlideData): Promise<string> {
// Implementation
}- Use functional components with hooks
- Use TypeScript for prop types
- Keep components focused and single-responsibility
- Use meaningful names
Example:
interface SlideEditorProps {
slides: SlideData[];
onSlidesChange: (slides: SlideData[]) => void;
}
export function SlideEditor({ slides, onSlidesChange }: SlideEditorProps) {
// Implementation
}- Components: PascalCase (
SlideEditor,VideoRenderer) - Files: snake_case or kebab-case (
slide-editor.ts,video_renderer.ts) - Variables/Functions: camelCase (
generateScript,videoRenderer) - Constants: UPPER_SNAKE_CASE (
MAX_FILE_SIZE,DEFAULT_MODEL) - Private methods: prefix with
_(_processVideo())
- 2-space indentation
- Semicolons required
- Use
const/let, avoidvar - Add meaningful comments for complex logic
- Keep functions small and focused
- Group imports: external → internal → types
- Use relative paths within
src/ - Sort imports alphabetically
import React, { useState } from 'react';
import { useSomething } from '@mlc-ai/web-llm';
import { SlideEditor } from './components/SlideEditor';
import { loadSlides } from './services/storage';
import type { SlideData } from './types/slide';Use clear, descriptive commit messages following conventional commits:
type(scope): subject
body (optional)
footer (optional)
feat(video): add scene analysis capability
Add ability to upload MP4 videos and auto-generate timestamped scene
breakdowns using Gemini API. Includes Scene Alignment Editor for
timeline-locked editing.
Fixes #456
fix(tts): prevent audio clipping with high volume
Audio normalization now properly handles volume levels above 1.0
to prevent distortion during export.
Fixes #123
docs: update README with troubleshooting guide
Add comprehensive troubleshooting section to main README for common
WebGPU and performance issues.
- Commit related changes together
- Write descriptive messages (avoid "fix stuff")
- Use imperative mood ("add feature" not "added feature")
- Keep commits atomic and logical
- Rebase and squash if needed before PR merge
Before submitting a PR, test:
-
Development Build
npm run dev
- Feature works as expected
- No console errors
- Performance is acceptable
-
Production Build
npm run build npm run preview
- Feature still works in optimized build
- No build errors or warnings
-
Different Browsers
- Chrome/Edge (primary)
- Firefox Nightly (if testing WebGPU features)
- Safari (if testing screen recording)
-
Different Scenarios
- Small PDFs (< 5 slides)
- Large PDFs (> 20 slides)
- Screen recording with/without extension
- Local AI inference and remote API
- Different model sizes
For changes affecting performance:
- Profile rendering times
- Check memory usage in DevTools
- Monitor GPU usage
- Test with large projects
Verify no console errors in:
- Chrome DevTools Console
- Firefox Developer Tools
- Safari Web Inspector
Update README.md when:
- Adding new features
- Changing installation steps
- Updating requirements
- Adding configuration options
Add comments for:
- Complex algorithms or logic
- Non-obvious implementation choices
- Workarounds or hacks
- Performance-critical sections
// Auto-zoom is disabled during recordings to prevent motion sickness
const autoZoomEnabled = !isRecording;
// WebGPU memory buffer patch is intentionally disabled due to 60+ second
// slowdowns in WebLLM. See CLAUDE.md for details.For significant changes, consider updating a CHANGELOG (if one exists):
- New features
- Bug fixes
- Breaking changes
- Deprecations
- Check if issue already exists
- Search closed issues for similar problems
- Check TROUBLESHOOTING.md
- Try in incognito/private mode
- Clear browser cache and try again
Title: Brief, descriptive title
Description:
- What should happen?
- What actually happens?
- Steps to reproduce: 1. 2. 3.
Environment:
- Browser: (Chrome 120, Firefox Nightly, etc.)
- OS: (Windows 11, macOS Sonoma, Ubuntu 22.04)
- Node version: (output of
node -v)
Additional Info:
- Console errors (F12 → Console tab)
- Screenshots or screen recordings
- Relevant configuration
Help categorize your issue:
bug- Something isn't workingfeature-request- New feature ideadocumentation- Documentation improvementperformance- Performance concernquestion- Usage questionhelp-wanted- External help needed
- Large models (Llama 3.2 3B) use 2.5GB+ VRAM
- Smaller models (Gemma 2 2B) use ~2GB VRAM
- Test with realistic project sizes
- Profile with DevTools Performance tab
- FFmpeg.wasm rendering is CPU and GPU intensive
- Test video output quality and speed
- Consider memory/speed tradeoffs
- Document any performance impacts
- Watch bundle size in Vite build output
- Large dependencies should be justified
- Consider code splitting if adding large libraries
(For Maintainers)
- Create release branch from main
- Update version numbers
- Update CHANGELOG
- Create GitHub release with notes
- Tag commit with version
- Review existing code for patterns
- Ask questions in GitHub Discussions
- Reach out to maintainers for guidance
Contributors are recognized in:
- GitHub commit history
- Release notes for significant contributions
- CONTRIBUTORS.md file (if maintained)
Thank you for contributing to Origami AI! 🎬✨