From b85dca7192c7ffabc399fe779ca0ecf4fd8a11da Mon Sep 17 00:00:00 2001 From: Andy Aylward Date: Sun, 28 Sep 2025 14:23:49 -0400 Subject: [PATCH] [posterize] integrate with new grayscale and sigma options --- .../posterize/pages/PosterizePage.module.css | 65 +++++++++++++++++++ src/apps/posterize/pages/PosterizePage.tsx | 36 +++++++++- src/apps/tracy/pages/TracyPage.tsx | 3 +- 3 files changed, 102 insertions(+), 2 deletions(-) diff --git a/src/apps/posterize/pages/PosterizePage.module.css b/src/apps/posterize/pages/PosterizePage.module.css index 5f0fa5b..8118eb0 100644 --- a/src/apps/posterize/pages/PosterizePage.module.css +++ b/src/apps/posterize/pages/PosterizePage.module.css @@ -54,6 +54,63 @@ text-align: center; } +.controls { + margin-bottom: 1.5rem; + display: flex; + flex-direction: column; + gap: 1rem; + text-align: left; +} + +.control { + display: flex; + flex-direction: column; + gap: 0.5rem; +} + +.control label { + font-size: 0.95rem; + font-weight: 500; + color: #333; + display: flex; + align-items: center; + gap: 0.5rem; +} + +.control input[type="checkbox"] { + margin-right: 0.5rem; +} + +.slider { + width: 100%; + margin-top: 0.5rem; + -webkit-appearance: none; + appearance: none; + height: 6px; + background: #ddd; + border-radius: 3px; + outline: none; +} + +.slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 18px; + height: 18px; + background: #007bff; + border-radius: 50%; + cursor: pointer; +} + +.slider::-moz-range-thumb { + width: 18px; + height: 18px; + background: #007bff; + border-radius: 50%; + cursor: pointer; + border: none; +} + .blurButton { padding: 0.75rem 2rem; background: #007bff; @@ -258,4 +315,12 @@ width: 100%; padding: 0.75rem; } + + .controls { + gap: 0.75rem; + } + + .control label { + font-size: 0.9rem; + } } \ No newline at end of file diff --git a/src/apps/posterize/pages/PosterizePage.tsx b/src/apps/posterize/pages/PosterizePage.tsx index 852d407..24f04de 100644 --- a/src/apps/posterize/pages/PosterizePage.tsx +++ b/src/apps/posterize/pages/PosterizePage.tsx @@ -16,6 +16,8 @@ const PosterizePage = () => { const [blurredImage, setBlurredImage] = useState(null) const [isLoading, setIsLoading] = useState(false) const [error, setError] = useState(null) + const [gray, setGray] = useState(false) + const [sigma, setSigma] = useState(8.0) const handleImageSelect = (base64: string) => { setSelectedImage(base64) @@ -47,7 +49,9 @@ const PosterizePage = () => { 'Content-Type': 'application/json', }, body: JSON.stringify({ - b64_png: selectedImage + b64_png: selectedImage, + gray: gray, + ...(gray ? {} : { sigma: sigma }) }), }) @@ -132,6 +136,36 @@ const PosterizePage = () => { {selectedImage && (
+
+
+ +
+ + {!gray && ( +
+ +
+ )} +
+