Skip to content

Add colour grading presets feature#870

Open
jaygaikar-09 wants to merge 18 commits into
magic-peach:mainfrom
jaygaikar-09:feat/colour-grading-presets
Open

Add colour grading presets feature#870
jaygaikar-09 wants to merge 18 commits into
magic-peach:mainfrom
jaygaikar-09:feat/colour-grading-presets

Conversation

@jaygaikar-09
Copy link
Copy Markdown
Contributor

@jaygaikar-09 jaygaikar-09 commented May 21, 2026

Description

Added colour grading preset support to the video editor with integrated preset handling and preview updates.

Related Issue

Closes #669

Type of Contribution

  • Bug fix
  • New feature
  • Documentation update
  • GSSoC contribution

Participant Info

  • GitHub username: jaygaikar-09
  • Contribution level : Intermediate

Screen Recording

Video.Project.2.1.mp4

Checklist

  • I have read the contribution guidelines
  • My changes follow the project structure
  • I have tested my changes in Chrome, Firefox, and Safari
  • bun run lint passes (no ESLint errors)
  • bunx tsc --noEmit passes (no TypeScript errors)
  • New interactive elements have aria-label / accessible names
  • No console.log statements left in
  • This PR is related to a valid issue
  • Screen recording attached above (required for UI/feature/design changes)

@vercel
Copy link
Copy Markdown

vercel Bot commented May 21, 2026

@jaygaikar-09 is attempting to deploy a commit to the magic-peach1's projects Team on Vercel.

A member of the Team first needs to authorize it.

@github-actions
Copy link
Copy Markdown
Contributor

👋 Thanks for your PR, @jaygaikar-09!

Welcome to Reframe — a browser-based video editor built for everyone 🎬

🟠 GSSoC'26 PR detected — thanks for contributing under GirlScript Summer of Code 2026!

What happens next

  1. 🤖 Automated checks — build & TypeScript typecheck will run automatically
  2. Vercel preview — a preview deployment will be created (requires maintainer authorization for fork PRs)
  3. 👀 Code review — a maintainer will review your changes
  4. 🚀 Merge — once approved, your PR will be merged!

Quick checklist

  • PR title follows Conventional Commits (e.g. feat: add dark mode)
  • Linked the issue this PR closes (e.g. Closes #123)
  • Tested the changes locally (bun run dev)
  • Build passes (bun run build)

Useful links

Happy coding! 🎉

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 21, 2026

⚠️ PR Format Issues — @jaygaikar-09

Please fix the following before your PR can be reviewed:

  • ⚠️ Use a conventional PR title. Examples:
    • feat: add dark mode support
    • fix: resolve aria label missing on slider
    • docs: add deployment guide to README

Push new commits after fixing — this comment will update automatically.

📖 CONTRIBUTING.md

@github-actions github-actions Bot added gssoc'26 GirlScript Summer of Code 2026 level:intermediate Intermediate level - 35 pts type:bug Bug fix type:design UI/UX design type:docs Documentation type:feature New feature level:advanced Advanced level - 55 pts labels May 21, 2026
@magic-peach
Copy link
Copy Markdown
Owner

Hey @jaygaikar-09! This PR has merge conflicts with main. Please rebase:

git fetch origin
git rebase origin/main
git push --force-with-lease

The color grading presets feature looks great — just need to resolve the conflicts and re-run CI!

Palakchoithani and others added 16 commits May 21, 2026 23:21
Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
* feat: show ffmpeg engine download progress

* fix: remove package-lock.json and unused prettier dev dependencies

* fix: wire FFmpeg load progress

* fix: restore ffmpeg progress message state

* feat: show ffmpeg engine download progress

* fix: remove package-lock.json and unused prettier dev dependencies

* fix: wire FFmpeg load progress

* fix: restore ffmpeg progress message state

* fix: restore video editor + ffmpeg modules

Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
* feat: add audio waveform to trim control

* fix: remove package-lock.json and unused prettier dev dependencies

* fix: repair TrimControl typecheck

* feat: add audio waveform to trim control

* fix: remove package-lock.json and unused prettier dev dependencies

fix: repair TrimControl typecheck

* fix: resolve trim validation icon/messages

* fix: resolve CI failures - fix TS error, remove unused imports, add package-lock.json to gitignore
Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
magic-peach#724)

* feat: integrate ffmpeg deshake filter for video stabilization

Signed-off-by: Vagventure <ankitverma0366@gmail.com>

* feat: add social media quick-action row to PresetSelector

Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
* feat: implement two-pass high-quality GIF export via FFmpeg

Signed-off-by: Vagventure <ankitverma0366@gmail.com>

---------

Signed-off-by: Vagventure <ankitverma0366@gmail.com>
* feat: add thumbnail strip for video frame navigation

* fix: clean up all merge conflicts, fix memory leak in videoSrc

* feat: add audio normalization, fix preview mute and speed

* fix: correct useEffect dependency array syntax in VideoPreview

* fix: export buildAudioFilter function

* fix: add recipe to useEffect deps, add track element to video

Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
…ne (magic-peach#794)

Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
* nvda-testing-01

* nvda-testing-02

Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
* fix(ui): hide number input spinners to prevent value visibility overlap (magic-peach#776)

Browser-native increment/decrement arrows on <input type='number'> fields
overlap with entered values in narrow containers, making text hard to read.

Fix: suppress the spinner UI using cross-browser Tailwind arbitrary-value classes:
  - [appearance:textfield]                        — Firefox
  - [&::-webkit-outer-spin-button]:appearance-none — Chrome/Brave/Edge/Safari
  - [&::-webkit-inner-spin-button]:appearance-none — Chrome/Brave/Edge/Safari

Affected inputs:
  - TrimControl.tsx   — Start (sec) and End (sec) number fields
  - PresetSelector.tsx — Custom Width (px) and Height (px) fields

Keyboard up/down arrow key stepping still works; only the visual spinner
arrows are removed, which fully resolves the overlap/readability bug.

Closes magic-peach#776

* feat(ui): add highlighted box around REFRAME title (magic-peach#775)

The REFRAME title blended into the background without clear visual
distinction. Wrap the h1 + subtitle in a styled container to make the
brand mark prominent and immediately recognisable.

Changes to src/components/VideoEditor.tsx:
- Wrap <h1>REFRAME</h1> and its subtitle <p> in a div with:
    border border-[var(--border)]   — respects light / dark mode border token
    border-l-4 border-l-film-600    — film-red left accent bar for brand identity
    bg-[var(--surface)]             — lifted surface so it reads off the page bg
    rounded-xl                      — consistent corner radius with card system
    px-5 py-3                       — breathing room around the text
    shadow-sm                       — subtle depth to separate from background
- aria-label added so screen readers announce the landmark correctly

The box reuses existing design tokens and film-600 brand colour, so it
adapts automatically to light, dark and high-contrast themes.

Closes magic-peach#775

Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
…ap (magic-peach#776) (magic-peach#778)

Browser-native increment/decrement arrows on <input type='number'> fields
overlap with entered values in narrow containers, making text hard to read.

Fix: suppress the spinner UI using cross-browser Tailwind arbitrary-value classes:
  - [appearance:textfield]                        — Firefox
  - [&::-webkit-outer-spin-button]:appearance-none — Chrome/Brave/Edge/Safari
  - [&::-webkit-inner-spin-button]:appearance-none — Chrome/Brave/Edge/Safari

Affected inputs:
  - TrimControl.tsx   — Start (sec) and End (sec) number fields
  - PresetSelector.tsx — Custom Width (px) and Height (px) fields

Keyboard up/down arrow key stepping still works; only the visual spinner
arrows are removed, which fully resolves the overlap/readability bug.

Closes magic-peach#776

Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
magic-peach#57) (magic-peach#772)

- Add min-h-[44px] to the export button to guarantee the minimum 44px
  touch target height on all screen sizes (WCAG 2.5.5 recommendation)
- w-full already present so button spans full container width on mobile
  (grid collapses to single column on screens < lg breakpoint)
- Also update ffmpeg.test.ts to match new buildAudioFilter(speed, normalizeAudio)
  signature introduced in upstream main

Closes magic-peach#57

Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
…ic-peach#751)

* feat(shortcut): add M key to toggle audio mute (magic-peach#173)

- Move M-key handler from AudioSpeedControl into useVideoEditor hook
  so the shortcut is guarded by ile (only fires when a video is loaded)
- Protect against text input focus (INPUT, TEXTAREA, contentEditable)
- Also guard against Ctrl/Meta/Alt modifiers to avoid conflicts
- Use setRecipe functional update (no stale-closure risk; no extra deps)
- Add visible M kbd badge on the mute toggle button for discoverability
- Add collapsible KeyboardShortcutsPanel in the right sidebar documenting
  both shortcuts: M (mute) and Ctrl+Enter (export)

Closes magic-peach#173

* fix(lint): remove redundant ul role and add missing useCallback deps

- VideoEditor.tsx: remove role='list' from <ul> (jsx-a11y/no-redundant-roles)
  ul already has an implicit list role; the explicit attribute is redundant
- useVideoEditor.ts: add loopMusic, musicFile, musicVolume, originalAudioVolume
  to handleExport dependency array (react-hooks/exhaustive-deps)

* fix(typecheck): update ffmpeg.test.ts for new buildAudioFilter signature

Upstream added normalizeAudio: boolean as a required second param to
buildAudioFilter. Update all test call sites to pass false (no normalization),
and add a new test case verifying the loudnorm filter is appended when
normalizeAudio is true.

Also fix stray '++' syntax corruption in presets.ts introduced during merge.

Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
Extends the existing exportEstimate.ts utility with a more accurate
file size estimation model.

Changes:
- Fix preset resolution lookup — previously always used customWidth/Height
  even when a named preset (1080p, 4K, etc.) was selected
- Replace 4-bucket CRF lookup with exponential curve fit to real H.264
  reference points (CRF 18 ≈ 8 Mbps, 23 ≈ 3 Mbps, 30 ≈ 0.6 Mbps)
- Fix speed scaling — was incorrectly dividing bitrate by speed;
  speed now only scales output duration
- Add sqrt-damped resolution multiplier for more accurate high-res estimates
- Add format overhead factor (webm ~15% smaller, mkv ~2% larger than mp4)
- Add audio track estimate (AAC 128 kbps)
- Add unit tests covering all estimation behaviours

Closes magic-peach#657
Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
* fix: remove duplicate file format text in upload area

* fix: add unique page titles for /privacy and /contact pages

---------

Co-authored-by: Akanksha Trehun <146705736+magic-peach@users.noreply.github.com>
@jaygaikar-09 jaygaikar-09 force-pushed the feat/colour-grading-presets branch from a3a09fb to 2adec63 Compare May 21, 2026 17:58
@jaygaikar-09
Copy link
Copy Markdown
Contributor Author

@magic-peach Now check

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gssoc'26 GirlScript Summer of Code 2026 level:advanced Advanced level - 55 pts level:intermediate Intermediate level - 35 pts type:bug Bug fix type:design UI/UX design type:docs Documentation type:feature New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: colour grading presets — one-click looks (Warm, Cool, Cinematic, B&W)