| 33 | |
| 34 | |
| 35 | def parse_args(): |
| 36 | p = argparse.ArgumentParser(description='RGBD scan -> rendered video') |
| 37 | p.add_argument('--config', type=str, default='', help='YAML config file') |
| 38 | p.add_argument('--dump_config', type=str, default='', help='Save config and exit') |
| 39 | p.add_argument('--input_npz', required=True) |
| 40 | p.add_argument('--output_video', default='./scan_render.mp4') |
| 41 | # Defaults are None so CLI args only override YAML when explicitly provided. |
| 42 | # PipelineConfig dataclasses hold the real defaults. |
| 43 | p.add_argument('--fps', type=int, default=None) |
| 44 | p.add_argument('--render_width', type=int, default=None) |
| 45 | p.add_argument('--render_height', type=int, default=None) |
| 46 | p.add_argument('--point_size', type=float, default=None) |
| 47 | p.add_argument('--near', type=float, default=None) |
| 48 | p.add_argument('--far', type=float, default=None) |
| 49 | p.add_argument('--background', type=str, default=None) |
| 50 | p.add_argument('--voxel_size', type=float, default=None) |
| 51 | p.add_argument('--octree_level', type=int, default=None) |
| 52 | p.add_argument('--max_depth', type=float, default=None) |
| 53 | p.add_argument('--downsample', type=int, default=None) |
| 54 | p.add_argument('--no_jitter', action='store_true', default=None) |
| 55 | p.add_argument('--color_update', choices=['first', 'latest'], default=None) |
| 56 | p.add_argument('--keyframes_only_points', action='store_true', default=None, |
| 57 | help='Only unproject keyframe depth into the point cloud. ' |
| 58 | 'Non-keyframes still appear in the camera trajectory/overlay. ' |
| 59 | 'Requires is_keyframe / frame_type in the NPZ meta.') |
| 60 | p.add_argument('--smooth_window', type=int, default=None) |
| 61 | p.add_argument('--fov', type=float, default=None) |
| 62 | p.add_argument('--back_offset', type=float, default=None) |
| 63 | p.add_argument('--up_offset', type=float, default=None) |
| 64 | p.add_argument('--look_offset', type=float, default=None) |
| 65 | p.add_argument('--follow_scale_frames', type=int, default=None) |
| 66 | p.add_argument('--mask_sky', action='store_true', default=None) |
| 67 | p.add_argument('--sky_model', default=None) |
| 68 | p.add_argument('--sky_batch_size', type=int, default=None) |
| 69 | p.add_argument('--sky_mask_dir', type=str, default=None, |
| 70 | help='Directory for cached sky masks') |
| 71 | p.add_argument('--sky_mask_visualization_dir', type=str, default=None, |
| 72 | help='Directory for sky mask visualization images') |
| 73 | p.add_argument('--camera_vis', type=str, default=None) |
| 74 | p.add_argument('--trail_color_ramp', type=str, default=None) |
| 75 | p.add_argument('--trail_line_width', type=float, default=None) |
| 76 | p.add_argument('--trail_tail_len', type=int, default=None) |
| 77 | p.add_argument('--head_num_frames', type=int, default=None) |
| 78 | p.add_argument('--head_point_size', type=float, default=None) |
| 79 | p.add_argument('--head_frustum_scale', type=float, default=None) |
| 80 | p.add_argument('--head_frustum_line_width', type=float, default=None) |
| 81 | p.add_argument('--head_frustum_color', type=str, default=None) |
| 82 | p.add_argument('--head_texture_alpha', type=float, default=None) |
| 83 | p.add_argument('--frame_tag', action='store_true', default=None) |
| 84 | p.add_argument('--frame_tag_position', type=str, default=None, |
| 85 | choices=['top_left', 'top_right', 'bottom_left', 'bottom_right']) |
| 86 | p.add_argument('--edl', action='store_true', default=None) |
| 87 | p.add_argument('--edl_strength', type=float, default=None) |
| 88 | p.add_argument('--edl_radius', type=int, default=None) |
| 89 | p.add_argument('--lod_target_pixels', type=float, default=None) |
| 90 | p.add_argument('--depth_video', action='store_true', default=None) |
| 91 | p.add_argument('--no_combined_video', action='store_true', default=None, |
| 92 | help='Disable side-by-side render+RGB combined video') |