feat: add MiniMax-H3-Image support (#2324)

This commit is contained in:
leejet authored and GitHub committed 2026-11-11 01:24:25 +08:00
1 parent f8417d02e1
commit 32d516c019
15 files changed
+436 -118

No files matched your search

+33
View File
@@ -2,6 +2,7 @@
#define __SD_RUNTIME_DENOISER_HPP__
#include <algorithm>
#include <array>
#include <cctype>
#include <cmath>
#include <cstring>
@@ -1405,6 +1406,38 @@ struct MingImageFlowDenoiser : DiscreteFlowDenoiser {
}
};
struct MiniMaxH3ImageDenoiser : public DiscreteFlowDenoiser {
std::array<float, 7> pdd_sigmas;
explicit MiniMaxH3ImageDenoiser(const std::array<float, 7>& pdd_sigmas)
: DiscreteFlowDenoiser(1.f), pdd_sigmas(pdd_sigmas) {}
float sigma_min() override { return 0.f; }
float sigma_max() override { return 1.f; }
float t_to_sigma(float t) override {
const float position = (1.f - std::clamp(t / (TIMESTEPS - 1.f), 0.f, 1.f)) * 6.f;
const size_t index = std::min<size_t>(static_cast<size_t>(position), 5);
const auto& grid = pdd_sigmas;
return grid[index] + (position - index) * (grid[index + 1] - grid[index]);
}
std::vector<float> get_sigmas(uint32_t n, int image_seq_len, scheduler_t scheduler, SDVersion version, const char* extra_sample_args = nullptr) override {
if (scheduler != DISCRETE_SCHEDULER) {
return DiscreteFlowDenoiser::get_sigmas(n, image_seq_len, scheduler, version, extra_sample_args);
}
if (n == 0) {
return {};
}
std::vector<float> sigmas;
sigmas.reserve(n + 1);
for (uint32_t i = 0; i <= n; ++i) {
sigmas.push_back(t_to_sigma((1.f - static_cast<float>(i) / n) * (TIMESTEPS - 1.f)));
}
return sigmas;
}
};
struct H3AVFlowDenoiser : public DiscreteFlowDenoiser {
int64_t video_channels;
float audio_shift;