SnapOtter
d59be53709
feat(videos): add XLaunchVideo composition with all 7 scenes
2026-05-08 16:44:54 +08:00
SnapOtter
30ad822853
feat(videos): add X Launch scenes 5-7 (Privacy, Features, CTA)
2026-05-08 16:44:46 +08:00
SnapOtter
fe4309bad9
feat(videos): add ToolGalaxy hero composition with burst, orbit, and grid phases
2026-05-08 16:44:13 +08:00
SnapOtter
ccf4653b96
feat(videos): add X Launch scenes 1-4 (Hook, Terminal, ToolGrid, AI)
2026-05-08 16:43:54 +08:00
SnapOtter
85acce7e16
feat(videos): add PromoTeaser square and vertical compositions
2026-05-08 16:41:44 +08:00
SnapOtter
210bf9cded
feat(videos): add all 5 Promo Teaser scene components
2026-05-08 16:41:04 +08:00
SnapOtter
7ff96a6515
feat(videos): add ToolGrid and BeforeAfter components
2026-05-08 16:39:03 +08:00
SnapOtter
43fbb23f19
feat(videos): add LogoReveal and GitHubCTA components
2026-05-08 16:38:39 +08:00
SnapOtter
72b0077a57
feat(videos): add OneCommand hero composition with terminal-to-app morph
2026-05-08 16:38:28 +08:00
SnapOtter
818348beac
feat(videos): add AppMockup simplified UI component
2026-05-08 16:38:23 +08:00
SnapOtter
c0e769c1fa
feat(videos): add TerminalWindow component with macOS chrome
2026-05-08 16:38:18 +08:00
SnapOtter
41a3b9a97b
feat(videos): add RotatingTaglines and GradientMesh components
2026-05-08 16:38:03 +08:00
SnapOtter
1702492ef3
feat(videos): add FeaturePill, ProgressBar, NumberPunch components
2026-05-08 16:37:41 +08:00
SnapOtter
e3187f1740
feat(videos): add Terminal component with typing + output animation
2026-05-08 16:37:16 +08:00
SnapOtter
e8e5cfde39
feat(videos): add AppWindow component with macOS traffic light chrome
2026-05-08 16:37:00 +08:00
SnapOtter
ac33e4ac3c
feat(videos): add BackgroundMusic component with fade-in/fade-out
2026-05-08 16:35:31 +08:00
SnapOtter
89eec108fe
feat(videos): add PrivacyPromise hero loop with shield draw animation
2026-05-08 16:34:30 +08:00
SnapOtter
07003b7ba3
feat(videos): add ShieldIcon SVG component with evolvePath draw animation
2026-05-08 16:34:26 +08:00
SnapOtter
ac67b8471d
feat(videos): add AiMagicReel before/after transformation composition
2026-05-08 16:30:31 +08:00
SnapOtter
664605ff7f
docs: add Remotion promo videos implementation plan
...
16 tasks covering audio infrastructure, 10 new shared components,
3 compositions (X Launch 7 scenes, Product Demo 8 scenes, Promo Teaser
5 scenes + vertical variant), render script, and verification.
2026-05-08 16:28:51 +08:00
SnapOtter
54a73e1791
feat(videos): add PipelineFlow composition with batch mode
2026-05-08 16:24:28 +08:00
SnapOtter
136a4a0752
Merge branch 'feat/format-support-expansion'
...
# Conflicts:
# README.md
# apps/web/src/components/layout/app-layout.tsx
2026-05-08 16:21:11 +08:00
SnapOtter
755bbd83bf
Merge feat/color-blindness: add Color Blindness Simulation tool ( #49 )
2026-05-08 15:40:54 +08:00
SnapOtter
cb8684d796
test: remove JP2 and DDS from E2E exotic upload tests (Chromium rejects these extensions)
2026-05-08 15:40:23 +08:00
SnapOtter
bcdc4bdf82
docs: add color-blindness tool to API docs and update tool counts
2026-05-08 15:23:22 +08:00
SnapOtter
98b2e5a269
test: add Playwright e2e spec for color-blindness tool
2026-05-08 15:21:39 +08:00
SnapOtter
5aeafdfe60
feat: add color-blindness frontend settings component and registry entry
2026-05-08 15:20:12 +08:00
SnapOtter
eedc2443d6
feat: add color-blindness API route and integration tests
2026-05-08 15:18:38 +08:00
SnapOtter
5deb25c9e3
test: expand format decoder and detection unit tests for all new formats
2026-05-08 15:18:04 +08:00
SnapOtter
9720e6409e
test: expand new-formats integration tests with output matrix, resize, and preview tests
2026-05-08 15:17:18 +08:00
SnapOtter
93a246ce23
test: add QOI codec unit tests and E2E GUI format support tests
...
- QOI codec: 16 tests covering encode/decode round-trips, error handling, fixture validation
- E2E: 28 tests for format upload/resize, convert new outputs, dropdown verification,
HEIC-to-JPG flow, and exotic format upload acceptance
2026-05-08 15:16:06 +08:00
SnapOtter
0aeddbd994
feat: add color-blindness tool definition and i18n strings
2026-05-08 15:15:39 +08:00
SnapOtter
c4c9852afc
refactor: use named ColorBlindnessOptions interface in operation signature
2026-05-08 15:14:42 +08:00
SnapOtter
44608733c6
feat: add PPM/PGM/PBM CLI decoder fallback, QOI fixture and format-matrix entry
...
- Add ppm/pgm/pbm to CLI_DECODED_FORMATS with Sharp-first, ImageMagick fallback
- Create sample.qoi test fixture (10x10 solid color)
- Add QOI to format-matrix test FORMAT_SAMPLES
- Mark PPM/PGM/PBM as needsCliDecoder in tests (Sharp doesn't support them natively)
2026-05-08 15:12:23 +08:00
SnapOtter
0b6a970912
feat: add color blindness simulation image-engine operation
...
Add colorBlindness() operation with 8 simulation matrices (Vienot/Machado)
for protanopia, deuteranopia, tritanopia, protanomaly, deuteranomaly,
tritanomaly, achromatopsia, and blue cone monochromacy.
2026-05-08 15:11:36 +08:00
SnapOtter
bb6d26ffc6
docs: add comprehensive format support documentation
2026-05-08 00:26:56 +08:00
SnapOtter
e9fb35b7cd
test: add integration tests for new input and output formats
2026-05-08 00:24:45 +08:00
SnapOtter
bd6f80ff3e
test: add format fixtures for SVGZ, JP2, EPS, PPM, PGM, PBM, DDS, CUR, DPX, FITS, APNG
2026-05-08 00:22:22 +08:00
SnapOtter
80961c0187
feat: add JXL to all tool format selectors, expand convert with BMP/ICO/JP2/QOI, add server-side editor export
2026-05-08 00:19:19 +08:00
SnapOtter
390b5adb8c
feat: add QOI codec, format encoders (BMP/ICO/JP2/QOI), fix JXL output bug
2026-05-08 00:09:55 +08:00
SnapOtter
5c9fa2de49
feat: add decode pipelines for JP2, EPS, QOI, DDS, CUR, DPX, FITS, PPM, SVGZ, APNG
...
Add input decode support for 10 new image format families:
- JPEG 2000 (JP2/J2K): opj_decompress with ImageMagick fallback
- EPS: ImageMagick + Ghostscript delegate with 50MB size guard
- DDS: ImageMagick decode, first frame extraction
- CUR: reuses ICO decoder (structurally identical)
- DPX/Cineon: ImageMagick with sRGB colorspace conversion
- FITS: ImageMagick with normalize + sRGB conversion
- QOI: stub decoder (real codec deferred to Task 4)
- PPM/PGM/PBM/PFM: Sharp-native via libvips (no CLI decoder needed)
- SVGZ: gzip decompression with bomb protection before SVG sanitization
- APNG: accepted via extension, decoded as PNG first frame by Sharp
Updates magic bytes, MIME mappings, and frontend accept lists across
all file picker entry points (dropzone, tool page, file upload, editor).
2026-05-08 00:05:50 +08:00
SnapOtter
c0fb5896bb
feat: add RAW magic bytes to image-engine detect.ts and MIME entries for 17 new RAW formats
2026-05-08 00:00:39 +08:00
SnapOtter
5205f4a215
feat: expand camera RAW support with exiftool-first decode strategy
...
- Add CR3 (Canon) brand detection in ftyp magic bytes, returning "raw"
to route through the RAW decode pipeline
- Add magic bytes for Fujifilm RAF, Sigma X3F, and Minolta MRW formats
- Expand RAW_EXTENSIONS set from 6 to 24 formats (CR3, NRW, RAF, PEF,
3FR, IIQ, SRW, X3F, RWL, GPR, FFF, MRW, MEF, KDC, DCR, ERF, PTX)
- Rewrite decodeRaw() with two-tier strategy: ExifTool embedded JPEG
extraction (fast path) with ImageMagick+LibRaw fallback (full decode)
- Add ext parameter to decodeToSharpCompat/decodeRaw so temp files use
the original extension for correct format identification
- Pass fileExt from tool-factory when calling decodeToSharpCompat
- Add JXL, ICO, PSD, EXR, HDR, TGA MIME entries to CONTENT_TYPE_TO_EXT
2026-05-07 23:59:47 +08:00
SnapOtter
f66ce9add8
fix: wire crop, selection, and transform tool overlays into canvas
...
- CropOverlay: rendered in its own Layer when crop tool is active,
cropState auto-initialized when switching to crop tool
- SelectionOverlay: marching ants rendered for active selections,
selection tool mouse events dispatched through canvas handler
- TransformToolTransformer: rendered when transform tool is active
- Selection tool handlers wired for marquee-rect, marquee-ellipse,
lasso-free, lasso-poly, and magic-wand tools
- Active selection preview rect shown while dragging
2026-05-07 23:58:29 +08:00
SnapOtter
6f3792a9c7
feat: add ghostscript and openjpeg to Docker, fix ImageMagick policy for EPS
2026-05-07 23:54:25 +08:00
SnapOtter
1651d4558f
fix: use distinct Photoshop-standard icons and grouping for editor toolbar
...
- Marquee: BoxSelect (dotted rectangle) instead of Square
- Lasso: Lasso icon instead of Pen
- Transform: Maximize2 (corner arrows) instead of Move
- Gradient: Blend instead of ArrowUpRight
- Blur Brush: Droplet (water drop) instead of ScanLine
- Sharpen Brush: Triangle instead of ScanLine
- Smudge: Fingerprint instead of ScanLine
- Burn: Flame instead of Sun (was same as Dodge)
- Sponge: Droplets instead of Sun (was same as Dodge)
- Shape: Hexagon instead of Square (was same as Marquee)
- Reorder groups to match standard Photoshop toolbar layout
- Merge Crop + Eyedropper into one group
- Separate Eraser into its own group
2026-05-07 23:49:47 +08:00
SnapOtter
e99bae428a
fix: resolve 50+ bugs across editor store, canvas, panels, and tools
...
- Store: loadImage resets state, applyCrop updates sourceImageSize,
setTool clears stale cropState, layer ordering preserved across
layers, rotateCanvas/flipCanvas account for object dimensions,
trimCanvas implemented, resizeCanvas supports anchor positioning
- Canvas: crop overlay interactive, move tool drag events wired,
hand tool panning, stage ref effect mount-only, checkerboard
tracks pan offset, filter cache clearing
- Panels: hslToHex color fix for hue 240-360, adjustments single
setAdjustment call, curves draggingIndex after sort, history
panel fresh temporal reads, export transparent setting, canvas
resize dialog re-sync, hex input respects picker target
- Tools: text tool fixed positioning and event cleanup, shape tool
deferred addObject, selection mode wired to store, magic wand
tolerance controlled, eyedropper coordinate transform
- Options: dodge-burn/shape/clone/fill/gradient/pixel-brush use
proper store actions instead of raw setState
- Added 20+ store actions for tool settings
- Updated tests for corrected rotation/flip/trim behavior
- Excluded e2e-editor from vitest config
2026-05-07 23:47:08 +08:00
SnapOtter
1669e34909
Merge fix/129-face-enhancement-mediapipe: add mediapipe to upscale-enhance bundle
...
fix: add mediapipe to upscale-enhance bundle for face enhancement
The enhance-faces tool requires MediaPipe for face detection, but the
upscale-enhance feature bundle did not include mediapipe in its pip
packages. Added mediapipe to both amd64 and arm64 package lists.
Added 25 regression tests validating bundle dependency completeness.
Closes #129
2026-05-07 22:24:03 +08:00
SnapOtter
6fc767523c
fix: add mediapipe to upscale-enhance bundle for face enhancement
...
The enhance-faces tool requires MediaPipe for face detection, but the
upscale-enhance feature bundle did not include mediapipe in its pip
packages. Users who installed only the upscale-enhance bundle got
"Face detection requires MediaPipe" errors. Added mediapipe to both
amd64 and arm64 package lists, matching the pattern used by the
face-detection and photo-restoration bundles.
Also added feature-manifest.test.ts with 25 tests validating bundle
dependency completeness to prevent similar missing-dependency bugs.
Closes #129
2026-05-07 22:21:45 +08:00
SnapOtter
02089c2a35
Merge fix/landing-dark-theme-extension: prevent dark theme extensions from breaking landing page
2026-05-07 22:19:14 +08:00