#pragma once #include #include namespace engine::sampling { bool timestep_in_interval(float timestep, float start, float end); std::vector cfg_guidance( const std::vector & pred_cond, const std::vector & pred_uncond, float guidance_scale); std::vector apg_guidance( const std::vector & pred_cond, const std::vector & pred_uncond, float guidance_scale, int64_t frames, int64_t channels, std::vector & momentum, float momentum_coeff = -0.75F, double norm_threshold = 2.5); std::vector adg_guidance( const std::vector & latents, const std::vector & pred_cond, const std::vector & pred_uncond, float sigma, float guidance_scale, int64_t frames, int64_t channels, float angle_clip = 3.14F / 6.0F); void clamp_velocity_norm( std::vector & velocity, const std::vector & reference, float threshold); std::vector euler_step( const std::vector & x, const std::vector & velocity, float dt); void euler_step_in_place( std::vector & x, const std::vector & velocity, float dt); std::vector denoise_from_velocity( const std::vector & x, const std::vector & velocity, float t); std::vector renoise( const std::vector & denoised, const std::vector & noise, float t); std::vector heun_combine_velocity( const std::vector & velocity_first, const std::vector & velocity_second); std::vector heun_step( const std::vector & x_before, const std::vector & velocity_first, const std::vector & velocity_second, float dt); std::vector build_soft_mask( const std::vector & mask, int64_t crossfade_frames); std::vector blend_by_mask( const std::vector & generated, const std::vector & source, const std::vector & soft_mask, int64_t channels); void blend_by_mask_in_place( std::vector & generated, const std::vector & source, const std::vector & soft_mask, int64_t channels); std::vector repaint_step_injection( const std::vector & generated, const std::vector & clean_source, const std::vector & repaint_mask, float next_timestep, const std::vector & noise, int64_t channels); } // namespace engine::sampling