Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1590 commits
Select commit Hold shift + click to select a range
fbb00cf
style: hover of copy markdown button
mazeincoding Mar 2, 2026
d62eb6a
Merge branch 'main' of https://github.com/OpenCut-app/OpenCut
mazeincoding Mar 2, 2026
88bf59d
fix effects button in light mode
mazeincoding Mar 2, 2026
a635ae9
fix inconsistency in blur intensity
mazeincoding Mar 2, 2026
a87b344
Merge branch 'dev'
mazeincoding Mar 2, 2026
3a2ec3c
changelog: improve phrasing for timeline clip gap description
mazeincoding Mar 2, 2026
5216f43
changelog open graph image
mazeincoding Mar 2, 2026
8fd9b96
fix changelog opengraph image
mazeincoding Mar 2, 2026
dc58c10
changelog: fix date
mazeincoding Mar 2, 2026
d9a214e
fix content-collections implicit content deprecation
mazeincoding Mar 2, 2026
df518cb
close effects after last effect removal + spacing
mazeincoding Mar 2, 2026
719e0d4
fix: invert logos in /sponsors when dark mode
mazeincoding Mar 3, 2026
21f12ff
button color
mazeincoding Mar 3, 2026
705faea
feat: add changelog link to footer
mazeincoding Mar 3, 2026
31dc786
fix: outline button styling
mazeincoding Mar 3, 2026
4e0483e
replace opencut assets
mazeincoding Mar 3, 2026
8e8f1c3
chore: upgrade tailwind-related deps
mazeincoding Mar 4, 2026
46e5567
feat: branding page
mazeincoding Mar 4, 2026
24dac12
rename branding page to brand
mazeincoding Mar 4, 2026
ed8815c
checker pattern for brand asset cards (branding page)
mazeincoding Mar 4, 2026
5ca2de2
fix: auto scroll on link
mazeincoding Mar 4, 2026
ca3e5c9
add context menu (w/ brand options) to header logo
mazeincoding Mar 4, 2026
a2d0871
refactor: remove foreground variant from button, make it default
mazeincoding Mar 4, 2026
0be9275
dialog: decrease gap
mazeincoding Mar 4, 2026
26d523e
fix: fallback to opus codec
mazeincoding Mar 8, 2026
f2eed05
fix blog build when marble cms isn't available
mazeincoding Mar 24, 2026
63496d0
Fix transcription sample-rate handling (#740)
kcfancher Mar 28, 2026
7e2a913
Update OpenCut logo in README (#741)
Aspenini Mar 28, 2026
6018efc
changelog: new version with already-made changes
mazeincoding Mar 4, 2026
b096350
fix: assets having unreasonable widths and heights
mazeincoding Mar 4, 2026
5e2b829
changelog: add already-completed item
mazeincoding Mar 4, 2026
2c0fd4f
untrack .cursor/
mazeincoding Mar 25, 2026
39ea298
chore: gitignore
mazeincoding Mar 25, 2026
8db3bea
feat: masks, properties refactor, shaders, storage migrations, and more
mazeincoding Mar 25, 2026
722dcdd
fix: resolve typescript/lint errors
mazeincoding Mar 26, 2026
6dd8191
chore: init cloudflare
mazeincoding Mar 26, 2026
a54b3ef
chore: update botid
mazeincoding Mar 26, 2026
82817cb
chore: next-env
mazeincoding Mar 26, 2026
4d127a0
chore: normalize line endings
mazeincoding Mar 26, 2026
d08fbd7
fix: add missing file
mazeincoding Mar 27, 2026
d862e56
feat: init desktop app
mazeincoding Mar 27, 2026
f8a0390
chore: rename proxy to middleware
mazeincoding Mar 27, 2026
6df9d70
chore: update dep
mazeincoding Mar 27, 2026
e95992b
chore: add missing open-next config
mazeincoding Mar 27, 2026
3e75852
chore: remove dead songs tab
mazeincoding Mar 27, 2026
c34e01c
refactor: clean up number formatting and step handling in property tabs
mazeincoding Mar 27, 2026
1261e66
docs: rewrite agents file
mazeincoding Mar 29, 2026
585e28d
feat: add published status to changelog entries
mazeincoding Mar 29, 2026
220ec75
refactor: move packages sub-folders into web app
mazeincoding Mar 29, 2026
5777a55
feat: add shared Rust crates for cross-platform time utilities
mazeincoding Mar 29, 2026
a241875
chore: remove accidentally committed Zone.Identifier stream
mazeincoding Mar 29, 2026
eb66e03
fix(security): replace new Function() with safe math expression parse…
cyphercodes Mar 29, 2026
5a1d9ef
chore: remove unused middleware file
mazeincoding Mar 29, 2026
6898533
fix: remove OpenNext Cloudflare initialization
mazeincoding Mar 29, 2026
9528d00
chore: untrack files
mazeincoding Mar 29, 2026
7ce0018
chore: update .gitignore
mazeincoding Mar 29, 2026
0a6ede7
chore: update deps
mazeincoding Mar 29, 2026
b095862
fix: improve DATABASE_URL validation in web environment schema
mazeincoding Mar 29, 2026
dc59569
fix: eliminate first-paint flicker in landing handlebars
mazeincoding Mar 29, 2026
df207e0
refactor: name magic numbers and rename el in landing handlebars
mazeincoding Mar 29, 2026
41562ba
style: remove unnecessary margin from keyframe
mazeincoding Mar 29, 2026
1c3b22e
feat: add keyframe graphs button
mazeincoding Mar 29, 2026
77a14b1
refactor: standardize icon component props
mazeincoding Mar 29, 2026
5cc6abc
style: swap ripple icon
mazeincoding Mar 29, 2026
dcf54c1
feat: migrate time utilities from typescript to rust WASM
mazeincoding Mar 31, 2026
70a6d58
refactor: centralize track placement into its own module
mazeincoding Mar 31, 2026
d23be07
Merge branch 'feature/track-placement'
mazeincoding Mar 31, 2026
154b78c
fix: allow timeline paste and duplicate commands to reassign updated …
mazeincoding Mar 31, 2026
0f5dca4
fix: build wasm before bun install in CI
mazeincoding Mar 31, 2026
0488a6b
fix: normalize vertical drag direction in preferIndex placement
mazeincoding Mar 31, 2026
f8fb238
feat: centralize selection management
mazeincoding Mar 31, 2026
cc150c7
Merge branch 'refactor-selection-commands'
mazeincoding Mar 31, 2026
f1d5932
feat: separate audio from elements
mazeincoding Mar 31, 2026
608dc1a
Merge branch 'feature/separate-audio'
mazeincoding Mar 31, 2026
dc82826
refactor: move track pruning into a post-command reactor
mazeincoding Mar 31, 2026
b048b73
Merge branch 'refactor-selection-commands'
mazeincoding Mar 31, 2026
e579ae1
feat: migrate GPU renderer from WebGL to wgpu/WASM
mazeincoding Apr 1, 2026
8a1d37c
fix: align background blur with effect blur intensity scale
mazeincoding Apr 1, 2026
93cc5d5
fix: don't crash when GPU isn't available
mazeincoding Apr 1, 2026
f4b9f40
fix: update tooltip text for graph editor button
mazeincoding Apr 1, 2026
bd9ec02
refactor: split constants by domain and isolate timeline panel from core
mazeincoding Apr 1, 2026
57fc0fd
chore: sort root package.json scripts
mazeincoding Apr 1, 2026
3516bd6
fix: use published opencut-wasm package
mazeincoding Apr 1, 2026
1a8a1e8
refactor: update command execute methods to return CommandResult | un…
mazeincoding Apr 3, 2026
22725f7
chore: update opencut-wasm to 0.1.3
mazeincoding Apr 3, 2026
78c6c49
chore: remove transcription envs
mazeincoding Apr 4, 2026
cb99925
refactor: swap out manual tabs withthe shared tabs component in stickers
mazeincoding Apr 4, 2026
69da5be
style: tabs
mazeincoding Apr 4, 2026
1bd9fac
refactor: rewrite animation system to use bindings and scalar channels
mazeincoding Apr 5, 2026
0997466
fix: subscribe to playback time so keyframe button updates on frame c…
mazeincoding Apr 5, 2026
20235d0
chore: remove comment
mazeincoding Apr 5, 2026
44d8c4c
refactor: unify element updates into pipeline and centralize ripple
mazeincoding Apr 5, 2026
e622279
docs: document rust/apps architecture in AGENTS.md
mazeincoding Apr 5, 2026
c56d6f8
fix: preserve negative start times during timeline drag
mazeincoding Apr 5, 2026
dedb135
feat: graphs popover
mazeincoding Apr 5, 2026
fcc09e8
Merge branch 'temp'
mazeincoding Apr 5, 2026
ccd552a
chore: addition to last merge
mazeincoding Apr 5, 2026
0524361
refactor: use useShiftKey hook in bezier graph
mazeincoding Apr 5, 2026
964ac82
refactor: split presets into data definitions and storage store
mazeincoding Apr 6, 2026
2776ada
fix: whitespace
mazeincoding Apr 6, 2026
c411edb
fix: clean up
mazeincoding Apr 6, 2026
79df736
fix: clean up graph editor
mazeincoding Apr 6, 2026
e4b6709
refactor: split effects and masks into dedicated rust crates, introdu…
mazeincoding Apr 6, 2026
e43b859
fix: place new overlay tracks at the top of the timeline
mazeincoding Apr 6, 2026
f47e85c
fix: respect scale lock when editing keyframed scale
mazeincoding Apr 6, 2026
b8979c6
feat: select element on insert
mazeincoding Apr 6, 2026
93a0afd
fix: use line-height-based bounds for text elements
mazeincoding Apr 6, 2026
30709d7
fix: fix timeline width calculation for tick-based time
mazeincoding Apr 6, 2026
4f7d401
style: compact dropdown and context menu styling
mazeincoding Apr 6, 2026
cbd1b82
refactor: structured track layout per scene
mazeincoding Apr 7, 2026
d422b60
fix: clicking a selected element collapses multi-selection
mazeincoding Apr 7, 2026
532f050
changelog: add entry
mazeincoding Apr 7, 2026
f06a930
fix: convert media asset duration to ticks on insert
mazeincoding Apr 7, 2026
0d0d737
fix: one more
mazeincoding Apr 7, 2026
dbd68ff
refactor: gpu webgl fallback and batched command encoding
mazeincoding Apr 13, 2026
8230faf
feat: wasm compositor
mazeincoding Apr 13, 2026
108d3f4
feat: position animated independently per axis
mazeincoding Apr 13, 2026
5a2aaf3
feat: cinematic bars, diamond, heart, and star masks
mazeincoding Apr 13, 2026
2272598
feat: clipboard with keyframe paste
mazeincoding Apr 13, 2026
36efdf6
feat: expandable keyframe lanes in timeline
mazeincoding Apr 13, 2026
cad88ee
refactor: rendering pipeline
mazeincoding Apr 13, 2026
7d4e166
fix: text measurement, rotation handle, video cache races, playback sync
mazeincoding Apr 13, 2026
7feb3b2
changelog: 0.3.0
mazeincoding Apr 13, 2026
3d9d669
chore: bump opencut-wasm to 0.2.5
mazeincoding Apr 13, 2026
2c344fa
fix: use published opencut-wasm package
mazeincoding Apr 13, 2026
11ee0db
fix: stable background blur previews in settings
mazeincoding Apr 13, 2026
496f7d6
chore: remove filters tab from assets panel
mazeincoding Apr 13, 2026
270e295
feat: graph editor for flat keyframe segments
mazeincoding Apr 13, 2026
ba994d8
fix: linter
mazeincoding Apr 13, 2026
3191e03
changelog
mazeincoding Apr 13, 2026
d85566a
changelog: publish 0.3.0
mazeincoding Apr 13, 2026
e3d4f3f
Add support for basic SRT subtitle import to Captions panel (#756)
kcfancher Apr 14, 2026
24a0d10
changelog
mazeincoding Apr 14, 2026
6db7ad0
chore: hide preview grid guide until v0.4.0
mazeincoding Apr 14, 2026
5f2f00d
chore: hide logos sticker category
mazeincoding Apr 14, 2026
34c67ef
chore: fix comment
mazeincoding Apr 14, 2026
6de6c7f
refactor: move constants to domain modules
mazeincoding Apr 14, 2026
607eaea
fix: timeline element resizing
mazeincoding Apr 14, 2026
520c0b3
chore: remove unused import
mazeincoding Apr 14, 2026
5e6c26f
fix: keyframe removal state
mazeincoding Apr 14, 2026
8a54e5d
test: remove keyframe query
mazeincoding Apr 14, 2026
6aa4ffe
style: export button icon size
mazeincoding Apr 14, 2026
8d82ea9
feat: draft persistence on Form via persistKey
mazeincoding Apr 14, 2026
f1ed840
docs: remove features section
mazeincoding Apr 14, 2026
cd19a44
docs: update file structure to be accurate
mazeincoding Apr 14, 2026
b68bf00
docs: formatting
mazeincoding Apr 14, 2026
78a0a27
feat: editor feedback
mazeincoding Apr 14, 2026
f726d95
chore: add .tokeignore
mazeincoding Apr 14, 2026
91e1232
feat: transcription diagnostics
mazeincoding Apr 14, 2026
8fe6609
feat: add support for technical details in changelog entries
mazeincoding Apr 14, 2026
64588ce
docs: fill in v0.3.0 technical changelog entries
mazeincoding Apr 14, 2026
368a20d
changelog: fix date
mazeincoding Apr 14, 2026
3eccc2f
fix: copy to markdown formatting
mazeincoding Apr 14, 2026
1943a4d
feat: changelog now supports markdown within entries
mazeincoding Apr 14, 2026
eca13e3
changelog: update to be more accurate
mazeincoding Apr 14, 2026
3db30c7
fix: turbo
mazeincoding Apr 14, 2026
dc0a8e7
feat: graph editor supports multiple properties at once
mazeincoding Apr 14, 2026
1fa5442
chore: remove debugging throughout codebase
mazeincoding Apr 14, 2026
769a7e7
changelog: another accuracy fix
mazeincoding Apr 14, 2026
c839db9
fix: remove redundant "opencut" prefix from storage key
mazeincoding Apr 14, 2026
370944f
feat: new-release notice and colocate changelog under domain
mazeincoding Apr 15, 2026
3914ea9
fix: show changelog notice when stored version is missing or older
mazeincoding Apr 15, 2026
e10b0a3
tests: remove
mazeincoding Apr 15, 2026
ee37226
chore: force deployment
mazeincoding Apr 15, 2026
4e8b7d3
fix: skip unknown actions in keyboard shortcuts help
mazeincoding Apr 15, 2026
4f7dc5e
fix: remap split-element keybinding to split
mazeincoding Apr 15, 2026
f4bd689
chore: force deployment
mazeincoding Apr 15, 2026
2da93aa
changelog: rephrasing
mazeincoding Apr 15, 2026
6312fc5
fix: repair scene tracks broken by v23-to-v24 migration
mazeincoding Apr 15, 2026
ac43a5a
feat: move/resize multiple elements
mazeincoding Apr 15, 2026
8a3577d
review: fixes
mazeincoding Apr 15, 2026
0868d9c
tests: delete
mazeincoding Apr 15, 2026
d5c1b7b
fix: load dotenv before env validation in drizzle config
mazeincoding Apr 15, 2026
68f175d
fix: correct schema path in drizzle config
mazeincoding Apr 15, 2026
eb28942
fix: audio waveform height in timeline
mazeincoding Apr 15, 2026
8161de0
chore: formatting
mazeincoding Apr 15, 2026
66e4367
feat: history view in feedback popover
mazeincoding Apr 15, 2026
c46d288
feat: text / custom masks, fix preview pan, refactor selection
mazeincoding Apr 15, 2026
011f510
feat: clip volume line and timeline waveform improvements
mazeincoding Apr 17, 2026
794d4ae
fix: align LayerUniformBuffer to 16 bytes for WebGL compat
mazeincoding Apr 18, 2026
94eed96
chore: update opencut-wasm version to 0.2.6 in Cargo.lock
mazeincoding Apr 18, 2026
b1d0b10
fix: default audio waveform color from timeline theme
mazeincoding Apr 18, 2026
0387bd4
delete legacy folder
mazeincoding Apr 18, 2026
8bdc894
fix: migrate commands to CommandResult selection contract
mazeincoding Apr 18, 2026
9da365b
docs: add prerequisites for rust
mazeincoding Apr 19, 2026
729d105
fix: WebGL frame rendering and opencut-wasm 0.2.8
mazeincoding Apr 19, 2026
3e89d29
refactor: restructure files to their domains, new preview overlay sy…
mazeincoding Apr 20, 2026
148d38d
docs: ts conventions to agents.md
mazeincoding Apr 21, 2026
1582423
chore: delete ffmpeg public assets
mazeincoding Apr 21, 2026
75eebf5
fix: project loading thing
mazeincoding Apr 21, 2026
a709af0
chore: formatting
mazeincoding Apr 22, 2026
f5f31b4
refactor: migration run() and pure v1-to-v2 transform
mazeincoding Apr 22, 2026
1301d02
fix: wasm WebGL only until WebGPU is fixed
mazeincoding Apr 22, 2026
7428dc7
chore: bump opencut-wasm version
mazeincoding Apr 22, 2026
f1b45b4
chore: remove stale files
mazeincoding Apr 22, 2026
cceb835
perf: improve rendering performance by ~20x
mazeincoding Apr 22, 2026
0dffefd
fix: surface unsupported video codec on import, fix Input leaks
mazeincoding Apr 25, 2026
6a22a3e
refactor: centralize editor interaction state
mazeincoding Apr 25, 2026
eea6d43
fix: model editor time as wasm MediaTime ticks end-to-end
mazeincoding Apr 26, 2026
685d902
fix: follow-up to prev commit
mazeincoding Apr 26, 2026
e6c6193
fix: linter
mazeincoding Apr 26, 2026
0b7597b
refactor: split animation helpers by domain
mazeincoding Apr 26, 2026
56ca096
refactor: thinner hooks
mazeincoding Apr 26, 2026
6b1f38a
refactor: split animation helpers by domain
mazeincoding Apr 26, 2026
6daa696
fix: restore README header, badges, links, and star chart
mazeincoding Apr 26, 2026
6ec818f
chore: remove accidental file
mazeincoding Apr 26, 2026
d6622dc
chore: untrack cargo-tools files
mazeincoding May 2, 2026
a9b9cf6
chore: switch from biome to eslint + prettier; fix ton of lint issues
mazeincoding Apr 28, 2026
2ee0a44
refactor: unify element params
mazeincoding Apr 28, 2026
b8d08df
chore: cleanup
mazeincoding Apr 28, 2026
401cc35
refactor: animate params over time
mazeincoding Apr 29, 2026
6ea5a15
refactor: split mask snap dispatch
mazeincoding Apr 29, 2026
ae1292a
refactor: make mask renderer dispatch explicit
mazeincoding Apr 29, 2026
97f8d19
refactor: type mask handle identifiers
mazeincoding Apr 29, 2026
79dcec8
refactor: split builtin and freeform masks
mazeincoding Apr 29, 2026
99137fe
docs: capture mask rust migration notes
mazeincoding Apr 29, 2026
f66cdbf
fix: address review findings in masks substrate
mazeincoding May 1, 2026
23187b0
refactor: remove dead tangent handle variant
mazeincoding May 1, 2026
8b8d65b
refactor: collapse mask definition registry to a single keyed registry
mazeincoding May 1, 2026
7b942b3
chore: remove file
mazeincoding May 2, 2026
6423b35
chore: ignore migrations file
mazeincoding May 2, 2026
8ab3aeb
docs: move NOTES.md file
mazeincoding May 2, 2026
19f1086
Merge branch 'domain-import'
mazeincoding May 2, 2026
d1f4cb6
docs: fix readme
mazeincoding May 2, 2026
fbe3db7
chore: update copyright year
mazeincoding May 6, 2026
5ba6783
Merge opencut/main: fork opencut as new editor base
preston176 May 9, 2026
a4ca5c4
feat: transcript-driven timeline editing
preston176 May 9, 2026
4e712c8
docs: rewrite README without upstream-fork framing
preston176 May 9, 2026
7e7a4c0
feat: descript-style transcript panel
preston176 May 9, 2026
d1d8b39
chore: rebrand to OpenScript and remove marketing surfaces
preston176 May 9, 2026
af93c01
chore: remove placeholder logo and discord references
preston176 May 9, 2026
b6d754e
fix: repair production build — missing guards + object-param call sites
preston176 May 31, 2026
147deba
test: run editor-core tests under bun by instantiating real opencut-wasm
preston176 May 31, 2026
747cc59
feat: make transcript edits correct across undo, ripple, and reload
preston176 May 31, 2026
d5e0ba1
feat: transcript model/language pickers + inline word editing
preston176 May 31, 2026
eca676c
feat(wip): Descript model foundation — data model, mapping, ripple-op…
preston176 May 31, 2026
72e4087
docs: record Descript-model test-infra findings (EditorCore under bun…
preston176 May 31, 2026
2bba0c4
feat(wip): pure transcript delete transform + split helper
preston176 May 31, 2026
715beb8
feat(wip): pure restore transform + delete<->restore round-trip fidel…
preston176 May 31, 2026
fc70b9c
feat(wip): transcript edit plan functions + TranscriptEditCommand
preston176 May 31, 2026
fcf040d
feat(wip): v1->v2 transcript migrator (pure)
preston176 May 31, 2026
cf85408
docs: specify the remaining transcript panel wiring + in-app checklist
preston176 May 31, 2026
81a57cb
feat: wire transcript panel to the Descript edit model
preston176 Jun 1, 2026
d700f7e
feat: transcription robustness (Phase 3)
preston176 Jun 8, 2026
93c1bc6
fix: repair DB tooling + correct README setup (Phase 4)
preston176 Jun 8, 2026
819e5a6
chore: rebrand cleanup + desktop scaffold honesty (Phase 5)
preston176 Jun 8, 2026
c08fa6c
chore: remove dead placeholders + OpenCut leftovers (no replacements …
preston176 Jun 8, 2026
72be7b7
chore: rebrand remaining OpenCut references in rust/ crates
preston176 Jun 8, 2026
488cb28
fix: align root next/typescript with apps/web to fix CI build
preston176 Jun 8, 2026
f752c85
fix(ci): pin wasm-pack to v0.15.0 so wasm-opt builds on macOS
preston176 Jun 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 15 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
node_modules
.next
.git
.gitignore
*.md
.env*
!.env.example
.cursor
.vscode
diffs
docs
agent-transcripts
mcps
terminals
apps/web/.font-cache
89 changes: 89 additions & 0 deletions .github/CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
- Focusing on what is best not just for us as individuals, but for the overall
community

Examples of unacceptable behavior include:

- The use of sexualized language or imagery, and sexual attention or advances of
any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or email address,
without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement by opening an issue on the project's GitHub repository.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].

[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
198 changes: 198 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
# Contributing to OpenScript

⚠️ We are currently NOT accepting feature PRs while we build out the core editor.

If you want to contribute:

1. Open an issue first to discuss
2. Wait for maintainer approval
3. Only then start coding

Critical bug fixes may be accepted on a case-by-case basis.

Thank you for your interest in contributing to OpenScript! This document provides guidelines and instructions for contributing.

## Getting Started

### Prerequisites

- [Node.js](https://nodejs.org/en/) (v18 or later)
- [Bun](https://bun.sh/docs/installation)
(for `npm` alternative)
- [Docker](https://docs.docker.com/get-docker/) and [Docker Compose](https://docs.docker.com/compose/install/)
- Rust toolchain (only needed for `apps/desktop`)

> **Note:** Docker is optional, but it's essential for running the local database and Redis services. If you're planning to contribute to frontend features, you can skip the Docker setup. If you have followed the steps below in [Setup](#setup), you're all set to go!

### Setup

1. Fork the repository
2. Clone your fork locally
3. Navigate to the web app directory: `cd apps/web`
4. Copy `.env.example` to `.env.local`:

```bash
# Unix/Linux/Mac
cp .env.example .env.local

# Windows Command Prompt
copy .env.example .env.local

# Windows PowerShell
Copy-Item .env.example .env.local
```

5. Install dependencies: `bun install`
6. Start the development server: `bun run dev`

> **Note:** Web development uses the published `opencut-wasm` package by default, so a fresh clone does not need a local WASM build.
>
> If you are editing `rust/wasm`, run `bun run build:wasm`, then `cd rust/wasm/pkg && bun link`, then `cd ../../../apps/web && bun link opencut-wasm`.

### Desktop setup

Only needed if you're working on `apps/desktop`. See [`apps/desktop/README.md`](../apps/desktop/README.md) — it's a two-step process: Rust toolchain first via `script/setup-rust`, then desktop native dependencies via `apps/desktop/script/setup`.

## What to Focus On

**🎯 Good Areas to Contribute:**

- Timeline functionality and UI improvements
- Project management features
- Performance optimizations
- Bug fixes in existing functionality
- UI/UX improvements
- Documentation and testing

**⚠️ Areas to Avoid:**

- Preview panel enhancements (text fonts, stickers, effects)
- Export functionality improvements
- Preview rendering optimizations

**Why?** We're currently planning a major refactor of the preview system. The current preview renders DOM elements (HTML), but we're moving to a binary rendering approach similar to CapCut. This new system will ensure consistency between preview and export, and provide much better performance and quality.

The current HTML-based preview is essentially a prototype - the binary approach will be the "real deal." To avoid wasted effort, please focus on other areas of the application until this refactor is complete.

If you're unsure whether your idea falls into the preview category, feel free to create a GitHub issue!

## Development Setup

### Local Development

1. Start the database and Redis services:

```bash
# From project root
docker-compose up -d
```

2. Navigate to the web app directory:

```bash
cd apps/web
```

3. Copy `.env.example` to `.env.local`:

```bash
# Unix/Linux/Mac
cp .env.example .env.local

# Windows Command Prompt
copy .env.example .env.local

# Windows PowerShell
Copy-Item .env.example .env.local
```

4. Configure required environment variables in `.env.local`:

**Required Variables:**

```bash
# Database (matches docker-compose.yaml)
DATABASE_URL="postgresql://opencut:opencut@localhost:5432/opencut"

# Generate a secure secret for Better Auth
BETTER_AUTH_SECRET="your-generated-secret-here"
NEXT_PUBLIC_SITE_URL="http://localhost:3000"

# Redis (matches docker-compose.yaml)
UPSTASH_REDIS_REST_URL="http://localhost:8079"
UPSTASH_REDIS_REST_TOKEN="example_token"

# Development
NODE_ENV="development"
```

**Generate BETTER_AUTH_SECRET:**

```bash
# Unix/Linux/Mac
openssl rand -base64 32

# Windows PowerShell (simple method)
[System.Web.Security.Membership]::GeneratePassword(32, 0)

# Cross-platform (using Node.js)
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"

# Or use an online generator: https://generate-secret.vercel.app/32
```

5. Run database migrations: `bun run db:migrate`
6. Start the development server: `bun run dev`

### Desktop

Working on `apps/desktop`? See [`apps/desktop/README.md`](../apps/desktop/README.md) for setup. Web-only contributors can ignore this entirely.

## How to Contribute

### Reporting Bugs

- Use the bug report template
- Include steps to reproduce
- Provide screenshots if applicable

### Suggesting Features

- Use the feature request template
- Explain the use case
- Consider implementation details

### Code Contributions

1. Create a new branch: `git checkout -b feature/your-feature-name`
2. Make your changes
3. Run the relevant checks for the area you touched:

- Web changes: from `apps/web`, run `bun run lint` and `bun run format`
- Desktop changes: run `./apps/desktop/script/setup` if your environment isn't set up yet

4. Commit your changes with a descriptive message
5. Push to your fork and create a pull request

## Code Style

- We use ESLint for linting and Prettier for formatting
- Run `bun run format` from the `apps/web` directory to format code
- Run `bun run lint` from the `apps/web` directory to check for linting issues
- Follow the existing code patterns

## Pull Request Process

1. Fill out the pull request template completely
2. Link any related issues
3. Ensure CI passes
4. Request review from maintainers
5. Address any feedback

## Community

- Be respectful and inclusive
- Follow our Code of Conduct
- Help others in discussions and issues

Thank you for contributing!
70 changes: 70 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Bug report
description: Create a report to help us improve
title: "[BUG] "
labels: bug
body:
- type: input
id: Platform
attributes:
label: Platform
description: Please enter the platform on which you encountered the bug.
placeholder: e.g. Windows 11, Ubuntu 14.04
validations:
required: true
- type: input
id: Browser
attributes:
label: Browser
description: Please enter the browser on which you encountered the bug.
placeholder: e.g. Chrome 137, Firefox 137, Safari 17
validations:
required: true
- type: textarea
id: current-behavior
attributes:
label: Current Behavior
description: A concise description of what you're experiencing.
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected Behavior
description: A concise description of what you expected to happen.
validations:
required: false
- type: dropdown
id: recurrence-probability
attributes:
label: Recurrence Probability
description: How often does this bug occur?
options:
- Always
- Usually
- Sometimes
- Seldom
default: 0
validations:
required: true
- type: textarea
id: steps-to-reproduce
attributes:
label: Steps To Reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: true
- type: textarea
id: additional-context
attributes:
label: Anything else?
description: |
Links? References? Anything that will give us more context about the issue you are encountering!

Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
validations:
required: false
Loading
Loading