angleforge / src /config.py
eoinedge's picture
Upload folder using huggingface_hub
f2ec79c verified
Raw
History Blame Contribute Delete
3.58 kB
"""Angle presets and dataset configuration for AngleForge.
The camera prompts are bilingual (Chinese + English) to match the
``dx8152/Qwen-Edit-2509-Multiple-angles`` LoRA training data, which gives
the most reliable results with Qwen Image Edit 2509.
"""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Dict, List
# --------------------------------------------------------------------------- #
# Camera-angle presets
# --------------------------------------------------------------------------- #
# key -> (human label, prompt). An empty prompt means "keep the original".
ANGLE_PRESETS: Dict[str, tuple[str, str]] = {
"original": ("Original", ""),
"top_down": ("Top-down / overhead", "将镜头转为俯视 Turn the camera to a top-down view."),
"birds_eye": ("Bird's-eye", "将相机转向鸟瞰视角 Turn the camera to a bird's-eye view."),
"worms_eye": ("Worm's-eye", "将相机切换到仰视视角 Turn the camera to a worm's-eye view."),
"rotate_left_45": ("Rotate left 45°", "将镜头向左旋转45度 Rotate the camera 45 degrees to the left."),
"rotate_right_45": ("Rotate right 45°", "将镜头向右旋转45度 Rotate the camera 45 degrees to the right."),
"rotate_left_90": ("Rotate left 90°", "将镜头向左旋转90度 Rotate the camera 90 degrees to the left."),
"rotate_right_90": ("Rotate right 90°", "将镜头向右旋转90度 Rotate the camera 90 degrees to the right."),
"close_up": ("Close-up", "将镜头转为特写镜头 Turn the camera to a close-up."),
"wide_angle": ("Wide-angle", "将镜头转为广角镜头 Turn the camera to a wide-angle lens."),
"move_left": ("Move left", "将镜头向左移动 Move the camera left."),
"move_right": ("Move right", "将镜头向右移动 Move the camera right."),
"move_forward": ("Move forward", "将镜头向前移动 Move the camera forward."),
"move_down": ("Move down", "将镜头向下移动 Move the camera down."),
}
DEFAULT_ANGLES: List[str] = [
"original",
"top_down",
"birds_eye",
"worms_eye",
"rotate_left_45",
"rotate_right_45",
"close_up",
"wide_angle",
]
# Models used by the local Qwen backend (mirrors linoyts/Qwen-Image-Edit-Angles).
QWEN_BASE_MODEL = "Qwen/Qwen-Image-Edit-2509"
QWEN_RAPID_TRANSFORMER = "linoyts/Qwen-Image-Edit-Rapid-AIO"
ANGLES_LORA_REPO = "dx8152/Qwen-Edit-2509-Multiple-angles"
ANGLES_LORA_WEIGHT = "镜头转换.safetensors"
# Model id used by the serverless HF Inference Providers backend.
ANGLES_INFERENCE_MODEL = "dx8152/Qwen-Edit-2509-Multiple-angles"
def angle_prompt(angle_key: str) -> str:
"""Return the bilingual camera prompt for an angle preset key."""
if angle_key not in ANGLE_PRESETS:
raise ValueError(f"Unknown angle preset: {angle_key}")
return ANGLE_PRESETS[angle_key][1]
@dataclass
class DatasetConfig:
"""All knobs controlling one image-dataset build."""
out_dir: str = "output"
dataset_name: str = "industrial_angles"
# Output image geometry.
image_size: int = 512 # longest side, snapped to a multiple of 8
# Angle generation.
angles: List[str] = field(default_factory=lambda: list(DEFAULT_ANGLES))
variations_per_angle: int = 1
# Extra, cheap (non-AI) augmentations applied to every saved image family.
plain_augmentations_per_image: int = 0
# Qwen inference controls.
num_inference_steps: int = 4
true_guidance_scale: float = 1.0
# Split & reproducibility.
test_ratio: float = 0.2
seed: int = 1234