Multi-color is so slow it's unusable

I would like to print a model with 8, 12, even 16 colors, but it takes much, much too long. For example, even a small print of 300 layers and 8 colors that averages 6 colors per layer would take approximately 6 (colors) x 150 (seconds) x 300 (layers) = 270,000 seconds —> 75 hours –> 3+ days. That’s just not reasonable. 300 layers is only about 60mm tall for common settings.

I configure Creality Print to use purge multiplier of 0.01 and disable the wipe tower. I enable purge into infill and support. That should be enough for most circumstances. That configuration should result in approximately 20 extra seconds per layer given the length of my guide tubes.

Please, please, please, for the love of all that is good in this world, please disable any built in calculations in the firmware and just respect what is configured in the slicer.

I’ve found the code, this is it below. It obviously is doing more than needed.

undefined4 calc_flushing_volume.constprop.0(uint param_1,uint param_2)

{
  double dVar1;
  float fVar2;
  undefined8 in_d0;
  double dVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  double dVar8;
  double local_80;
  double local_78 [2];
  float local_68;
  float local_64;
  float local_60;
  float local_5c;
  float local_58;
  float local_54;
  
  FUN_00010000(&local_68,&local_64,&local_60);
  fVar6 = (float)(param_2 & 0xff) / 255.0;
  fVar5 = (float)((param_2 << 8) >> 0x18) / 255.0;
  FUN_00010000(fVar6,(int)((ulonglong)in_d0 >> 0x20),fVar5,&local_5c,&local_58,&local_54);
  sincos((double)((local_68 / 180.0) * 3.1415927),local_78,&local_80);
  dVar1 = local_78[0];
  dVar3 = local_80;
  dVar8 = (double)local_60;
  sincos((double)((local_5c / 180.0) * 3.1415927),local_78,&local_80);
  fVar2 = (float)(dVar1 * (double)local_64 * dVar8 -
                 local_78[0] * (double)local_58 * (double)local_54);
  fVar4 = (float)(dVar3 * (double)local_64 * dVar8 - local_80 * (double)local_58 * (double)local _54)
  ;
  fVar2 = fVar2 * fVar2 + fVar4 * fVar4;
  if (fVar2 < 0.0) {
    sqrtf(fVar2);
  }
  dVar3 = fmin(1.2000000476837158,(double)SQRT(fVar2));
  fVar7 = (float)dVar3;
  fVar2 = ((float)((param_2 << 0x10) >> 0x18) / 255.0) * 0.59 + fVar6 * 0.3 + fVar5 * 0.11;
  fVar4 = ((float)((param_1 << 0x10) >> 0x18) / 255.0) * 0.59 +
          ((float)(param_1 & 0xff) / 255.0) * 0.3 + ((float)((param_1 << 8) >> 0x18) / 255.0) * 0 .11
  ;
  if (fVar4 <= fVar2) {
    dVar3 = pow((double)(fVar2 - fVar4),0.699999988079071);
    fVar2 = (float)(dVar3 * 560.0);
  }
  else {
    fVar2 = (fVar4 - fVar2) * 80.0;
    dVar3 = fmin((double)(local_60 * 0.33 + local_54 * 0.67),(double)fVar7);
    fVar7 = (float)dVar3;
  }
  fVar7 = fVar7 * 230.0;
  dVar3 = (double)(fVar2 * fVar2 + fVar7 * fVar7) -
          (double)((fVar7 + fVar7) * fVar2) * -0.5000000504735648;
  if (dVar3 < 0.0) {
    sqrt(dVar3);
  }
  dVar3 = fmax((double)(float)SQRT(dVar3),60.0);
  dVar3 = fmin((double)(longlong)(int)((float)dVar3 + 0.0),800.0);
  return (int)(longlong)dVar3;
}

This is with any multi colour system using one nozzle… you can try reduce the pfte length from cfs to buffer, that really all you can do if you want reduce the travel time between each retraction, otherwise print part is separately and glue them together …

I think you’re missing the point. If I configure it to not purge at all, it shouldn’t be making anywhere from 5 to 20 purges because it thinks it knows best.

With a sufficiently large enough model, there is no need for purging at all.