v0.2.0: photo mosaic 2x resolution + version bump
- mosaic: resolution slider up to 192 cols (was 96), default 96, output canvas cap 3600px so higher density renders/saves at genuinely higher resolution Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -7,5 +7,5 @@
|
|||||||
"corePurpose": "",
|
"corePurpose": "",
|
||||||
"detailLevel": "standard",
|
"detailLevel": "standard",
|
||||||
"createdAt": "2026-06-01T04:16:09.722Z",
|
"createdAt": "2026-06-01T04:16:09.722Z",
|
||||||
"updatedAt": "2026-06-02T05:39:25.175Z"
|
"updatedAt": "2026-06-02T07:18:12.522Z"
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ai-photo-organizer",
|
"name": "ai-photo-organizer",
|
||||||
"version": "0.1.0",
|
"version": "0.2.0",
|
||||||
"description": "Local-first AI photo organizer — face recognition + EXIF based auto archiving",
|
"description": "Local-first AI photo organizer — face recognition + EXIF based auto archiving",
|
||||||
"author": "PhotoAI",
|
"author": "PhotoAI",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ export function MosaicView(props: {
|
|||||||
const poolRef = useRef<Tile[]>([])
|
const poolRef = useRef<Tile[]>([])
|
||||||
const targetImgRef = useRef<HTMLImageElement | null>(null)
|
const targetImgRef = useRef<HTMLImageElement | null>(null)
|
||||||
const [ready, setReady] = useState(false)
|
const [ready, setReady] = useState(false)
|
||||||
const [cols, setCols] = useState(48)
|
const [cols, setCols] = useState(96)
|
||||||
const [blend, setBlend] = useState(0.35)
|
const [blend, setBlend] = useState(0.35)
|
||||||
const [unique, setUnique] = useState(true)
|
const [unique, setUnique] = useState(true)
|
||||||
|
|
||||||
@@ -89,7 +89,8 @@ export function MosaicView(props: {
|
|||||||
sctx.drawImage(tImg, 0, 0, gridCols, gridRows)
|
sctx.drawImage(tImg, 0, 0, gridCols, gridRows)
|
||||||
const cells = sctx.getImageData(0, 0, gridCols, gridRows).data
|
const cells = sctx.getImageData(0, 0, gridCols, gridRows).data
|
||||||
|
|
||||||
const cellPx = Math.max(8, Math.round(1800 / gridCols))
|
// 출력 캔버스 상한 3600px → 해상도(열 수)를 높여도 타일이 뭉개지지 않고 고해상도로 저장
|
||||||
|
const cellPx = Math.max(8, Math.round(3600 / gridCols))
|
||||||
canvas.width = gridCols * cellPx
|
canvas.width = gridCols * cellPx
|
||||||
canvas.height = gridRows * cellPx
|
canvas.height = gridRows * cellPx
|
||||||
const ctx = canvas.getContext('2d')!
|
const ctx = canvas.getContext('2d')!
|
||||||
@@ -185,7 +186,7 @@ export function MosaicView(props: {
|
|||||||
<input
|
<input
|
||||||
type="range"
|
type="range"
|
||||||
min={16}
|
min={16}
|
||||||
max={96}
|
max={192}
|
||||||
step={2}
|
step={2}
|
||||||
value={cols}
|
value={cols}
|
||||||
onChange={(e) => setCols(Number(e.target.value))}
|
onChange={(e) => setCols(Number(e.target.value))}
|
||||||
|
|||||||
Reference in New Issue
Block a user