Skip to content

Update media-converter extension#25836

Merged
raycastbot merged 3 commits intoraycast:mainfrom
chihkang:ext/media-converter
Mar 5, 2026
Merged

Update media-converter extension#25836
raycastbot merged 3 commits intoraycast:mainfrom
chihkang:ext/media-converter

Conversation

@chihkang
Copy link
Contributor

@chihkang chihkang commented Feb 26, 2026

Description

Implemented a follow-up to align image defaults with review feedback by replacing the single mixed image quality preference with per-format preferences(JPG/WEBP/PNG/HEIC/TIFF/AVIF).

Added image-preferences.json as the canonical source and generate-image-preferences.mjs to generate/check image preference entries in package.json, removing hard-coded drift risk.
Refactored getDefaultImageQuality() to resolve values strictly by OutputImageExtension with per-format validation and safe fallback to DEFAULT_QUALITIES.

Also updated README with contributor instructions for npm run generate:image-preferences and npm run check:image-preferences.

Screencast

Checklist

- Merge branch \'contributions/merge-1772070829108\'
- Pull contributions
- Update README for image prefs
@raycastbot raycastbot added extension fix / improvement Label for PRs with extension's fix improvements extension: media-converter Issues related to the media-converter extension AI Extension platform: macOS platform: Windows OP is contributor The OP of the PR is a contributor of the extension labels Feb 26, 2026
@raycastbot
Copy link
Collaborator

raycastbot commented Feb 26, 2026

Thank you for your contribution! 🎉

🔔 @llfmaia @wattmalsh @samuelkraft @glypse you might want to have a look.

You can use this guide to learn how to check out the Pull Request locally in order to test it.

📋 Quick checkout commands
BRANCH="ext/media-converter"
FORK_URL="https://github.com/chihkang/raycast-extensions.git"
EXTENSION_NAME="media-converter"
REPO_NAME="raycast-extensions"

git clone -n --depth=1 --filter=tree:0 -b $BRANCH $FORK_URL
cd $REPO_NAME
git sparse-checkout set --no-cone "extensions/$EXTENSION_NAME"
git checkout
cd "extensions/$EXTENSION_NAME"
npm install && npm run dev

We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 10-15 business days.

@chihkang
Copy link
Contributor Author

Hey @glypse, the PR is all set — would you mind reviewing it and letting me know if it meets your expectations? Feel free to leave any feedback!

@chihkang chihkang mentioned this pull request Feb 26, 2026
5 tasks
@chihkang chihkang marked this pull request as ready for review February 26, 2026 02:24
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 26, 2026

Greptile Summary

This PR refactors image quality preferences from a single mixed preference to dedicated per-format preferences (JPG, WEBP, PNG, HEIC, TIFF, AVIF), eliminating the need for cross-format mapping heuristics. The implementation introduces image-preferences.json as a canonical config source and a generation script to keep package.json in sync, preventing configuration drift.

Key improvements:

  • Replaced defaultImageQualityPreset with format-specific preferences (defaultJpgQuality, defaultWebpQuality, etc.)
  • Added defaultAudioOutputFormat and defaultAudioQualityPreset for consistency across media types
  • Refactored getDefaultImageQuality() with strict validation using domain sets and exhaustive type checking
  • Introduced build scripts (npm run generate:image-preferences and npm run check:image-preferences) for maintaining preference integrity
  • Fixed video quality alignment issue in simple mode when changing output formats
  • Added fallback from .heic to .jpg on non-macOS platforms

Code quality:

  • Proper validation with domain sets prevents invalid preference values
  • Type-safe exhaustive checking ensures all formats are handled
  • Clear separation of concerns with config-driven approach
  • Well-documented contributor workflow in README

Confidence Score: 5/5

  • This PR is safe to merge with high confidence
  • The refactoring is well-architected with proper validation, type safety, and defensive programming. All format-specific preferences have proper domain validation and fallbacks. The config-driven approach with build scripts prevents drift. CHANGELOG follows required format. No logical errors, security issues, or violations of custom rules detected.
  • No files require special attention

Important Files Changed

Filename Overview
extensions/media-converter/package.json Replaced single image quality preference with per-format preferences (JPG/WEBP/PNG/HEIC/TIFF/AVIF) and added audio defaults, plus npm scripts for preference generation
extensions/media-converter/src/types/media.ts Refactored getDefaultImageQuality() with strict per-format validation using domain sets from config, proper type guards, and exhaustive format checking
extensions/media-converter/scripts/generate-image-preferences.mjs Added build script to generate and validate image preferences from canonical config, preventing drift between config and package.json
extensions/media-converter/src/config/image-preferences.json Introduced canonical config defining value domains and preference metadata for all image formats

Last reviewed commit: c1b67db

@0xdhrv 0xdhrv self-assigned this Feb 26, 2026
Copy link
Contributor

@glypse glypse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's a first quick batch of reviews, I still would like to have a good look at logic changes but no time for this right now.

Comment on lines +17 to +18
- Added `src/config/image-preferences.json` as the single source of truth for image preference metadata and value domains.
- Added `scripts/generate-image-preferences.mjs` to generate/check image preferences in `package.json`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be moved to API Changes since it isn't user-facing.

Comment on lines +48 to +54
#### For Contributors

Image preference definitions are maintained in `src/config/image-preferences.json` and synced into `package.json`.

- Run `npm run generate:image-preferences` to write image preference entries into `package.json`.
- Run `npm run check:image-preferences` to verify `package.json` is in sync with `src/config/image-preferences.json`.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move this to the very bottom of the README

}
],
"description": "Default quality preset used only when 'More Conversion Settings (Advanced)' is OFF."
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Didn't notice in previous PR: this should also have settings defaults for audio, then update all relevant logic.

@chihkang
Copy link
Contributor Author

@glypse
I’m a bit tied up and likely won’t be able to push the updates until next Monday, but I’ll address these items then and ping you once the changes are up. Thanks again!

@0xdhrv 0xdhrv marked this pull request as draft February 26, 2026 11:51
@chihkang
Copy link
Contributor Author

chihkang commented Mar 2, 2026

@glypse
The revisions are now complete. Thank you for reviewing the updated document.

@chihkang chihkang requested a review from glypse March 2, 2026 01:21
@chihkang chihkang marked this pull request as ready for review March 2, 2026 01:23
Copy link
Contributor

@glypse glypse left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This code isn't idiomatic but good enough to be merged for now. There will be a major rewrite in the future (switching the image conversion engine from FFmpeg to bundled-in sharp), but this is a good feature to give the users for now.

@raycast-extensions-bot raycast-extensions-bot bot added the Approved Approved by a user label Mar 5, 2026
Copy link
Contributor

@0xdhrv 0xdhrv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, approved ✅

@raycastbot raycastbot merged commit a7b19ee into raycast:main Mar 5, 2026
2 checks passed
@github-actions
Copy link
Contributor

github-actions bot commented Mar 5, 2026

Published to the Raycast Store:
https://raycast.com/leandro.maia/media-converter

@raycastbot
Copy link
Collaborator

🎉 🎉 🎉

We've rewarded your Raycast account with some credits. You will soon be able to exchange them for some swag.

LlaziG added a commit to LlaziG/raycast-extensions that referenced this pull request Mar 7, 2026
- chore(hugeicons-ui):Update hugeicons-ui: bump @hugeicons/core-free-icons and @hugeicons/react
- [Skills] Display Metadata from SKILL.md frontmatter (raycast#26101)
- Update CODEOWNERs (c2c1e0d)
- Add timely extension (raycast#25085)
- Fix: copy prompt/answer for selected message (raycast#25438)
- Update CODEOWNERs (46ecffc)
- Update todoist extension (raycast#26087)
- Dia: update @raycast/utils to 2.2.3 (raycast#26091)
- Update CODEOWNERs (3503a64)
- Add typewhisper extension (raycast#25733)
- Update CODEOWNERs (5ea5ef7)
- Add number-research extension (raycast#26060)
- Update trustmrr extension (raycast#26085)
- Update CODEOWNERs (40aabef)
- Add desktoprenamer extension (raycast#24610)
- Update tailwindcss extension (raycast#26067)
- Update CODEOWNERs (7a13ffd)
- Update time-awareness extension (raycast#25765)
- Update CODEOWNERs (6c50032)
- Update github-status extension (raycast#26063)
- Update anna-s-archive extension (raycast#26076)
- Update CODEOWNERs (46b879a)
- Update shopify-developer-changelog extension (raycast#25711)
- Update CODEOWNERs (22aa04d)
- Update weather extension (raycast#26074)
- Update kagi-news extension (raycast#25679)
- Update (raycast#26073)
- Update teak-raycast extension (raycast#25995)
- otp-inbox: Add Windows support (raycast#25441)
- Update CODEOWNERs (36e7a5f)
- Add trustmrr extension (raycast#26069)
- Update CODEOWNERs (d7c540c)
- Add doubao-tts extension (raycast#25705)
- GitHub: Improve auto-merge support (raycast#25256)
- Update CODEOWNERs (9f556d5)
- Update microsoft-edge extension add new feat to search and launch workspaces (raycast#25335)
- Add RouteMesh MCP server to model-context-protocol-registry (raycast#25960)
- feat: Add Advanced Batch Rename command with rule-based engine (raycast#25501)
- Update media-converter extension (raycast#25836)
- Update scheduler extension (raycast#26059)
- Docs: Update the utils docs
- [pipe-commands] Add data formatting utilities (raycast#25824)
- Update CODEOWNERs (5b660b2)
- Add hdri-library extension (raycast#25701)
- Update CODEOWNERs (2ea8b9c)
- Update ente-auth extension (raycast#25773)
- Update CODEOWNERs (b9b9e2b)
- Add grpcui extension (raycast#25697)
- Update CODEOWNERs (1730346)
- Update openrouter model search extension (raycast#26045)
- System Monitor: Fix stale temperature readings in menubar (raycast#26025)
- Update CODEOWNERs (4e3ff41)
- Fix truncated row values in pass extension (raycast#25843)
- Update CODEOWNERs (489aede)
- Add quickreferences-raycast extension (raycast#23629)
- Update CODEOWNERs (84a0a58)
- Update cleanshotx extension (raycast#25985)
- [ccusage] Hide "Usage Limits" details when using non-OAuth authentication (raycast#26009)
- Browser Bookmarks: Add support for Perplexity Comet browser (raycast#25874)
- Add Windows support (raycast#25882)
- Update bmrks extension (raycast#25952)
- Update CODEOWNERs (2faa166)
- Update radarr extension (raycast#25953)
- Update CODEOWNERs (d8b0e95)
- Update google-chrome extension (raycast#25939)
- Add PrusaConnect links to Prusa extension (raycast#25955)
- Update CODEOWNERs (9f8c615)
- Claude Code Launcher: Fix Ghostty PATH by using interactive shell (raycast#25976)
- Update aave-search extension (raycast#26016)
- uuid-generator: add Pack Type Id command (raycast#25800)
- Update CODEOWNERs (39fe5d1)
- [ccusage] Fix npx path resolution for fnm installs using XDG directories (raycast#26008)
- fix(arc): prevent duplicate windows when Arc is not running (raycast#25806)
- System Monitor: Add pin-to-display for menubar stats (raycast#25821)
- Update CODEOWNERs (ec57b0b)
- Add unified Wispr Flow extension (raycast#25218)
- Update shadcn ui extension (raycast#26011)
- Update CODEOWNERs (b354d33)
- feat(gumroad): add price filter and copy actions (raycast#25703)
- Update CODEOWNERs (134d6f9)
- Add raycast-ai-custom-providers extension (raycast#25180)
- Update CODEOWNERs (4accbb2)
- Add zo-raycast extension (raycast#25464)
- Update CODEOWNERs (227732f)
- Add job-dojo extension (raycast#25677)
- Update CODEOWNERs (eace185)
- Add wallhaven extension (raycast#25656)
- Update existing somafm extension: launch flow, refresh toasts, menu fallback (raycast#25187)
- Update CODEOWNERs (d0f014f)
- Add email-finder extension (raycast#24847)
- Update cut-out extension (raycast#25990)
- Update CODEOWNERs (1ef7a10)
- Add cut-out extension (raycast#25663)
- [Pokedex] Added support for Scarlet & Violet–style sprite artwork (raycast#25986)
- Discogs extension new functions (raycast#25686)
- Update nhk-program-search extension (raycast#25967)
- Update kimi extension (raycast#25962)
- Update CODEOWNERs (de246c1)
- Update shiori-sh extension (raycast#25944)
- fix(browser-bookmarks): fix slow initial load and open-in-browser reliability (raycast#25979)
- Update CODEOWNERs (0ad09cd)
- Add spacer extension (raycast#25652)
- [zotero] Fix Zotero 7+ / Better BibTeX compatibility (raycast#25634)
- Docs: update for the new API release
- added ARM64 sdk support (raycast#25966)
- Update CODEOWNERs (3051c01)
- Add Bird extension (raycast#25481)
- Update CODEOWNERs (7c4f8af)
- Add Lock Time extension (raycast#25255)
- Update CODEOWNERs (cdc0ceb)
- Add paste-safely extension (raycast#25951)
- Update CODEOWNERs (bd032c8)
- Add polars-documentation-search extension (raycast#25589)
- Update CODEOWNERs (564b0f2)
- Add DevContainer Features extension (raycast#25603)
- Update CODEOWNERs (2cdb8f6)
- Update gift-stardew-valley extension (raycast#25552)
- Update CODEOWNERs (f728891)
- Update Inkdrop extension (raycast#25529)
- Sourcegraph: Setup improvements (raycast#25950)
- [Skills] Add support for updating skills (raycast#25887)
- Update CODEOWNERs (cb956f6)
- Add search repositories feature for Github for Enterprise (raycast#25661)
- Fix/trakt manager user agent v2 (raycast#25825)
- Update `CricketCast` extension - add menu bar for scores (raycast#25942)
- Add Windows platform support to Goodreads extension (raycast#25936)
- idonthavespotify: Add Qobuz, Bandcamp, Pandora support & fix crash on unknown adapters (raycast#25937)
- Update singularityapp extension (raycast#25943)
- Update raycast-surge extension (raycast#25883)
- Update awork extension (raycast#25844)
- Update extend-display extension (raycast#25894)
- Update git-worktrees extension (raycast#25898)
- [Image Modification] Fix QSpace / QSpace Pro selection detection (raycast#25923)
- Update zeabur extension (raycast#25924)
- Update vietnamese-calendar extension (raycast#25917)
- [AzTU LMS] Fix Color & Add New Image (raycast#25912)
- Update CODEOWNERs (c2aba2b)
- Add Hop extension (raycast#25162)
- [Music Assistant Controls]:  Big update with many features (raycast#25860)
- [MXroute] set mail hosting status + open webmail link (raycast#25895)
- Update kitty extension (raycast#25856)
- Update CODEOWNERs (b73dbee)
- Addeed SDK implementation (raycast#25820)
- Update CODEOWNERs (66857dc)
- Add notilight-controller extension (raycast#25424)
- Update raycast-store-updates extension (raycast#25865)
- Update reader-mode extension (raycast#25872)
- Update CODEOWNERs (f8eeb0d)
- Update battery-optimizer extension (raycast#25509)
- fix: show window icons on first load in window-walker extension (raycast#25871)
- Update CODEOWNERs (7e705b7)
- Update t3 chat extension (raycast#25803)
- Update CODEOWNERs (19f337b)
- Update modify-hash extension (raycast#25816)
- Update CODEOWNERs (64e21d0)
- Add `ZeroSSL` extension - list certificates, view + validate csr (raycast#25861)
- [Cron Manager] Fix tasks disappearing from UI & permission handling (raycast#25845)
- Update CODEOWNERs (abe1d59)
- Add markdown-converter extension (raycast#24129)
- Update betaseries extension (raycast#25842)
- [Skills] Inline detail Panel (raycast#25658)
- Update CODEOWNERs (f1bac6d)
- Removed two extensions (raycast#25851)
- Update CODEOWNERs (53db7b3)
- Add shiori-sh extension (raycast#25757)
- Docs: update for the new API release
- feat(everything-search): allow custom cli arguments (raycast#24607)
- Update CODEOWNERs (93ff0be)
- Delete extensions/proton-pass-client directory (raycast#25841)
- update (raycast#25840)
- Update CODEOWNERs (d85419c)
- Add kaneo-for-raycast extension (raycast#25461)
- [Apple Reminders] Prevent accidental recurring reminders from AI (raycast#25746)
- [Apple Notes] Fix AI tool note ID mismatch, timeout, and search filtering (raycast#25720)
- fix: show window icons on first load in window-walker extension (raycast#25818)
- [Namecheap] fix error when no domain dns hosts (raycast#25827)
- Update youversion-suggest extension (raycast#25797)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI Extension Approved Approved by a user extension fix / improvement Label for PRs with extension's fix improvements extension: media-converter Issues related to the media-converter extension OP is contributor The OP of the PR is a contributor of the extension platform: macOS platform: Windows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants