Skip to content

Feature: Ability to change flow ratios by extrusion path types (Code + Docs)#10641

Merged
SoftFever merged 1 commit into
OrcaSlicer:mainfrom
valerii-bokhan:flow-ratio-override-feature
Oct 20, 2025
Merged

Feature: Ability to change flow ratios by extrusion path types (Code + Docs)#10641
SoftFever merged 1 commit into
OrcaSlicer:mainfrom
valerii-bokhan:flow-ratio-override-feature

Conversation

@valerii-bokhan

@valerii-bokhan valerii-bokhan commented Sep 6, 2025

Copy link
Copy Markdown
Contributor

Description

This new feature allows users to override flow ratios for the following extrusion path types:

  • First layer (excluding Brims and Skirts)
  • Outer and inner walls
  • Overhang perimeters
  • Sparse infill
  • Internal solid infill
  • Gap fill
  • Support and Support interfaces

If the checkbox is disabled in UI, all the new fields will be hidden, and the values will not be applied.

Use case example: My goal was to eliminate the "wrinkles effect" on the outer walls when printing with low layer heights, such as, e.g., 0.04mm. Instead of increasing the temperature, I adjusted the flow ratio for the outer walls only to address the issue.

Screenshots

How UI looks when the feature is disabled:
image

How UI looks when the feature is enabled:
image

Tests

I tested it by checking the values in the slicer (that the multiplicators were applied). Additionally, I tested it on my Bambu Lab A1 mini, printing before and after values with overriding.

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

Example:

Outer walls on the 0.02mm layer height without my changes:
image

image image

Same profile, but with changes introduced in PR:
image

image image

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

Hello, @SoftFever. Sorry for poking you directly.

This is my first PR in the project, which is probably why the automatic checks are not running for it. Can you please approve them?

@valerii-bokhan valerii-bokhan force-pushed the flow-ratio-override-feature branch 2 times, most recently from 8714092 to 73f086d Compare September 14, 2025 12:52
@boromyr

boromyr commented Sep 19, 2025

Copy link
Copy Markdown
Contributor

Thank you, I’ve been waiting for this addition for a long time and I’m testing it. When you say overwrite, you mean it doesn’t take into account the overall flow multiplier, right? Personally, I believe it’s better to follow the same logic as the flow multiplier for the lower and upper surfaces, so that it multiplies the two flow values: the general one and the one you want to modify. Alternatively, you need to copy and paste the general flow value into all the boxes when you modify it, like this:
image

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

Thank you, I’ve been waiting for this addition for a long time and I’m testing it. When you say overwrite, you mean it doesn’t take into account the overall flow multiplier, right? Personally, I believe it’s better to follow the same logic as the flow multiplier for the lower and upper surfaces, so that it multiplies the two flow values: the general one and the one you want to modify.

It should work the same way as top_solid_infill_flow_ratio and bottom_solid_infill_flow_ratio. Perhaps the term "override" is not entirely suitable here. Probably, it'd be better to replace it with another word to avoid confusion.

But the logic of new parameters should be exactly the same as for top/bottom surface flow ratios.

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

@boromyr I double-checked the code and ensured that the parameters I added work the same as the existing ones.

At first, objects' and filaments' multipliers are taken into account, and then any of the others, depending on the path roles.

So the question is, how can I rename the "override" checkbox to avoid confusion?

image

@boromyr

boromyr commented Sep 19, 2025

Copy link
Copy Markdown
Contributor

Maybe it's better to follow Orca's logic and remove overrides, maybe just "enabling other flow ratios" would suffice.

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

This change helped me achieve excellent results in miniature printing.

This gnome is 2cm high.

image

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

Maybe it's better to follow Orca's logic and remove overrides, maybe just "enabling other flow ratios" would suffice.

How about “set other flow ratios”? Or “apply”.

@boromyr

boromyr commented Sep 19, 2025

Copy link
Copy Markdown
Contributor

I believe both are correct and all three are valid options, but the final decision is up to you, the author. In my opinion, "enable" and "set" both sound good.
Anyway, fantastic, I am doing the first tests and they are going well, now no more PP scripts are needed to modify specific operation flows. I don't think I can go back without this PR.

@valerii-bokhan valerii-bokhan force-pushed the flow-ratio-override-feature branch from 73f086d to 7e15f28 Compare September 20, 2025 08:04
@boromyr

boromyr commented Sep 20, 2025

Copy link
Copy Markdown
Contributor

Maybe only the flow for the first layer is missing; I usually increase it especially for ASA and ABS.

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

Maybe only the flow for the first layer is missing;

It should be already covered by Botton surface flow ratio as I understand it.

@boromyr

boromyr commented Sep 20, 2025

Copy link
Copy Markdown
Contributor

Actually, that value influences all the lower surfaces, not just the first layer, and it doesn't act on the brims. I found an alternative solution.

{ if (layer_num==0)}
M221 S110
{endif}
{if (layer_num==1)}
M221 S100
{endif}

@valerii-bokhan

valerii-bokhan commented Sep 20, 2025

Copy link
Copy Markdown
Contributor Author

Actually, that value influences all the lower surfaces, not just the first layer, and it doesn't act on the brims.

I think the first layer's flow ratio option can be covered in a separate PR. It appears that I need to separate the logic for bottom surfaces to accommodate the first-layer flow ratio case.

So, I will look into it separately. Thanks for the heads up.

Note: I want to avoid overcomplicating this PR with complex changes, as it is my first PR in this project.

@valerii-bokhan valerii-bokhan force-pushed the flow-ratio-override-feature branch from 7e15f28 to 5557a04 Compare September 20, 2025 14:48
@valerii-bokhan

valerii-bokhan commented Sep 20, 2025

Copy link
Copy Markdown
Contributor Author

@boromyr I double-checked the code, and I can easily add a multiplier for the first layer.

The final flow ratio for a path will be a multiplication of object flow ratio, filament flow ratio, role-based flow ratio, and first layer flow ratio if we are on the first layer.

It will follow the logic of the other multipliers, but for the first layer, infill, brim/skirt, outer, and inner walls will have different flow ratios. Is it okay, or do we want FR to be equal for all the paths on the first layer?

Unfortunately, it's not easy to add a FR multiplier for brims and skirts.

@valerii-bokhan valerii-bokhan changed the title Feature: Overriding flow ratios by perimeter type (Code + Docs) Feature: Ability to changing flow ratios by extrusion path types (Code + Docs) Sep 20, 2025
@valerii-bokhan valerii-bokhan changed the title Feature: Ability to changing flow ratios by extrusion path types (Code + Docs) Feature: Ability to change flow ratios by extrusion path types (Code + Docs) Sep 20, 2025
@boromyr

boromyr commented Sep 20, 2025

Copy link
Copy Markdown
Contributor

No I think it's fine like this, if I understood correctly the effect would be equivalent to M221 S110. Even if they have different roles, they will have different values throughout the print, only for the first layer they will be multiplied by a common factor which is what is needed. After all, the first layer is only for adhesion or for those with over-extrusion issues.

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

Okay, then I will add a multiplier for the first layer as well.

@valerii-bokhan valerii-bokhan force-pushed the flow-ratio-override-feature branch from 5557a04 to 84d7575 Compare September 20, 2025 22:14
@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

@boromyr, FYI. I have added the support of the first layer and the gap fill flow ratios.

@boromyr

boromyr commented Sep 20, 2025

Copy link
Copy Markdown
Contributor

Okay, thanks, I'll compile it and try it out.

@TomPcz

TomPcz commented Sep 21, 2025

Copy link
Copy Markdown

Would it be possible to also adjust the flow rate for solid infill that is ironed? This would be especially useful for zero-flow ironing (PR #10350), where one might want to increase the flow. As @pi-squared-studio suggested in the discussion of that PR, one might also want to decrease the infill flow to allow for a higher ironing flow. I tried this by setting the top-surface flow ratio to 0.8 and the ironing flow to 21%, and it worked very well. However, the top-surface flow ratio applies to all top surfaces, not just the ironed ones, so modifiers must be set carefully. Having an option to adjust the flow of the ironed infill separately would resolve this issue.

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

@TomPcz Hey, it looks interesting, but this is a special case that would be better covered in a separate PR.

I want to look into it, but it'd also be great to merge the current PR first.

@pi-squared-studio

Copy link
Copy Markdown
Contributor

@valerii-bokhan @TomPcz

By the way, try this PR #10622
It also has a parameter for changing the flow at certain perimeters, but even this fact is not important. I noticed that if you print the perimeters after one, then the amazing accuracy of the surface remains. Perhaps this is due to the fact that when the extruded material cools, it crystallizes more evenly. There are 2 modes in this PR, this is when the outer wall is (or not) printed last. When there is an outer wall control, theoretically there are pores there, and it would be interesting to check what happens when the material a little bit overflows.

@pi-squared-studio

Copy link
Copy Markdown
Contributor

I didn't understand the need for this PR a bit.
It is usually not necessary to adjust the extrusion coefficient of the layers. But if, as the author says, the quality changes as the layer height decreases, then it may make sense to introduce not a constant parameter, but a dynamic one similar to small area flow compensation:
image

Then I didn't understand what it was "wrinkles effect"... A long time ago, I tried to print in layers of 0.08, but I refused because it was very slow, and I observed a similar effect when a thin layer of plastic formed a "smashed ribbon". But I didn't think then that this effect was due to a shortage of plastic, but mostly to the quality of the filament and insufficient cooling of the entire model. It may be affected by the fact that as the layer decreases, its shape changes, and it becomes more rectangular, and it requires a different mathematical model of plastic consumption.

It seems to me that there is more scope for experiments and observations of the physics of processes than just a solution in the form of a "golden pill" and which will be difficult for ordinary users to understand.

But, in any case, this is a useful observation. And, perhaps, it will be valuable for the implementation of such project: #8443

@valerii-bokhan valerii-bokhan force-pushed the flow-ratio-override-feature branch 2 times, most recently from b459eb7 to 0859524 Compare October 15, 2025 19:44
…+ Docs)

This new feature allows users to override flow ratios for the following extrusion path types:

* First layer (excluding Brims and Skirts)
* Outer walls
* Inner walls
* Overhang perimeters
* Sparse infill
* Internal solid infill
* Gap fill
* Support
* Support interfaces
@valerii-bokhan valerii-bokhan force-pushed the flow-ratio-override-feature branch from 0859524 to 722a0bd Compare October 20, 2025 09:43
@SoftFever

Copy link
Copy Markdown
Collaborator

@valerii-bokhan
Thank you so much for sharing this.
I have definitely seen similar artifacts before when printing at a 0.08 mm layer height.
I didn't spend time investigating it at that time since I rarely print with such thin layers.

While the exact cause of the artifacts is still unclear, the mitigation you demonstrated seems to work very well.
I was previously reluctant to add more per-role flow rate controls, but this use case makes a strong argument for it.

@SoftFever SoftFever left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM
Thank you

@SoftFever SoftFever merged commit e6a4ddf into OrcaSlicer:main Oct 20, 2025
13 checks passed
@valerii-bokhan valerii-bokhan deleted the flow-ratio-override-feature branch October 20, 2025 14:22
@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

@boromyr FYI

BTW, this is my current number:
image

The less FR for infill, internal bridges, and inner walls, the less they push outer walls. So less wrinkles and outer wall is cleaner, and seams too.

@boromyr

boromyr commented Oct 20, 2025

Copy link
Copy Markdown
Contributor

I am currently using this for ABS; reducing the flow for the solid infill beneath the top surface helps enormously. In what order do you print perimeters? I was thinking of increasing the flow for the inner surfaces to boost strength similarly to what staggered perimeters might do, but I believe that doesn’t work well if you print the inner perimeters first.
image

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

My settings:

  • Walls printing order: Inner/Outer
  • Print infill first: Disabled

dbaarda pushed a commit to dbaarda/OrcaSlicer that referenced this pull request Oct 20, 2025
* main: (21 commits)
  Add Coex 3D filament profiles to Orcaslicer (OrcaSlicer#10924)
  Fix Z offset for 1st layer (OrcaSlicer#11011)
  Feature: Ability to change flow ratios by extrusion path types (Code + Docs) (OrcaSlicer#10641)
  Fix: A proper handling of the `support_base_pattern_spacing = 0` for the `Tree Slim` support (OrcaSlicer#11084)
  Limit Shrinkage values (OrcaSlicer#10930)
  Set Ironing angle setting to be a relative degree offset from top surface infill direction (OrcaSlicer#10841)
  Input Shaping Calib: Types, RepRap + Improvements (OrcaSlicer#10913)
  Wiki 13: Layer time variability + Minor Improvements (OrcaSlicer#10677)
  Validation Action comment Remove + Improvement (OrcaSlicer#10617)
  Material Type standarization + Technical Filament Types (OrcaSlicer#10553)
  Optimize and simplify MarchingSquares.hpp. (OrcaSlicer#10747)
  Fix several imgui UTF8 related issues (OrcaSlicer#11078)
  Make top resizing grabber larger on Windows (OrcaSlicer#11023)
  Preferences dialog redesign / improvements / fixes (OrcaSlicer#10665)
  Add the u8 marker to UTF-8 strings (OrcaSlicer#10666)
  Add static assert for bed number related values (OrcaSlicer#11035)
  BUG-FIX avoid crossing perimeters ingonore holes <=2mm (OrcaSlicer#10942)
  [Profiles] Fix Prusa XL overhang speed (OrcaSlicer#10931) (OrcaSlicer#10933)
  overflow inital setup screen (OrcaSlicer#11007)
  Clarify warning about malicious websites
  ...
dbaarda pushed a commit to dbaarda/OrcaSlicer that referenced this pull request Oct 21, 2025
* opt-filltpmsfk: (21 commits)
  Add Coex 3D filament profiles to Orcaslicer (OrcaSlicer#10924)
  Fix Z offset for 1st layer (OrcaSlicer#11011)
  Feature: Ability to change flow ratios by extrusion path types (Code + Docs) (OrcaSlicer#10641)
  Fix: A proper handling of the `support_base_pattern_spacing = 0` for the `Tree Slim` support (OrcaSlicer#11084)
  Limit Shrinkage values (OrcaSlicer#10930)
  Set Ironing angle setting to be a relative degree offset from top surface infill direction (OrcaSlicer#10841)
  Input Shaping Calib: Types, RepRap + Improvements (OrcaSlicer#10913)
  Wiki 13: Layer time variability + Minor Improvements (OrcaSlicer#10677)
  Validation Action comment Remove + Improvement (OrcaSlicer#10617)
  Material Type standarization + Technical Filament Types (OrcaSlicer#10553)
  Optimize and simplify MarchingSquares.hpp. (OrcaSlicer#10747)
  Fix several imgui UTF8 related issues (OrcaSlicer#11078)
  Make top resizing grabber larger on Windows (OrcaSlicer#11023)
  Preferences dialog redesign / improvements / fixes (OrcaSlicer#10665)
  Add the u8 marker to UTF-8 strings (OrcaSlicer#10666)
  Add static assert for bed number related values (OrcaSlicer#11035)
  BUG-FIX avoid crossing perimeters ingonore holes <=2mm (OrcaSlicer#10942)
  [Profiles] Fix Prusa XL overhang speed (OrcaSlicer#10931) (OrcaSlicer#10933)
  overflow inital setup screen (OrcaSlicer#11007)
  Clarify warning about malicious websites
  ...
@pi-squared-studio

Copy link
Copy Markdown
Contributor

I slightly revised my attitude towards this PR when I development of a new calibration test.
I noticed that the affected not only by the overall flowratio, but also by the direction. So for parallel perimeter layers, the density will be the same, for a solid crossed infill the other. So calibration by line density is quite the right solution. In addition, different materials may have different filling parameters between the coils. So I think it would be more logical to install this setting in the filament settings section.

Regarding overhangs, I am also convinced that this is a problem of low-flow material with ultra-thin layers.
I also have an understanding of the process of printing overhangs, and I want to make a mod that will remove such defects as mentioned in the topic but different method. Perhaps there will be another PR on this topic soon.

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

So I think it would be more logical to install this setting in the filament settings section.

I partially agree, and I was thinking of adding these settings in the filament section. Also, the rest of the flow ratio settings, such as top/bottom infill FR and FR for bridges, are scattered across the different sections of the main profile settings.

Right now, I set FR to 1 in the filament setting and tweak all the numbers in the settings I added (since I have it somewhat organized in one place now).

I believe there should be a better way to organize all of them, but it requires a lot of code changes.

But in the end, I decided that it would be better to make this change as simple as possible.

valerii-bokhan added a commit to valerii-bokhan/OrcaSlicer that referenced this pull request Oct 22, 2025
…+ Docs) (OrcaSlicer#10641)

This new feature allows users to override flow ratios for the following extrusion path types:

* First layer (excluding Brims and Skirts)
* Outer walls
* Inner walls
* Overhang perimeters
* Sparse infill
* Internal solid infill
* Gap fill
* Support
* Support interfaces
valerii-bokhan added a commit to valerii-bokhan/OrcaSlicer that referenced this pull request Oct 22, 2025
…+ Docs) (OrcaSlicer#10641)

This new feature allows users to override flow ratios for the following extrusion path types:

* First layer (excluding Brims and Skirts)
* Outer walls
* Inner walls
* Overhang perimeters
* Sparse infill
* Internal solid infill
* Gap fill
* Support
* Support interfaces
valerii-bokhan added a commit to valerii-bokhan/OrcaSlicer that referenced this pull request Oct 22, 2025
…+ Docs) (OrcaSlicer#10641)

This new feature allows users to override flow ratios for the following extrusion path types:

* First layer (excluding Brims and Skirts)
* Outer walls
* Inner walls
* Overhang perimeters
* Sparse infill
* Internal solid infill
* Gap fill
* Support
* Support interfaces
@valerii-bokhan valerii-bokhan mentioned this pull request Jan 15, 2026
1 task
@AssiveMass

AssiveMass commented May 28, 2026

Copy link
Copy Markdown

Hi all, thanks @valerii-bokhan for implementing this.

One improvement I'd like to see regarding this is per-filament settings. IMO this option would be more useful in the filament settings instead of global print settings, because the flow is heavily material dependent.

For example, I'd like to be able to set the first layer flow ratio to 0.90 for just one filament, which has over-extrusion problems on the first layer due to much higher first layer temperature. (230 vs 200 on other layers, Polyterra PLA. Lowering first layer temps reduces adhesion drastically).

Would this be doable? Thanks!

@valerii-bokhan

Copy link
Copy Markdown
Contributor Author

Hi all, thanks @valerii-bokhan for implementing this.

One improvement I'd like to see regarding this is per-filament settings. IMO this option would be more useful in the filament settings instead of global print settings, because the flow is heavily material dependent.

For example, I'd like to be able to set the first layer flow ratio to 0.90 for just one filament, which has over-extrusion problems on the first layer due to much higher first layer temperature. (230 vs 200 on other layers, Polyterra PLA. Lowering first layer temps reduces adhesion drastically).

Would this be doable? Thanks!

Hi! This idea was mentioned in this thread already and I completely agree with you - it's a great idea. Let me look into it. I will use ironing settings per filament as an example.

@grandoth grandoth mentioned this pull request May 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants