3D Printing

Custom Window Adapter and Streamlit App for Midea PortaSplit AC

A custom window adapter for the Midea PortaSplit that looks more like part of the window than like an improvised add-on and is now also available as a Streamlit generator.

Some 3D-printing projects are just nice little side quests. This one was more of a summer problem involving street noise, an old window, and an air conditioner whose hose bundle very clearly has to go through something. At some point I stopped waiting for a ready-made solution and built one myself.

What makes the Midea PortaSplit interesting to me is exactly that it sits somewhere between a classic portable AC and a proper split unit. There is no huge exhaust hose, but there also is no outdoor unit you can casually disconnect. If the outdoor unit is meant to stay outside, the hose bundle has to pass through a window or door. At some point, that real-world constraint has to end up in the window frame.

Why I ended up cutting into the window at all

On my window, the improvised setup stopped feeling like a real option pretty quickly. I did not want to leave it open. The street right outside is too present for that, and it does not feel particularly secure either. Those common fabric or Velcro solutions for portable AC units only solve half the problem for me. The window still ends up as a summer-only workaround. I wanted something that stays installed, looks tidy, and still lets the window close normally.

That also meant there was no magic clip-on answer with zero consequences. My version required a slot in the inner frame. Not all the way through the entire window frame, but still a real intervention. I do not want to understate that.

The cut inner frame with the opening for the hose bundle visible.
The cut in the inner frame is the actual intervention this whole project revolves around.

The first version was built unapologetically for my window

The original adapter was designed for an older Aubi-style frame. Very specific, not universal at all. The geometry was built around routing the hose bundle through the inner frame in a defined way while still letting the sash close and the original locking hardware engage. The system ended up with three parts:

  • a fixed frame insert
  • an upper and lower pass-through insert for the PortaSplit hose bundle
  • a blind insert for the months when the AC is gone again

In daily use that turned out to be much better than constantly feeding everything in and out again. During summer the pass-through stays in place. In winter the blind insert goes back in, and the topic is basically parked for a few months.

All parts of the PortaSplit window adapter shown in Bambu Studio.
Shown here are the frame, upper and lower pass-through insert, and the blind insert.

What held up after roughly a year of real use

The main thing first: on my window, the setup still works well. In exactly the uneventful way you want for a part like this. It does not feel like some awkward add-on bolted onto the frame. It looks more like the window always came with this pass-through in that exact spot. More importantly, the PortaSplit starts to behave less like a portable AC that needs a new workaround every evening and more like a semi-permanent installation.

A few points from actual use:

  • In winter, drafts have not been a noticeable issue for me as long as the blind insert is in place.
  • The window still closes properly, which is the main win for noise and general peace of mind.
  • This is not something I would blindly transfer to other windows. Window profiles differ too much for that.
The installed PortaSplit pass-through with the window fully closed.
Once installed, it looks more like part of the window than like an add-on.

The uncomfortable but necessary disclaimer

This is a personal maker project, not a universal building guide.

Anyone copying something like this may be modifying a window frame. That can affect sealing, structural behavior, warranty, rental agreements, moisture behavior, or break-in resistance. I cannot judge whether the same approach makes sense, or is even acceptable, on other windows.

Measure more than once, assess your own situation honestly, and when in doubt, do not cut.

Why this turned into an app

After I published the first model, people started asking for the construction file. I did share it, but honestly that is mostly useful for people who are already deep in that kind of CAD workflow. For normal use, the file is too wild, too window-specific, and only so helpful as a starting point. That was the real problem. The first model was not a product. It was basically a documented special case. So the interest was there, but the geometry was far too specific.

The next logical step therefore was not another fixed model but a generator. Measure the window, enter the values, check the cross-section, generate matching parts, print them. Roughly speaking, it is the version where the annoying part is no longer CAD work but getting the measurements right.

What the generator currently does

The app is deliberately focused on this one problem: generating a printable window pass-through for the PortaSplit hose bundle from your own measurements. The workflow is pretty direct:

  1. Measure the window profile.
  2. Enter the dimensions in the app.
  3. Check the 2D cross-section preview.
  4. Generate STL and JSON exports.

That 2D preview matters almost more than the form itself. A wrong number in an input field can look harmless. In the profile view, nonsense tends to reveal itself much faster.

The exports currently include:

  • separate STL files for the individual parts
  • one ZIP containing all STLs
  • one JSON file with the configuration

That JSON file mattered to me because the STL is only the result. If you want to revisit the setup later and understand what was actually measured, you need the parameters, not just the finished geometry.

English Streamlit app form for configuring the window geometry.
The app walks through the relevant dimensions instead of asking people to poke around in CAD.
2D geometry preview of the Streamlit app for the window pass-through.
The preview is the quick reality check before numbers turn into printable parts.

Technically it is half web app, half CAD tool

The interface runs in Streamlit because that was the pragmatic way to build a guided configurator for this. I did not want to turn it into a frontend project before it was even clear whether the generator would be useful for other windows in practice.

Underneath that sits CadQuery. The parts are not made by stretching some prepared STL. They are rebuilt from the input parameters. That was the whole point. Once window profiles start differing, simple scaling stops being a serious answer.

And yes, the project was very clearly built with a fair amount of vibe coding. A lot of it was iterated with ChatGPT: build something, test it, break it, rework it, test again. That worked surprisingly well for this mix of UI, geometry, and export. The direction, though, did not come from a prompt window. It came from a real window, a real AC unit, and some very specific constraints.

What is still missing

My list still includes a few fairly obvious things:

  • better explanations for individual measurement points
  • more photos from real installations
  • more workflow screenshots
  • automatically generated documentation per configuration
  • additional variants for other installation situations

The measurement points are probably the biggest one. In the end, the generator can only be as good as the geometry people feed into it.

Conclusion

What I like about the project is that it moved from a very specific one-off into a small tool that lets other people generate their own version. Not polished enough to call it a product in the classic sense, but much more useful than one STL for exactly my window.

If you have a PortaSplit yourself and try the app, what I care about most is whether the measurement points are understandable and whether the preview helps catch obvious nonsense early. The rest is the usual maker-project loop: measure, print, adjust, print again.

Work in progress