StringArt3D

Bambu .gcode.3mf vs Generic G-code for 3D printed string art

StringArt3D exports a string-art portrait two different ways depending on the printer. The Bambu .gcode.3mf export is a native Bambu print package — it opens in Bambu Studio, previews correctly, passes Print Plate, and sends to a P2S, P1S, X1 Carbon, A1, A1 mini, A2L, H2S, H2C, H2D, or X2D with the AMS filament mapping intact. The Generic G-code export is a standalone .gcode file with raw motion commands, meant for other Marlin or Klipper machines that accept pre-generated G-code. Pick the Bambu package if you own a supported Bambu printer; pick Generic G-code for everything else, after checking the file in your own slicer first.

Best for, less ideal for

Bambu .gcode.3mf

Best for: owners of a supported Bambu printer (P2S, P1S, X1 Carbon, A1, A1 mini, A2L, H2S, H2C, H2D, X2D) who want to drop the file into Studio or the cloud and print without thinking about slicer settings.

Less ideal for: non-Bambu printers — the package format will not parse — and for users who want to inspect raw motion commands directly.

Generic G-code

Best for: Marlin and Klipper machines, print services that accept raw .gcode, and anyone who wants to verify the file in their own slicer or G-code viewer before printing.

Less ideal for: Bambu users — you give up AMS awareness, the Studio preview, and the per-printer motion tuning for nothing in return.

Direct comparison

The two exports start from the same generated geometry. They diverge on what they wrap that geometry in, and on which downstream tools and printers can use it.

DimensionBambu .gcode.3mfGeneric G-code
File formatNative .gcode.3mf package built from real Bambu sample fixtures.Standalone .gcode file with raw motion commands and minimal headers.
Supported printersBambu Lab P2S, P1S, X1 Carbon, A1, A1 mini, A2L, H2S, H2C, H2D, X2D — single-color PLA.Any Marlin or Klipper printer that accepts pre-generated G-code from SD or web upload.
Slicer / app integrationOpens in Bambu Studio, previews correctly, passes Print Plate, sends to the printer.No slicer integration. Runs straight from SD card or via OctoPrint, Mainsail, Fluidd, etc.
Per-printer motion tuningRuntime ring/wall/infill speeds and travel speeds derived from each Bambu fixture family.Conservative, generic motion profile. Not tuned to any specific machine.
AMS filament mappingYes — uses Bambu's normal AMS filament mapping path so the printer knows which slot to pull from.No AMS metadata. Filament is whatever is loaded in the extruder.
Setup frictionDrop the file into Studio or send via the cloud. No manual slicer settings.You need to know your bed size, confirm the start/end G-code suits your printer, and verify in a slicer or viewer first.
Compatibility riskTested against real Bambu sample fixtures. Low risk on supported models.Higher risk. Edge cases include unusual bed origins, non-standard end G-code, and firmware-specific extrusion handling.
Portability across brandsBambu only. Other printers will not parse the .gcode.3mf package.Portable across most Marlin/Klipper printers, with the caveats above.
Privacy of source photoOn-device generation. The image never leaves the browser.Same — both export paths run locally in the browser with no upload.

How to choose between them

The decision is mostly mechanical: which printer you actually own, and how much setup work you want to do before pressing Start.

  1. Is your printer one of the supported Bambu models? If yes — P2S, P1S, X1 Carbon, A1, A1 mini, A2L, H2S, H2C, H2D, or X2D — pick the Bambu .gcode.3mf export. Everything else about the workflow gets easier.
  2. Is the printer non-Bambu but Marlin or Klipper based? Pick Generic G-code. Most modern non-Bambu Marlin and Klipper machines fall in this bucket.
  3. Are you printing through a service or shared printer? Generic G-code is the safer hand-off because it does not assume a specific slicer or AMS configuration on the receiving end.
  4. Do you want a Studio preview before printing? Only the Bambu package gives you that. With Generic G-code, the equivalent is loading the file into a desktop slicer or a G-code viewer like NCViewer to confirm the toolpath visually.

Why two export paths exist instead of one

The honest reason is that "just emit G-code" is not a universal solution on Bambu printers. Bambu Studio is opinionated about what a print file is — it expects a .gcode.3mf package with a project_settings.config that names a real printer profile, a slice_info.config with the right plate metadata, and an injected G-code config that matches the fixture's filament and extruder shape. Hand-roll any of those wrong and Studio either refuses to open the file, forces a re-slice, or crashes the preview when it tries to update extruder colors. Getting the package right per printer family — P-series vs A-series vs H-series, single-nozzle vs dual-nozzle — required patching real working sample fixtures from each machine. That is the work behind the Bambu export.

On non-Bambu machines, the situation is the opposite. Marlin and Klipper firmwares are broadly happy to consume pre-generated G-code from SD card, OctoPrint, Mainsail, or Fluidd. They do not require a wrapping package, and they do not expect a vendor-specific metadata block. A standalone .gcode file with sensible start/end commands and conservative motion is the right shape for that ecosystem. So the two exports are not quality tiers — they are two different file contracts for two different printer worlds.

The thing I'd flag honestly: the Generic G-code export is intentionally conservative on motion. It does not assume input shaping, pressure advance tuning, or a specific acceleration profile, because we cannot know what your machine has. That means a well-tuned non-Bambu printer will print it slower than its hardware could handle. If that bothers you, the right answer is to take the geometry into your own slicer rather than to push the Generic export to be more aggressive.

When neither export is the right answer

Both exports have failure modes worth being honest about.

  • You own a Bambu printer that is not on the supported list. The native package currently covers P2S, P1S, X1 Carbon, A1, A1 mini, A2L, H2S, H2C, H2D, and X2D in PLA. Other Bambu models or non-PLA filament are not supported by the native path yet.
  • You own one of the small set of printers that use a separate dedicated raw-G-code export path in the app. For those machines, pick the dedicated export rather than the plain Generic G-code path.
  • You want full slicer-level control: custom infill, custom supports, multi-material color changes mid-print. Both exports hand you a finished file. If you want to retune the slice yourself, export geometry to your slicer instead.
  • You are on a printer with a non-standard bed origin (e.g. a CoreXY with a delta offset, or an old Delta printer). The Generic G-code assumes a rectangular bed with origin at the front-left corner. Verify in a viewer before committing to the print.
  • You are printing on a service that only accepts STL or 3MF model files, not G-code. Neither export currently produces a raw mesh file — the geometry is sliced into printer instructions on export.

For everyone outside those edges, the rule of thumb stays simple: Bambu printer → Bambu .gcode.3mf, most other compatible FDM printers → Generic G-code, selected dedicated-printer path → dedicated raw G-code export.

Frequently asked questions

What is the difference between the Bambu export and the Generic G-code export in StringArt3D?+

The Bambu export is a native .gcode.3mf package built from real Bambu sample fixtures, so Bambu Studio recognizes it as a sliced print, previews it, and sends it to a P2S, P1S, X1 Carbon, A1, A1 mini, A2L, H2S, H2C, H2D, or X2D without re-slicing. The Generic G-code export is a standalone .gcode file with raw motion commands and no slicer metadata package — meant for any Marlin or Klipper machine that accepts hand-prepared G-code from SD card or web interface.

Which export should I pick if I own a Bambu printer?+

Pick the Bambu .gcode.3mf export. It carries the printer profile, AMS filament mapping, plate metadata, and runtime motion tuned to your specific Bambu model. The Generic G-code export will run on a Bambu in a pinch via SD card, but you lose AMS awareness, the print preview in Studio, and the per-printer motion tuning — there is no benefit to using it when the native package exists.

When does the Generic G-code export make sense?+

When the printer is not a Bambu. It is also the right pick when you want to pre-flight the file in your own slicer or G-code viewer, or when you are sending the file to a print service that accepts raw .gcode and handles its own machine setup.

Will the Generic G-code file work on every printer?+

It runs on standard Marlin and Klipper firmware that accepts pre-generated G-code, but compatibility is not guaranteed across every machine. Bed size, start/end G-code conventions, extruder offsets, and acceleration profiles vary. The safer pattern is: load the file in your slicer or a G-code viewer first, confirm it fits the bed, and run a small test before committing to a long print.

Why do you maintain a separate Bambu path instead of just exporting Generic G-code for everyone?+

Because Bambu Studio rejects, re-slices, or fails to preview generic third-party G-code on most of its newer printers. Getting a file that opens in Studio, previews correctly, passes Print Plate, and sends to the printer requires matching the .gcode.3mf package format with real per-printer fixtures. That is a meaningfully harder engineering target than emitting raw G-code, and the Bambu user experience falls apart without it.

Is one of them more portable than the other?+

The Generic G-code file is more portable across printer brands. The Bambu .gcode.3mf is more portable across Bambu workflows — Studio, Bambu Handy, the printer screen, and the cloud queue all understand it natively. Pick "portable across brands" or "portable across Bambu surfaces" depending on which one matches your situation.

Related reading

Generate the right file for your printer

Upload a photo, pick your printer, and download a print-ready file — Bambu native or Generic G-code, depending on what you own. Runs entirely on your device.