diff --git a/apps/api/app/services/edit_plan_service.py b/apps/api/app/services/edit_plan_service.py index 3d795a195..7858098e4 100755 --- a/apps/api/app/services/edit_plan_service.py +++ b/apps/api/app/services/edit_plan_service.py @@ -999,26 +999,35 @@ class EditPlanService: source_bgm_config: dict = {} source_plan = self.get_plan(source_plan_id) + # #2034:读取源 plan 的 dedup_enabled 决定变体是否注入视觉/像素扰动 + # 默认 True;关了则保留节奏模板+BGM差异化,但跳过 visual/pixel 扰动 + _dedup_enabled = True if source_plan and source_plan.config: source_bgm_config = source_plan.config.get("bgm", {}) or {} + _dedup_enabled = bool(source_plan.config.get("dedup_enabled", True)) variant_seeds_for_bgm = [rng.randint(0, 999999) for _ in range(count)] bgm_pool_assignments = allocate_bgm_pool_for_variants(source_bgm_config, variant_seeds_for_bgm) def _build_variant_config_update(idx: int) -> dict: - """构建单个变体的 config 更新(节奏模板/BGM/视觉/像素扰动)。""" + """构建单个变体的 config 更新(节奏模板/BGM/视觉/像素扰动)。 + + #2034:dedup_enabled=False 时跳过 visual_perturbation/pixel_perturbation, + 保留 rhythm_template 和 BGM 池分配(合理的多变体差异,不属于降重扰动)。 + """ upd: dict = {} - try: - perturbation = generate_visual_perturbation(rng) - if idx == 0: - perturbation["hflip"] = False - upd["visual_perturbation"] = perturbation - except Exception: - logger.exception("变体 %d 视觉扰动生成失败(不阻断)", idx) - try: - pixel_pert = generate_pixel_perturbation(rng) - upd["pixel_perturbation"] = pixel_pert - except Exception: - logger.exception("变体 %d 像素扰动生成失败(不阻断)", idx) + if _dedup_enabled: + try: + perturbation = generate_visual_perturbation(rng) + if idx == 0: + perturbation["hflip"] = False + upd["visual_perturbation"] = perturbation + except Exception: + logger.exception("变体 %d 视觉扰动生成失败(不阻断)", idx) + try: + pixel_pert = generate_pixel_perturbation(rng) + upd["pixel_perturbation"] = pixel_pert + except Exception: + logger.exception("变体 %d 像素扰动生成失败(不阻断)", idx) rt = rhythm_templates_for_variants[idx] if idx < len(rhythm_templates_for_variants) else None if rt is not None: upd["rhythm_template"] = rt diff --git a/apps/worker/video_processing/unified_render_service.py b/apps/worker/video_processing/unified_render_service.py index 87880789b..a3923997e 100755 --- a/apps/worker/video_processing/unified_render_service.py +++ b/apps/worker/video_processing/unified_render_service.py @@ -2376,6 +2376,9 @@ class UnifiedRenderService: return _clip_playback_speed_pure(getattr(clip, "playback_speed", 1.0)) def _get_visual_perturbation(self) -> dict: + # #2034:dedup_enabled=False 时跳过视觉/像素扰动(与 edge_crop、micro_transform 一致) + if not self._dedup_enabled(): + return {} # 读取当前 plan 的视觉扰动参数(plan.config.visual_perturbation) perturbation = (self.plan.config or {}).get("visual_perturbation") or {} if not perturbation: