@@ -21,13 +21,18 @@ namespace OnnxStack.StableDiffusion.Diffusers.StableDiffusion
2121{
2222 public class ControlNetDiffuser : DiffuserBase
2323 {
24+ private readonly IControlNetImageService _controlNetImageService ;
25+
2426 /// <summary>
2527 /// Initializes a new instance of the <see cref="ControlNetDiffuser"/> class.
2628 /// </summary>
2729 /// <param name="configuration">The configuration.</param>
2830 /// <param name="onnxModelService">The onnx model service.</param>
29- public ControlNetDiffuser ( IOnnxModelService onnxModelService , IPromptService promptService , ILogger < ControlNetDiffuser > logger )
30- : base ( onnxModelService , promptService , logger ) { }
31+ public ControlNetDiffuser ( IOnnxModelService onnxModelService , IPromptService promptService , IControlNetImageService controlNetImageService , ILogger < ControlNetDiffuser > logger )
32+ : base ( onnxModelService , promptService , logger )
33+ {
34+ _controlNetImageService = controlNetImageService ;
35+ }
3136
3237
3338 /// <summary>
@@ -72,7 +77,7 @@ protected override async Task<DenseTensor<float>> SchedulerStepAsync(ModelOption
7277 var controlNetMetadata = _onnxModelService . GetModelMetadata ( modelOptions . ControlNetModel , OnnxModelType . ControlNet ) ;
7378
7479 // Control Image
75- var controlImage = PrepareControlImage ( promptOptions , schedulerOptions ) ;
80+ var controlImage = await PrepareControlImage ( modelOptions , promptOptions , schedulerOptions ) ;
7681
7782 // Loop though the timesteps
7883 var step = 0 ;
@@ -191,9 +196,14 @@ protected static DenseTensor<double> CreateConditioningScaleTensor(float conditi
191196 /// <param name="promptOptions">The prompt options.</param>
192197 /// <param name="schedulerOptions">The scheduler options.</param>
193198 /// <returns></returns>
194- protected DenseTensor < float > PrepareControlImage ( PromptOptions promptOptions , SchedulerOptions schedulerOptions )
199+ protected async Task < DenseTensor < float > > PrepareControlImage ( ModelOptions modelOptions , PromptOptions promptOptions , SchedulerOptions schedulerOptions )
195200 {
196- return promptOptions . InputContolImage . ToDenseTensor ( new [ ] { 1 , 3 , schedulerOptions . Height , schedulerOptions . Width } , false ) ;
201+ var controlImage = promptOptions . InputContolImage ;
202+ if ( schedulerOptions . IsControlImageProcessingEnabled )
203+ {
204+ controlImage = await _controlNetImageService . PrepareInputImage ( modelOptions . ControlNetModel , promptOptions . InputContolImage , schedulerOptions . Height , schedulerOptions . Width ) ;
205+ }
206+ return controlImage . ToDenseTensor ( new [ ] { 1 , 3 , schedulerOptions . Height , schedulerOptions . Width } , false ) ;
197207 }
198208
199209
0 commit comments