├── .gitignore ├── README-EN.md ├── README.md ├── common.py ├── dji.py ├── fuji.py ├── resources ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── DSC08427-fuji.jpg └── DSC08427-sony.jpg └── sony.py /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /README-EN.md: -------------------------------------------------------------------------------- 1 | # Fujifilm Converter 2 | 3 | This program allows you to use Fujifilm film simulation for any camera raw file by modifying the EXIF information. 4 | 5 | ## Comparision 6 | 7 | - Sony PT Creative Style 8 | 9 | ![5](./resources/DSC08427-sony.jpg) 10 | 11 | - Fujifilm NC Film Simulation 12 | 13 | ![6](./resources/DSC08427-fuji.jpg) 14 | 15 | ## Instructions 16 | 17 | 1. Download and install the following tools: 18 | - [Adobe DNG Converter](https://helpx.adobe.com/camera-raw/using/adobe-dng-converter.html): Convert raw files taken by your camera to DNG files 19 | - [ExifTool by Phil Harvey](https://exiftool.org/): Convert DNG files to raw files containing Fuji camera EXIF information 20 | 21 | 2. Open Adobe DNG Converter, select the directory where your raw files are located, and click convert to start the conversion. 22 | 23 | ![1](./resources/1.png) 24 | 25 | Once completed, you will see the following: 26 | 27 | ![2](./resources/2.png) 28 | 29 | 3. Run `python3 main.py` in the terminal, then enter the directory where the converted DNG files are located. The output will be as follows: 30 | 31 | ```sh 32 | ➜ exif-convert python3 main.py 33 | Please input the file: ./test 34 | exiftool -make="FUJIFILM" -model="GFX100S" -uniquecameramodel="Fujifilm GFX 100S" ./test 35 | 1 directories scanned 36 | 32 image files updated 37 | ``` 38 | 39 | You will get some new dng files in the same directory, and the original files will be moved to a directory `archived`. 40 | 41 | ![3](./resources/3.png) 42 | 43 | 4. Drag these files into Lightroom, and you will be able to select all 19 Fuji film emulations. 44 | 45 | ![4](./resources/4.png) 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [English Version](./README-EN.md) 2 | 3 | # Fujifilm Converter 4 | 5 | 这个程序可以把任意相机拍出来的 raw 格式照片通过修改 exif 信息的方式模拟成富士相机拍的, 从而在 lightroom 里面选出富士的胶片模拟 6 | 7 | ## 效果对比 8 | 9 | - 索尼 PT 创意外观 10 | 11 | ![5](./resources/DSC08427-sony.jpg) 12 | 13 | - 富士 NC 胶片模拟 14 | 15 | ![6](./resources/DSC08427-fuji.jpg) 16 | 17 | ## 使用方法 18 | 19 | 1. 下载和安装以下工具 20 | - [Adobe DNG Converter](https://helpx.adobe.com/camera-raw/using/adobe-dng-converter.html): 用来将相机拍摄的 raw 文件转换成 dng 文件 21 | - [ExifTool by Phil Harvey](https://exiftool.org/): 用来将 dng 文件转换成包含富士相机 exif 信息的文件 22 | 23 | 2. 打开 Adobe DNG Converter, 选择你的 raw 文件所在的目录, 点击 convert 开始转换 24 | 25 | ![1](./resources/1.png) 26 | 27 | 完成之后可以看到如下界面 28 | 29 | ![2](./resources/2.png) 30 | 31 | 3. 在 terminal 里面运行 `python3 main.py`, 然后输入刚才转换好的 dng 文件所在的目录, 输出如下 32 | 33 | ```sh 34 | ➜ python3 main.py 35 | Please input the file: ./test 36 | exiftool -make="FUJIFILM" -model="GFX100S" -uniquecameramodel="Fujifilm GFX 100S" ./test 37 | 1 directories scanned 38 | 32 image files updated 39 | ``` 40 | 41 | 在刚才的目录里会得到一些新的 dng 文件, 原始文件被放进了 archived 目录 42 | 43 | ![3](./resources/3.png) 44 | 45 | 4. 把这些新的文件拖进 lightroom, 就可以选出富士所有的 20 种胶片模拟了 46 | 47 | ![4](./resources/4.png) 48 | -------------------------------------------------------------------------------- /common.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | camera_info = { 4 | "fuji": { 5 | "make": "FUJIFILM", 6 | "model": "GFX100II", 7 | "camera": "Fujifilm GFX 100 II", 8 | }, 9 | "sony": {"make": "SONY", "model": "ILCE-7CM2", "camera": "SONY ILCE-7CM2"}, 10 | "dji": {"make": "DJI", "model": "Mini 4 Pro", "camera": "DJI FC8482"}, 11 | "leica": { 12 | "make": "Leica", 13 | "model": "M11", 14 | "camera": "Summilux-M 50mm f/1.4 ASPH", 15 | }, 16 | } 17 | 18 | 19 | def archive_originals(dir, extension): 20 | archive_dir = dir + "/archived/" 21 | if not os.path.exists(archive_dir): 22 | os.makedirs(archive_dir) 23 | for filename in os.listdir(dir): 24 | if filename.endswith(f".{extension}_original"): 25 | original_path = os.path.join(dir, filename) 26 | archive_file = filename.replace(f".{extension}_original", f".{extension}") 27 | archive_path = os.path.join(archive_dir, archive_file) 28 | os.rename(original_path, archive_path) 29 | print(f"Renamed: {original_path} -> {archive_path}") 30 | 31 | 32 | def convert(dir, camera_preset, extension): 33 | make = camera_info[camera_preset]["make"] 34 | model = camera_info[camera_preset]["model"] 35 | camera = camera_info[camera_preset]["camera"] 36 | command = ( 37 | f'exiftool -m -make="{make}" -model="{model}" -uniquecameramodel="{camera}" ' 38 | ) 39 | command += dir 40 | print(command) 41 | os.system(command) 42 | archive_originals(dir, extension) 43 | -------------------------------------------------------------------------------- /dji.py: -------------------------------------------------------------------------------- 1 | from common import convert 2 | 3 | 4 | camera_preset = "dji" 5 | extension = "jpg" 6 | 7 | if __name__ == "__main__": 8 | dir = input("Please input the dir: ") 9 | convert(dir, camera_preset, extension) 10 | -------------------------------------------------------------------------------- /fuji.py: -------------------------------------------------------------------------------- 1 | import os 2 | from common import convert 3 | 4 | camera_preset = "fuji" 5 | extension = "dng" 6 | 7 | if __name__ == "__main__": 8 | dir = input("Please input the dir: ") 9 | convert(dir, camera_preset, extension) 10 | -------------------------------------------------------------------------------- /resources/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chr1sc2y/fujifilm-converter/1d5437f5ce5c9ba5089de6dacf3c10fa89bd74fc/resources/1.png -------------------------------------------------------------------------------- /resources/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chr1sc2y/fujifilm-converter/1d5437f5ce5c9ba5089de6dacf3c10fa89bd74fc/resources/2.png -------------------------------------------------------------------------------- /resources/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chr1sc2y/fujifilm-converter/1d5437f5ce5c9ba5089de6dacf3c10fa89bd74fc/resources/3.png -------------------------------------------------------------------------------- /resources/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chr1sc2y/fujifilm-converter/1d5437f5ce5c9ba5089de6dacf3c10fa89bd74fc/resources/4.png -------------------------------------------------------------------------------- /resources/DSC08427-fuji.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chr1sc2y/fujifilm-converter/1d5437f5ce5c9ba5089de6dacf3c10fa89bd74fc/resources/DSC08427-fuji.jpg -------------------------------------------------------------------------------- /resources/DSC08427-sony.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chr1sc2y/fujifilm-converter/1d5437f5ce5c9ba5089de6dacf3c10fa89bd74fc/resources/DSC08427-sony.jpg -------------------------------------------------------------------------------- /sony.py: -------------------------------------------------------------------------------- 1 | from common import convert 2 | 3 | 4 | camera_preset = "sony" 5 | extension = "jpg" 6 | 7 | if __name__ == "__main__": 8 | dir = input("Please input the dir: ") 9 | convert(dir, camera_preset, extension) 10 | --------------------------------------------------------------------------------