Download flux/utils/target_generation.py from val-utehy/RotEx: direct link, hf CLI and curl.
- Browser
- Download file 2.37 kB
-
https://huggingface.co/val-utehy/RotEx/resolve/main/flux/utils/target_generation.py
- Command line
-
hf download hf://val-utehy/RotEx/flux/utils/target_generation.py
-
curl -L -o target_generation.py https://huggingface.co/val-utehy/RotEx/resolve/main/flux/utils/target_generation.py
2.37 kB
| """ | |
| Author: https://github.com/datnguyen-tien204 | |
| """ | |
| import numpy as np | |
| import torch | |
| import math | |
| PI = math.pi | |
| def symmetric_brightness_curve(hour): | |
| return 0.035 + (1.0 - 0.035) * (0.5 - 0.5 * np.cos(2 * PI * (hour / 24.0))) | |
| def rgb_curve_original(hour): | |
| t = (hour % 24.0) / 24.0 | |
| sunset = np.exp(-((t - 0.75) / 0.08) ** 2) | |
| sunrise = np.exp(-((t - 0.25) / 0.08) ** 2) | |
| night = np.exp(-((t - 0.0) / 0.10) ** 2) + np.exp(-((t - 1.0) / 0.10) ** 2) | |
| noon = np.exp(-((t - 0.5) / 0.12) ** 2) | |
| return [1.0 + 0.4 * sunset + 0.22 * sunrise - 0.35 * night, | |
| 1.0 - 0.1 * sunset - 0.06 * night, | |
| 1.0 - 0.5 * sunset + 0.3 * night + 0.15 * noon] | |
| def create_target_final_v2(day_img, style_img, depth_map, hour_val, adain_module, style_stats): | |
| device, dtype, B = day_img.device, day_img.dtype, day_img.shape[0] | |
| img_original = (day_img + 1.0) / 2.0 | |
| target_list = [] | |
| for i in range(B): | |
| h = hour_val[i].item() | |
| bright = symmetric_brightness_curve(h) | |
| rgb = rgb_curve_original(h) | |
| tint = torch.tensor(rgb, device=device, dtype=dtype).view(1, 3, 1, 1) | |
| tint = tint * (0.6 + 0.4 * style_stats["mean"][i].view(1, 3, 1, 1)) | |
| img_i = img_original[i:i + 1] | |
| target_base = img_i * tint | |
| if bright < 0.8: | |
| adain_out = (adain_module(day_img[i:i + 1], style_img[i:i + 1]) + 1.0) / 2.0 | |
| night_int = (1.0 - bright) ** 0.8 * 0.85 | |
| d_i = depth_map[i:i + 1] | |
| d_norm = (d_i - d_i.min()) / (d_i.max() - d_i.min() + 1e-6) | |
| sky_mask = torch.sigmoid((0.15 - d_norm) * 10.0) | |
| blend = night_int * (0.7 + 0.3 * sky_mask) | |
| target_mixed = target_base * (1 - blend) + adain_out * blend | |
| else: | |
| target_mixed = target_base | |
| sky_mask = torch.zeros_like(target_mixed[:, :1]) | |
| target_calc = target_mixed * bright | |
| if bright < 0.20: | |
| target_calc += img_i.mean(1, keepdim=True) * tint * 0.03 | |
| if bright < 0.8: target_calc *= (1.0 - sky_mask * 0.5) | |
| noon_w = torch.tensor(np.exp(-(abs(h - 12.0) ** 2) / 8.0), device=device, dtype=dtype) | |
| target_list.append(target_calc * (1 - noon_w) + img_i * noon_w) | |
| return (torch.cat(target_list, dim=0) * 2.0 - 1.0).clamp(-1, 1) |