흐리거나 작은 사진을 AI가 2배·4배로 키우면서 선명하게 다듬습니다. 파일이 서버로 전송되지 않습니다 — 이 페이지의 AI 모델(약 3MB)이 당신의 기기에서 직접 계산합니다. 횟수 제한·워터마크·가입 없음.
처음 실행할 때 AI 모델 약 3MB와 계산 라이브러리 약 1.5MB를 이 사이트에서 내려받습니다. 사진은 전송되지 않고 브라우저 안에서 계산됩니다.
작거나 흐린 사진을 AI(ESRGAN 계열 초해상도 모델)로 2배 또는 4배 키우면서 세부 묘사를 채워 넣습니다. 모델과 계산 라이브러리를 이 사이트에서 내려받아 브라우저의 GPU(WebGL)로 직접 계산하므로 사진이 외부로 나가지 않고, 횟수 제한·워터마크·가입도 없습니다. 이미 충분히 큰 사진은 효과가 작고, 인물 사진은 얼굴이 미묘하게 달라질 수 있으니 결과를 꼭 확인하세요.
사진을 올리고 배율을 고른 뒤 화질 높이기를 누르면 됩니다. 처음 한 번은 AI 모델을 내려받느라 몇 초가 걸리고, 그 다음부터는 바로 계산이 시작됩니다. 진행 막대에 퍼센트와 걸린 시간이 표시되고, 끝나면 원본과 결과를 좌우로 비교하는 슬라이더가 나타납니다. 가운데 손잡이를 끌어 보시면 어디가 얼마나 달라졌는지 바로 보입니다. 100% 보기를 누르면 결과를 실제 픽셀 크기로 보여 주니 세부 묘사가 얼마나 채워졌는지 확인할 때 쓰세요.
저장은 PNG(무손실)가 기본이고, 용량이 부담되면 JPG(품질 92)로 바꿀 수 있습니다. 파일 이름은 원본 이름 뒤에 _x2 또는 _x4가 붙습니다. 여러 장을 올리면 위에서부터 한 장씩 차례로 처리되며, 모두 끝나면 전부 저장(zip)으로 한 번에 받을 수 있습니다.
모든 계산은 브라우저 안에서 이루어집니다. 모델 파일을 이 사이트에 함께 올려두고 브라우저가 직접 내려받아 계산하기 때문에 사진이 외부 서버로 나가지 않습니다. 개발자 도구의 네트워크 탭을 열어 두고 실행해 보시면 이 사이트의 모델 파일 외에는 아무 요청도 없다는 걸 직접 확인하실 수 있습니다.
포토샵이나 그림판에서 사진을 두 배로 키우면 브라우저나 프로그램은 보간(interpolation)이라는 방법을 씁니다. 원래 픽셀 사이에 새 픽셀을 끼워 넣되 그 값은 주변 픽셀의 평균으로 채우는 방식입니다. 가장 단순한 최근접(nearest) 보간은 픽셀을 그대로 복제해서 계단처럼 각지고, 흔히 쓰는 이중선형(bilinear)·바이큐빅(bicubic) 보간은 부드럽게 섞어 주지만 대신 뿌옇게 번집니다. 어느 쪽이든 원본에 없던 정보는 만들어 내지 못합니다. 픽셀 수만 늘어날 뿐 선명함은 그대로거나 오히려 떨어집니다.
AI 업스케일(초해상도, super-resolution)은 접근이 다릅니다. 수만 장의 고해상도 사진과 그것을 일부러 줄인 저해상도 사진 쌍으로 신경망을 학습시켜서, "이런 흐릿한 패턴은 원래 이런 모양이었을 가능성이 높다"는 통계를 익히게 합니다. 그래서 확대할 때 머리카락의 결, 벽돌의 질감, 글자의 모서리처럼 원본에는 뭉개져 있던 디테일을 학습한 패턴으로 그려 넣습니다. 결과가 보간보다 훨씬 또렷해 보이는 이유가 이것입니다.
여기서 정직하게 짚어야 할 점이 있습니다. 그려 넣은 디테일은 "그럴듯한 추정"이지 실제로 촬영된 정보가 아닙니다. 풍경이나 질감에서는 추정이 틀려도 눈에 잘 띄지 않지만, 인물 사진에서는 눈매·입가·피부결처럼 사람이 민감하게 알아보는 부분이 미묘하게 달라질 수 있습니다. 가족 사진이나 증명용 사진처럼 얼굴이 중요한 경우에는 결과를 원본과 나란히 놓고 꼭 확인하시고, 신원 확인 목적의 문서에 쓰는 것은 권하지 않습니다. 비교 슬라이더를 넣어 둔 이유가 바로 이 확인을 쉽게 하기 위해서입니다.
이 도구가 쓰는 모델은 ESRGAN(Enhanced Super-Resolution Generative Adversarial Network) 계열의 RDN(Residual Dense Network) 구조로, UpscalerJS 프로젝트가 DIV2K라는 공개 고해상도 사진 데이터셋으로 학습해 배포하는 esrgan-medium 모델입니다. 2배용과 4배용 가중치가 따로 있고 각각 약 2.7MB로 매우 가볍습니다. 서버용 대형 모델(수백 MB)보다 표현력은 낮지만, 이 정도 크기여야 휴대폰 브라우저에서도 몇 초 안에 돌아갑니다. "medium"은 UpscalerJS가 제공하는 small·medium·large 중 속도와 품질의 균형점을 고른 것입니다.
모델은 사진을 한 번에 처리하지 않고 64×64 픽셀짜리 조각(패치)으로 잘라 하나씩 계산한 뒤 다시 이어 붙입니다. 조각 경계에 줄이 생기지 않도록 조각마다 2픽셀씩 겹쳐서 계산하고 겹친 부분은 잘라냅니다. 이렇게 하면 큰 사진도 메모리를 한꺼번에 많이 쓰지 않고, 조각 하나가 끝날 때마다 화면을 갱신할 틈이 생겨 진행률을 보여 드릴 수 있습니다.
저해상도 캡처 이미지 — 화면을 캡처했거나 웹에서 저장한 작은 이미지는 원본 자체가 작아서 조금만 키워도 픽셀이 드러납니다. 이런 이미지는 AI가 경계선과 질감을 채워 넣는 효과가 가장 잘 보입니다. 오래된 디지털카메라 사진 — 2000년대 초반 디카나 폰카로 찍은 640×480, 1024×768 사진은 요즘 화면에서 너무 작습니다. 2배만 키워도 보기 편해지고, 4배면 인화할 만한 크기가 됩니다. SNS·메신저를 거친 압축본 — 카카오톡이나 인스타그램을 거치며 줄어들고 압축된 사진은 JPEG 노이즈가 섞여 있는데, 이 모델은 그런 노이즈를 어느 정도 매끈하게 정리하면서 키워 줍니다. 그 밖에 게임 스크린샷, 오래된 웹 아이콘·로고 이미지, 작은 썸네일도 좋은 대상입니다.
심하게 흔들리거나 초점이 나간 사진 — 업스케일은 "작아서 흐린" 사진을 위한 것이지 "흔들려서 흐린" 사진을 고치는 도구가 아닙니다. 흔들림은 여러 픽셀에 걸쳐 상이 번진 것이라 키운다고 되돌아오지 않고, 오히려 번진 자국이 선명한 무늬로 굳어질 수 있습니다. 텍스트 문서·스캔본 — 글자는 사람이 아주 작은 차이도 알아봅니다. 모델이 획을 추정하다가 비슷한 다른 글자처럼 만들거나 획이 붙는 경우가 있어서, 문서 스캔본은 업스케일보다 대비를 높이는 편이 낫습니다. 특히 한글은 자모가 촘촘해 왜곡이 눈에 잘 띕니다. 이미 고해상도인 사진 — 요즘 폰으로 찍은 4000픽셀짜리 사진은 이미 충분히 세밀해서 AI가 더 그려 넣을 것이 별로 없습니다. 이 도구는 긴 변이 1600픽셀을 넘으면 먼저 1600으로 줄인 뒤 키우기 때문에, 그런 사진은 결과가 원본과 비슷하거나 오히려 손해일 수 있습니다. 극단적으로 작은 아이콘·픽셀아트 — 32픽셀짜리 도트 그림은 모델이 사진으로 오해해 도트를 뭉개 버립니다. 픽셀아트는 최근접 보간으로 정수배 확대하는 편이 맞습니다.
대부분의 경우 2배가 정답입니다. 결과 픽셀 수가 4배(가로 2배 × 세로 2배)로 늘어나는데도 계산은 4배보다 훨씬 빠르고, 모델이 그려 넣는 디테일의 양이 적어서 "AI가 지어낸 느낌"이 덜합니다. 800×600 사진은 1600×1200이 되어 모니터·태블릿에서 꽉 차게 보기 충분하고, 웹에 올리거나 발표 자료에 넣기에도 넉넉합니다.
4배는 원본이 정말 작을 때(긴 변 500픽셀 이하) 또는 인화·인쇄처럼 큰 결과물이 꼭 필요할 때 고르세요. 가로세로 각각 4배이므로 픽셀 수는 16배, 계산 시간도 대략 그만큼 늘어납니다. 1600픽셀짜리 사진을 4배로 키우면 6400×6400에 가까운 이미지가 나오는데, 이건 4천만 픽셀이 넘어서 브라우저 메모리를 수백 MB 쓰고 결과 PNG도 수십 MB가 됩니다. 폰에서는 브라우저가 탭을 강제로 닫아 버릴 수 있으니, 4배는 데스크톱에서 그리고 작은 원본에만 쓰시길 권합니다. 이 도구는 결과 한 변을 최대 8192픽셀로 제한하고, 그보다 커지는 경우 입력을 자동으로 줄입니다.
참고로 2배 결과를 다시 올려 2배 더 키우는 방법도 있습니다. 4배 한 번보다 "4배" 자체의 품질은 조금 떨어질 수 있지만 메모리 부담이 훨씬 적어서, 폰에서 큰 결과가 필요할 때 쓸 만한 우회로입니다.
| 원본 긴 변 | 2배 결과 | 4배 결과 | 권장 |
|---|---|---|---|
| ~500px | ~1000px | ~2000px | 4배도 무난 |
| 500~1000px | 1000~2000px | 2000~4000px | 2배 권장, 4배는 데스크톱 |
| 1000~1600px | 2000~3200px | 4000~6400px | 2배만 권장 |
| 1600px 이상 | 3200px (1600으로 줄인 뒤) | 6400px (1600으로 줄인 뒤) | 효과 적음, 필요할 때만 |
몇 년 전만 해도 신경망 계산은 서버의 GPU가 있어야 했습니다. 지금은 브라우저가 WebGL을 통해 기기의 그래픽 칩(GPU)에 직접 계산을 시킬 수 있고, 구글이 만든 TensorFlow.js 라이브러리가 신경망 연산을 WebGL 셰이더로 바꿔 실행해 줍니다. 이 도구는 TensorFlow.js와 그 위에 얹힌 UpscalerJS를 이 사이트에 함께 올려 두고, 사진을 올리는 순간에만 불러옵니다. 그래서 페이지 자체는 가볍고, 실제 계산은 전부 여러분의 GPU에서 일어납니다.
GPU를 쓸 수 없는 환경(아주 오래된 기기, 그래픽 가속이 꺼진 브라우저, 일부 가상 환경)에서는 자동으로 CPU 계산으로 바꿔 실행합니다. 동작은 똑같이 하지만 5~20배쯤 느리므로, 상단의 "계산 방식" 표시가 CPU로 나오면 작은 사진과 2배만 시도해 보세요.
원본 800×600 사진을 2배로 키우는 기준으로, 최근 데스크톱(독립 GPU 또는 M1 이후 맥)에서는 2~5초, 보통 노트북의 내장 그래픽에서는 5~15초, 최근 2~3년 내 스마트폰에서는 10~30초 정도입니다. 4배는 같은 사진에서 4~6배쯤 더 걸립니다. 처음 실행할 때는 여기에 모델·라이브러리 다운로드(약 4.5MB)와 GPU 셰이더 컴파일 시간이 몇 초 더 붙고, 두 번째부터는 바로 시작됩니다. 모바일에서는 2배를 권장합니다. 폰 브라우저는 탭 하나가 쓸 수 있는 메모리가 데스크톱보다 훨씬 적어서, 4배 큰 결과를 만들다 메모리가 부족하면 브라우저가 탭을 새로 고침해 버리는 경우가 있습니다.
계산 중에는 화면이 잠깐씩 멈칫할 수 있습니다. GPU가 바쁘면 브라우저의 화면 그리기도 같은 GPU를 기다리기 때문인데, 조각 하나가 끝날 때마다 화면 갱신 틈을 주도록 만들어 두어 진행률은 계속 갱신됩니다. 다른 탭으로 옮겨 가도 계산은 이어지지만, 일부 브라우저는 보이지 않는 탭의 GPU 사용을 늦추므로 이 탭을 앞에 두는 편이 빠릅니다.
"AI 사진 화질 개선"으로 검색하면 나오는 서비스는 대부분 사진을 자사 서버로 올려 처리합니다. 서버에는 훨씬 큰 모델이 있어서 결과 품질이 더 좋은 경우도 있지만, 대신 몇 가지를 감수해야 합니다. 무료로는 하루 몇 장으로 횟수를 제한하거나, 결과에 워터마크를 넣거나, 저해상도 미리보기만 주고 원본은 결제해야 받을 수 있게 하거나, 최소한 회원 가입을 요구하는 식입니다. 그리고 무엇보다 얼굴이 나온 개인 사진이나 공개 전 자료를 남의 서버에 올려야 합니다. 삭제 정책을 믿는 수밖에 없죠.
이 도구는 반대 방향을 택했습니다. 업로드가 없습니다. 모델을 여러분의 브라우저가 내려받아 기기 안에서 계산하니 사진이 이 페이지를 떠나지 않고, 그래서 횟수를 셀 이유도 워터마크를 넣을 이유도 가입을 받을 이유도 없습니다. 원본 해상도 그대로, 원하는 만큼, 로그인 없이 쓰시면 됩니다. 대가는 두 가지입니다. 모델이 서버용보다 작아서 아주 어려운 사진에서는 품질이 조금 못 미칠 수 있고, 계산을 여러분 기기가 하니 사양에 따라 시간이 걸립니다. 그 대신 인터넷이 느린 환경에서도 사진 크기와 상관없이 같은 속도로 동작한다는 장점이 있습니다.
사용하는 모델과 라이브러리는 모두 오픈소스입니다. UpscalerJS와 ESRGAN-medium 모델은 MIT, TensorFlow.js는 Apache-2.0 라이선스이며, 원본 파일과 라이선스 전문을 /tools/lib/README.txt에 그대로 두었습니다. 궁금하시면 직접 확인하실 수 있습니다.
아이폰 기본 촬영 형식인 HEIC(HEIF)는 대부분의 브라우저가 읽지 못합니다. 아이폰이라면 설정 → 카메라 → 포맷에서 높은 호환성을 고르면 JPG로 찍히고, 이미 찍은 사진은 사진 앱에서 공유 → 이미지 복사 후 붙여넣거나 파일 앱에서 JPG로 내보내 주세요. 맥에서는 미리보기에서 "내보내기"로 JPG나 PNG로 바꿀 수 있습니다.
먼저 상단의 계산 방식이 WebGL인지 확인하세요. CPU로 표시되면 브라우저에서 그래픽 가속이 꺼져 있거나 기기가 WebGL을 지원하지 않는 것으로, 크롬이라면 설정 → 시스템 → "가능한 경우 그래픽 가속 사용"을 켜 보세요. WebGL인데도 느리다면 사진이 크거나 4배를 고른 경우입니다. 2배로 바꾸거나, 먼저 이미지 용량 줄이기에서 긴 변을 800픽셀 정도로 줄인 뒤 올리면 훨씬 빨라집니다. 처음 한 번은 모델 다운로드와 GPU 준비에 몇 초가 더 걸리니, 첫 장이 유독 느린 건 정상입니다.
원본이 이미 고해상도이거나 이미 선명한 경우입니다. AI는 "없던 디테일"을 채우는 것이라, 원본에 디테일이 충분하면 채울 것이 없습니다. 특히 긴 변이 1600픽셀을 넘는 사진은 처리 전에 1600으로 줄이기 때문에 결과가 원본보다 조금 더 크거나 같은 크기로 나올 수 있습니다. 화면에 맞춰 축소된 비교 화면에서는 차이가 잘 안 보이니 100% 보기로 실제 픽셀을 확인해 보시고, 그래도 차이가 없다면 그 사진은 업스케일이 필요 없는 사진입니다.
결과 이미지가 너무 커서 브라우저에 허용된 메모리를 넘은 경우입니다. 4배를 골랐다면 2배로, 여러 장을 올렸다면 한 번에 몇 장씩만, 다른 탭들을 닫고 다시 시도해 보세요. 그래도 안 되면 원본을 먼저 줄인 뒤 올리는 것이 가장 확실합니다. 처리 중에 GPU 메모리를 많이 쓰므로, 폰에서는 배터리 절약 모드를 끄면 도움이 되기도 합니다.
PNG는 무손실이라 픽셀 수에 비례해서 커집니다. 저장 형식을 JPG로 바꾸면 화질은 거의 그대로이면서 용량이 5~10분의 1로 줄어듭니다. 투명 배경이 필요한 이미지가 아니라면 JPG가 실용적입니다. 더 줄여야 하면 이미지 용량 줄이기로 목표 용량에 맞추세요.
위에서 설명한 대로 AI가 그려 넣은 디테일은 추정입니다. 특히 눈·입 주변은 작은 변화도 인상을 바꿉니다. 원본과 결과를 슬라이더로 비교해 보고, 어색하면 2배로 낮추거나 원본을 쓰는 것이 좋습니다. 얼굴 복원에 특화된 모델은 따로 있지만 이 도구에는 포함되어 있지 않습니다.
네. 이 페이지는 사진을 어디에도 보내지 않습니다. 브라우저 개발자 도구(F12)의 네트워크 탭을 열고 실행해 보시면, 이 사이트에서 모델 파일(model.json, .bin)과 라이브러리를 내려받는 요청만 있고 사진 데이터가 나가는 요청은 없다는 것을 확인하실 수 있습니다. 한 번 내려받은 모델은 브라우저 캐시에 남아 다음에는 오프라인에서도 동작합니다.