자동
사진 전체에서 결함을 찾고 복원합니다.
아날로그 필름을 위한 카메라/스캐너 스캔과
현상·출력까지 전과정을 지원하는 macOS 앱
macOS 14.0 이상 · Apple Silicon과 Intel · Apache-2.0
negaflow는 스캐너로 스캔한 필름이나 디지털 카메라로 촬영한 필름을 불러와서 현상하는 macOS 앱입니다. 현상 엔진은 Chroma Engine, 먼지와 스크래치 복원 기능은 GrainMend라는 이름을 사용하며 독자 개발한 프로세스 전 과정을 담았습니다. 필름을 현상하고 보정하고 내보내는 과정을 앱 하나에서 끝냅니다.
현상 엔진
Chroma Engine은 Chromabase 모듈에 들어 있는 필름 현상 엔진입니다.
MAIN
자동 보정
필름 베이스는 별도 조작 없이 자동으로 측정되며, 네거티브는 포지티브로 현상됩니다. 직접 맞추려면 스포이드로 미노광 영역을 고르거나 RGB 값을 입력할 수 있습니다.
7종 미니랩 & 현상 타깃 룩
MAIN일반 현상PRINT프린터 ICC를 사용하는 출력HSNoritsu HS-1800SPFujifilm Frontier SP-3000F135Pakon F-135 PlusHRKodak Professional HR 500 PlusEXPIRED오래된 필름 복구PROFILES번들 스캐너 프로파일 15개 · realOnly기본 현상은 MAIN과 수동 보정이며, 자동 톤, 자동 화이트 밸런스, 자동 레벨과 자동 색상은 직접 실행했을 때만 적용됩니다.
출력에는 sRGB, Display P3, Adobe RGB나 사용자 RGB ICC를 쓸 수 있습니다.
HS, SP, F135, HR은 오랫동안 현상소 워크플로우에서 쓰인 대표적인 랩 스캐너를 현상 타깃으로 삼은 것입니다.
장비 이름은 현상 타깃을 식별하기 위해서만 사용합니다. 제조사의 소프트웨어나 내부 알고리즘 구현, 호환 모드, 제휴 또는 후원을 뜻하지 않습니다.
결함 복원
GrainMend RGB는 적외선 채널 없이도 먼지, 핀홀, 스크래치와 유제 손상을 찾아 복원하는 독자 개발 소프트웨어 방식입니다.
GrainMend RGB
가이드·브러시·자동 모드는 모두 Mac에서 로컬로 처리됩니다. 처리 시간은 사진 크기, 선택 영역과 Mac에 따라 달라집니다.
사진 전체에서 결함을 찾고 복원합니다.
사용자가 지정한 영역 안에서 결함을 찾습니다.
복원할 자리를 직접 칠합니다.
지정한 위치의 픽셀을 다른 곳에 복제합니다.
GrainMend RGB는 적외선 채널 없이 RGB 이미지에서 결함 후보를 찾습니다. 복잡한 무늬에서는 오검출이 생길 수 있어 마스크와 복원 결과를 직접 확인할 수 있습니다.
검출 마스크와 복원 결과를 사람이 직접 확인하고, 필요한 영역을 다시 고칠 수 있습니다.
각 GrainMend RGB 레이어는 강도를 조절하고 마스크를 확인하거나, 따로 끄고 지울 수 있습니다.
오검출이 생길 가능성이 높으면 사용자에게 알립니다.
GrainMend IR은 스캐너 플러그인이 적외선 채널을 제공할 때 선택할 수 있는 보조 방식입니다. IR 검출 결과는 GrainMend RGB와 같은 편집 기록에 추가됩니다.
GrainMend RGB는 하드웨어 적외선 클리닝과 별개로 독자 개발한 소프트웨어 방식입니다. GrainMend IR은 스캐너의 적외선 채널을 사용하지만 Digital ICE, iSRD 또는 SRDx의 구현이나 호환 모드가 아닙니다.
인화·출력
암실에서 인화지 위에 하던 일을 화면에서 합니다. 용지와 여백, 레이아웃을 잡으면 보이는 그대로 인화 파일이 됩니다.
시아노타입, 유리건판, 젤라틴은 그 느낌을 살린 표현입니다. 실제 약품이나 건판, 인화지를 측정해서 만든 것은 아닙니다.
sRGB, Display P3, Adobe RGB와 사용자 지정 RGB 프린터 ICC 프로파일을 지원합니다.
암실 인화처럼 여백을 잡을 수 있고, 16-bit TIFF로 고해상도 인화 파일을 만듭니다.
색상 연산 파이프라인
감마 변환 전 32-bit Float Linear 공간에서 현상과 톤을 계산하여 계조 손실과 클리핑을 최소화합니다.
선형 투과율과 미노광 마스크 측정값으로 정밀 밀도 D = log₁₀(Dmin/T)를 계산합니다.
4개 기준점(검정점, 18% 회색, 흰색, 여유분) 기반 역함수가 존재하는 전용 인화 응답 곡선을 적용합니다.
필름 물성, 스캔 광원, 스캐너 룩을 서로 섞지 않고 독립된 단계로 처리합니다.
화면 표시와 내보내기 단계에서 sRGB, Display P3, Adobe RGB와 사용자 지정 RGB 프린터 ICC 프로파일로 변환합니다.
R/G/B 각 채널당 16-bit(총 48-bit, 281조 색상) 입력과 출력을 지원하여 보정을 많이 하더라도 계조 뭉개짐(Banding)과 색 손실을 크게 줄입니다.
48-bit RGB 입출력과 32-bit Float 연산을 함께 써서, 필름 아카이빙과 대형 인화에 필요한 여유를 남깁니다.
입력 워크플로우
RAW/TIFF 파일 가져오기를 지원합니다. 백라이트 색온도와 미노광 베이스를 분리해 계조를 고르게 현상합니다.
negaflow-scanner-sane 독립 프로세스 플러그인으로 SANE 스캐너를 연결합니다. 장치와 백엔드가 지원하고 플러그인이 확인한 경우 16-bit TIFF로 가져옵니다.
필름 프로파일
번들에는 직접 촬영한 필름 자료에서 만든 스캐너 프로파일 15개가 들어 있습니다. 프로파일에 기록된 이미지 관측값은 모두 928개이며, 전부 realOnly 상태입니다.
realOnly는 실제 스캔 자료를 바탕으로 만든 프로파일이며 현재도 개발·보완하고 있다는 뜻입니다. 앞으로 더 다양한 필름과 장비에서 얻은 스캔 자료를 추가로 제공하고, 그 자료를 바탕으로 프로파일의 범위와 완성도를 계속 높일 예정입니다.
스캐너 이름만 보고 프로파일을 자동으로 적용하지 않습니다. 사용자가 직접 골라야 합니다. 파일과 목록의 SHA-256도 함께 제공합니다.
928장은 각 프로파일의 관측값을 더한 수치입니다. 같은 필름이 여러 장비에 중복 집계될 수 있으므로 서로 다른 사진 928장을 뜻하지는 않습니다. 다만 이 928건은 스캔본을 한 장씩 직접 확인하고 오검출이 있는 파일을 걸러낸 결과입니다. 프로파일은 그렇게 남은 자료를 실측해서 만들었습니다.
기능 비교
negaflow는 필름 현상, 결함 복원, 인화와 내보내기를 한곳에서 처리하는 독립 실행 macOS 앱입니다. 아래 표는 negaflow의 현재 기능을 설명합니다. Negative Lab Pro, FilmLab, Negbase, SilverFast, VueScan 등 다른 제품의 기능과 가격, 파일 처리 방식은 버전에 따라 달라집니다.
| 기능 | negaflow | 다른 필름 작업 도구 · 현재 제품 문서 확인 |
|---|---|---|
| 가격과 라이선스 | 무료, Apache-2.0 오픈소스. 구독도 체험판 제한도 없고 소스를 읽을 수 있음 | 무료, 유료 구매와 구독 방식이 제품마다 다름 |
| 실행 방식 | 독립 실행 macOS 앱. 불러오기·현상·복원·인화·내보내기를 한곳에서 | 플러그인, 독립 실행 앱, 스캐너 소프트웨어 등 실행 방식이 제품마다 다름 |
| 필름 베이스(오렌지 마스크) 측정 | 공간 분석(FilmBaseEstimator) 자동 측정, 스포이드, RGB 수동 입력 | 필름 베이스 처리 방식은 제품마다 다르므로 해당 문서를 확인해야 함 |
| 먼지·스크래치 복원 (GrainMend) | 확인 가능한 마스크를 쓰는 RGB 복원, 플러그인이 제공할 때 선택 가능한 IR 경로 | RGB 복원과 하드웨어 IR은 서로 다른 방식이며 지원 여부도 제품마다 다름 |
| 원본 및 메타데이터 보존 | 비파괴 편집, BagIt 아카이브 규격, SHA-256 검증 | 원본과 사이드카 처리 방식은 제품마다 다르므로 사용 전에 확인해야 함 |
| 필름 롤 단위 EXIF 기록 | 카메라·렌즈·필름·노출 기록을 EXIF에 자동 합성해 내보내기 | 메타데이터 항목과 내보내기 방식은 제품마다 다름 |
| macOS 네이티브 가속 | Metal & Core Image 32-bit 부동소수점 처리 | 처리 방식과 하드웨어 가속 지원은 플랫폼과 제품마다 다름 |
가이드
카메라 스캔은 렌즈, 정렬과 필름 평탄도가 맞으면 빠르고 세밀하게 작업할 수 있습니다. 장비를 맞추고 RAW를 현상으로 넘기는 순서입니다.
RAW로 찍는 카메라, 필요한 배율에 맞는 접사 렌즈, 필름 홀더, 라이트박스, 카피 스탠드나 삼각대가 필요합니다. 접사링과 벨로우즈도 쓸 수 있지만 실제 촬영 배율에서 모서리 선명도와 화면 평탄도를 확인해야 합니다.
밝기가 고르고 확산된 광원을 사용합니다. CRI 95 이상과 5000~5500K는 흔한 출발점일 뿐 색 정확도를 보장하지는 않습니다. 촬영 전에 플리커와 줄무늬를 확인하고 셔터 속도를 조정합니다.
센서면과 필름면이 평행해야 네 모서리 초점이 같이 맞습니다. 라이트박스에 작은 거울을 올리고 라이브뷰로 보면서, 렌즈 반사상이 화면 정중앙에 오도록 카메라를 조정하는 방법이 가장 정확합니다. 수평계는 삼각대 컬럼이 수직일 때만 의미가 있습니다.
필름이 휘면 가장자리 초점이 어긋납니다. 먼저 필름 홀더로 평평하게 잡고, 유리를 쓸 때는 반사와 뉴턴링이 생기지 않는지 실제 필름으로 확인합니다.
베이스 ISO에서 시작하고, 렌즈가 가장 선명한 조리개를 실제로 확인합니다. 보통 f/5.6~f/8이 출발점입니다. 라이브뷰 확대 수동 초점과 릴리즈 또는 타이머를 쓰고, RAW 히스토그램의 밝은 쪽이 잘리지 않게 노출합니다.
RAW를 negaflow로 불러오면 필름 베이스를 알아서 찾습니다. 밝기 분포에서 이어진 영역을 묶고 퍼포레이션이나 홀더, 필름 밖 백라이트는 걸러 냅니다. 결과가 마음에 안 들면 스포이드로 미노광 부분을 찍거나 RGB 값을 직접 넣습니다.
가이드
커브 하나 뒤집어서 나온 색이 탁한 데는 이유가 있습니다. 오렌지 마스크를 나눠 내고, 선형에서 현상하고, 인화 곡선을 씌우는 세 가지가 각각 필요합니다.
오렌지 마스크는 화면 전체에 걸린 필터입니다. 사진 안쪽이 아니라 미노광 부분에서 재야 그 컷의 색이 마스크에 섞이지 않습니다. negaflow는 밝기 분포에서 이어진 영역을 찾아 자동으로 잡고, 스포이드와 RGB 직접 입력도 됩니다.
마스크는 투과율이라 선형에서 나눗셈으로 빠집니다. D = log₁₀(Dmin/T). 감마가 걸린 8비트 이미지에서 빼면 채널이 서로 어긋나고, 흔히 보는 색 틀어짐이 여기서 나옵니다.
감마를 씌운 다음 현상하면 어두운 쪽 계조가 먼저 뭉갭니다. negaflow는 32-bit Float 선형에서 현상과 톤 계산을 끝내고 마지막에 출력 색공간으로 넘깁니다.
네거티브에는 검정도 흰색도 정해져 있지 않습니다. 원래 인화지가 정하던 몫입니다. 검정점·18% 회색·흰색을 기준으로 잡은 곡선을 씌워야 사진으로 보입니다.
베이스 값은 같은 광원에서 찍은 한 롤에 공통입니다. 컷마다 따로 잡으면 롤 안에서 톤이 흔들립니다. 한 번 잡은 값을 전체에 물리고 컷별로는 노출만 손봅니다.
현상 타깃은 서로 다른 결과를 고르는 룩이며 특정 랩 스캐너의 소프트웨어나 결과를 복제한 것이 아닙니다. 편집을 이어가려면 16-bit TIFF, 바로 사용할 파일은 롤 정보를 EXIF에 넣은 JPEG로 내보냅니다.
프로 파이프라인 & 생산성
선택한 현상 항목만 다른 사진에 복사하고, 키보드로 값을 미세 조정할 수 있습니다.
컬러 네거티브, 포지티브 슬라이드, 흑백 네거티브와 포지티브를 각 필름 유형에 맞는 경로로 처리합니다.
필름 베이스 측정값과 선택한 광원 프로파일을 따로 기록합니다. 자동 측정 대신 스포이드나 RGB 값을 사용할 수도 있습니다.
한 사진의 선택한 보정값을 같은 롤의 사진에 복사한 뒤, 필요한 사진만 따로 조정할 수 있습니다.
고급 정밀 도구 & 라이브러리
외장 하드나 NAS가 해제된 상태에서도 라이브러리 썸네일과 미리보기 렌더링을 즉시 확인합니다.
파일명, 폴더, 롤, 필름, 카메라, 렌즈, 키워드와 날짜를 검색하고 평점·작업 상태로 필터링합니다.
고정한 IT8.7/1 이미지와 기준 파일에서 RGB, Lab과 DeltaE00을 기록합니다. 실제 스캐너 정확도는 해당 장치와 물리 타깃을 따로 측정해야 합니다.
부분 대비, 선명도, 노이즈 감소와 필름 그레인을 각각 조절합니다.
세피아와 셀레늄 조색에서 어두운 영역과 밝은 영역의 색조, 강도를 조절합니다.
플러그인이 보고한 경우에만 광원, 해상도, bit depth, 스캔 영역, 노출과 IR 제어를 표시합니다.
웹용, 인화용 프리셋과 {film}_{date}_{roll}_{num} 등 동적 파일명 규칙을 자유롭게 설정합니다.
macOS 라이트/다크 모드를 그대로 따라가며 네이티브 UI 접근성 표준을 지킵니다.
앱 화면
01
롤, 폴더, 컬렉션, 별점, 스택과 가상 사본
negaflow-scanner-sane을 사용합니다. 스캔한 결과는 라이브러리에서 바로 확인할 수 있습니다.
GitHub ↗
02
현상 엔진은 Chroma Engine, 먼지와 스크래치 복원 기능은 GrainMend라는 이름을 사용하며 독자 개발한 프로세스 전 과정을 담았습니다. 번들에는 직접 촬영한 필름 자료에서 만든 스캐너 프로파일 15개가 들어 있습니다.
03
JPEG와 16-bit TIFF 내보내기, ICC 프로파일과 인화 레이아웃
04
단축키, 폴더 경로, 프리셋, 보정까지 원하는 대로 바꿔서 쓸 수 있습니다.
기본 사용 순서
스캐너 플러그인
negaflow-scanner-sane은 negaflow의 스캐너 불러오기에 사용하는 플러그인입니다.
스캐너 지원
알려진 SANE 1.4 대상과 negaflow-scanner-sane이 처리하는 경로입니다.
| 스캐너 계열 | SANE 백엔드 | SANE 1.4 상태 | 플러그인 처리 |
|---|---|---|---|
| Plustek OpticFilm 7200, 7200 v2, 7200i, 7300, 7400 v2, 7500i, 7600i | genesys |
Complete | 필름 전용 스캐너 경로 |
| Plustek OpticFilm 7400 v1 | genesys |
지원표에는 Complete지만 기종별 보정은 SANE 1.4.0 이후 반영됨 | capability 기반 경로, stock 1.4.0 실기 결과 미검증 |
Plustek OpticFilm 8100, USB 07b3:130c |
genesys |
Complete | 필름 전용 스캐너 경로 |
Plustek OpticFilm 8100, USB 07b3:1824 |
없음 | Unsupported | 사용 가능한 장치로 처리하지 않음 |
Plustek OpticFilm 8200i, USB 07b3:130d |
genesys |
Complete | 필름 전용 스캐너 경로 |
Plustek OpticFilm 8200i, USB 07b3:1825 (GL128) |
없음 | Unsupported | 사용 가능한 장치로 처리하지 않음 |
| Plustek OpticFilm 120, 120 Pro, 135, 135i, 9000i Ai | 없음 | Unsupported | 사용 가능한 장치로 처리하지 않음 |
| Epson Perfection V700/V750 (GT-X900), V800/V850 (GT-X980) | epson2 |
Good | 보고된 경우 투과 소스와 위치 지정 플랫베드 영역 사용 |
| Nikon Coolscan LS-2000, LS-40 ED, LS-50 ED, LS-4000 ED, LS-8000 ED | coolscan3 |
기종에 따라 Complete~Minimal | 필름 전용 스캐너 경로 |
| Nikon Coolscan LS-5000 ED | coolscan3 |
SANE 1.4 기준 미검증, LS-50과 비슷하게 동작할 수 있음 | 필름 전용 스캐너 경로 |
| Nikon Coolscan LS-20, LS-30, LS-1000 | coolscan |
기종별로 다름 | SCSI 전용 |
| Nikon Coolscan LS-9000 ED | 없음 | Unsupported | 사용 가능한 장치로 처리하지 않음 |
| Reflecta ProScan/CrystalScan/DigitDia and PIE PowerSlide | pieusb, 구형 SCSI는 pie |
기종과 모델 번호에 따라 다름 | 보고된 옵션만 사용 |
| Pacific Image PrimeFilm XA, XAs, XA Plus | 없음 | Unsupported | 사용 가능한 장치로 처리하지 않음 |
| 그 밖의 투과 원고용 플랫베드·필름 스캐너 | 백엔드별로 다름 | 기종별로 다름 | 기능 보고 기준, 모델명 fallback 없음 |
같은 제품명을 가진 모든 장치의 작동을 보장하지 않습니다. SANE 최신 지원 목록을 확인한 뒤 실제 연결 장치를 scanimage -L과 scanimage -A로 다시 확인해야 합니다.
아날로그 유행은 다시 커지는데, 아날로그 사진을 다루는 과정은 정체기라고 할 수 있죠.필름을 아날로그로 인화하는 방식이 아닌 이상, 디지털로 옮기는 과정을 거쳐야 비로소 우리 눈에 보입니다.그러나 그 모든 과정이 멈춰가고 있습니다.필름랩과 현상소는 점점 없어지고, 제조사와 제품에 대한 지원도 줄어들고 있기 때문이죠.
이 프로젝트는 직접 쓰면서 느낀 불편함과, 이런 기능이 있었으면 좋겠다는 생각에서 시작했습니다.35mm 필름과 중형 필름을 쓰면서 알게 된 경험과 지식을 바탕으로 하나부터 열까지 모두 직접 개발했습니다.처음에는 혼자 쓰려고 이것저것 만들어본 토이 프로젝트였지만, 이제 negaflow는 그 이상의 무언가가 되었습니다.
결국 무엇보다 '잘' 되며 편하게 사용하고, 빨라야하고 뭐든지 알아서 제대로 만든 결과물이 중요하니까요.독자 개발한 negaflow는 네이티브로 지원되며, 필름랩과 개인의 워크플로우를 다 녹여봤습니다.
니엡스가 찍은 최초의 사진으로부터 200주년인 올해 여름을 기념하며.
릴리스 정보
GitHub Releases에서 현재 버전을 내려받습니다. 대부분의 Mac에서는 Universal PKG를 사용하면 됩니다. PKG는 negaflow.app을 /Applications에 바로 설치합니다. 직접 설치할 때 사용할 수 있는 DMG와 ZIP도 같은 릴리스 페이지에서 제공합니다.
negaflow-1.0.5-1-macOS-universal.pkg
Apple Silicon, Intel
negaflow-1.0.5-1-macOS-arm64.pkg
Apple Silicon 전용
실제 스캐너를 연결하려면 별도 스캐너 플러그인이 필요합니다.
자주 묻는 질문
현재 GitHub 릴리스 파일은 ad-hoc 서명되어 있습니다. 최초 실행 시 경고가 뜨면 시스템 설정 → 개인정보 보호 및 보안으로 이동하여 그래도 열기를 선택하면 정상 실행됩니다.
물리 스캐너 연결을 위해서는 별도의 오픈소스 플러그인인 negaflow-scanner-sane이 필요합니다. 플러그인이 없어도 카메라 스캔이나 기존 스캔 이미지 파일(TIFF, JPEG, RAW)은 즉시 현상할 수 있습니다.
네, macOS Image I/O가 지원하는 모든 카메라 RAW 파일 및 8-bit/16-bit TIFF, JPEG, PNG 파일을 지원합니다.
아닙니다. negaflow는 비파괴(Non-destructive) 방식으로 작동합니다. 원본 파일과 제3자 사이드카는 절대 변경되지 않으며 모든 보정 기록은 독립된 카탈로그(SQLite)에 저장됩니다.
네, Apple Silicon(M1/M2/M3/M4)과 Intel Mac을 모두 지원하는 Universal PKG로 배포되며 macOS 14.0 이상이 필요합니다.
네. negaflow에서 16-bit TIFF 또는 JPEG로 내보낸 후 EXIF 메타데이터를 유지한 채 라이트룸, 포토샵, Capture One 등으로 손쉽게 전달할 수 있습니다.
아니요. 스캐너 플러그인은 물리 스캐너 하드웨어를 직접 제어할 때만 필요합니다. 디지털 카메라로 스캔한 사진(RAW/TIFF)은 플러그인 없이 바로 현상할 수 있습니다.
아니요. negaflow는 Apache License 2.0 기반의 오픈소스 소프트웨어로, 매월 지불하는 구독료 없이 자유롭게 사용할 수 있습니다. 무료입니다. 공짜입니다. 결제창도 체험 기간도 없고, 라이선스와 고지를 남기고 바꾼 부분만 밝히면 고쳐 쓰거나 다시 배포해도 됩니다. 이름은 별개입니다. Apache 2.0은 상표권까지 주지는 않습니다.
카탈로그는 SQLite WAL 모드로 저장하고 메모리 압박이 생기면 프레임 캐시를 줄입니다. 실제 속도는 라이브러리 크기, 저장 장치와 Mac 사양에 따라 달라집니다.
네. 사용자 정의 보정 프리셋을 저장할 수 있으며 Settings Paste Scope 기능을 통해 노출, 톤, 먼지 복원 등 원하는 항목만 선택하여 36컷 롤 전체 사진에 일괄 적용할 수 있습니다.