Tuesday, October 20, 2026
RepRapMicron Double Height Layer Slicer Mod
The UV beam sets resin about 6μm wide. Prusaslicer doesn't allow a layer height of more than 6μm for that, but the UV goes on for a lot further. So I have adapted fibre_process.py to use a Z_SCALE constant. This allows the model to be compressed vertically by, say, 50% in Prusaslicer and then be expanded to full height again in the filter to produce the full-height GCODE. Here's a Benchy printed that way:
If you zoom in you'll see that we have lost a bit of vertical resolution. However we have also gained resolution under overhangs, because there is less cumulative UV overshooting the edges. So Benchy's hull has more of a curve to it.
While the use of this is debatable in creating artistic models, for the grunt work of creating more or less planar mechanisms with little if any overhang it means I can print them twice as fast. Possibly more than twice.
Monday, October 19, 2026
Chonky Boi Pantograph (much neater)
This one I have more faith in. It turns out that the "Infill before perimeter" box had somehow become unchecked in Prusaslicer. As you can see from the images below, this 950μm long (nearly 1mm) pantograph is significantly better:
I made it 48μm thick (probably slightly over 50 in the real world) which I hope improves durability somewhat. Note that even with the assumption in the slicer that the "extrusion" width is 6μm it does not look like 65% overlap is excessive and the infill doesn't look too dense. I think there are interesting optical effects going on. I am driving the fibre somewhat out of spec after all.
As before, now to attach one end with nail gel, free the rest of it from the Krapton Tape, and see if I can flex it without breaking it. Place your bets please, ladies and gentlemen...
Attempting Pantograph Motion
I'm not holding up high hopes on this. Although I've increased the part thickness to 60μm, and set the perimeter overlap to 25%, the perimeter is still not attaching and it looks a wee bit fragile. If you look carefully at a zoom-in on the top of the micrograph below:
you will see that the stray bit of perimeter flapping around in the breeze is ribbon-like. This means that it was printed vertically, and then detached. Because we're dealing with a light beam and not extruded filament, this means the light beam did not intersect with the infill. Because it is deeper than it is thick, this strongly suggests that it is the first layer. No surprise then that subsequent layers go awry.
I'm beginning to wonder if the print width is less than 9μm. Thinking about it, an optical fibre has a core and a sheath, so it's quite possible that the UV beam is much narrower than 9μm. I would print single lines and measure them but the bloody things don't stick!
So I have reduced the print width to 6μm and increased the overlap to 65%, and we'll take it from there. Test subject is another Benchy because I'm making them for fund raising. I didn't have to do that for the original RepRap Project, as it was funded - albeit the lowest project funding Dr. Bowyer had ever used. Less, in fact, than the cost of a 3D printer at the time.
Anyhoo the pantograph above has its lower test pad anchored to the Krapton Tape with nail gel. It now has to be prised loose and moved. Place your bets on: Broken during separation, broken during feeble articulation, actually moves, or pings off into the aether?
Saturday, October 17, 2026
RepRapMicron And Slightly More Complex Flexures
Still working on the print quality because larger prints seem to have more issues, however this is a print of a parallelogram flexure, otherwise known as a pantograph:
It is 1180μm long (a little over a millimetre). This particular one is 30μm thick because I'm still playing around trying to get "large" structures printing properly and am just testing the base layers. It is scaling movement to 50% just to keep things visible.
Some of the more astute of you will have noticed a faint resemblance of this print to the flexure system in the RepRapMicron Axis Driver module:
The flexure part is ~100mm long. 100x smaller. I think you can see where we're going here.
Now nobody makes M0.03 screws, and the kinematics of assembly are fiddly, so I'm not going to build a direct copy. There are very basic details to be sorted out, like getting it off the build plate and anchoring it down.
I took an even worse print and experimented. To anchor it down, I place a tiny speck of "Gel Polish" UV nail art gel ("Jelly") nearby the print before I detach it, and trail a very, very fine trail up to the part. This stuff is much thicker than 'Top Coat" or 3DP resin, so it is less likely to creep and engulf the part. Before it creeps very far I turn on a UV lamp to solidify it. Then you get this:
Getting the part off the Krapton Tape is best done in a droplet of isopropyl alcohol. This seems to ease it off the Krapton and stops the part moving too quickly and flying off. Then you have a mobile mechanism firmly attached to a substrate and the experimentation can begin. Well, once I have a slightly thicker one anyway.
Thursday, October 15, 2026
RepRapMicron Thin Lines And Extruded Text Test
As perimeters come apart, I thought I'd stress-test single lines without fill. To do this I selected some sample text with characters approximately 25μm wide that would all print as single lines, and printed it two layers thick. The first layer 7μm thick, the second 4μm. After gentle washing by dropping IPA from a hypodermic from a height of ~10mm the slide was flooded with UV so that the distribution of printed particles could be determined:
As can be seen, a great many of the individual letters and parts thereof detached during the cleaning process and scattered themselves around the slide, with some letters remaining in regimented rows.
This indicates that even gentle cleaning can severely disrupt artefacts that otherwise printed successfully. To determine if there was any pattern in which characters stayed attached to the Krapton Tape, I put the slide under the compound microscope and took the following higher resolution image:
Unfortunately, there is little that can be determined, other than O's are moderately more likely to remain attached. SVG Text Extrusion from Prusaslicer given below for comparison.
Wednesday, October 14, 2026
Benchy Redo
With the benefit of a few days of experience I redid Benchy. This one is 600μm long, making it exactly 1/100th scale. We're getting a cabin with void inside too.
Tuesday, October 13, 2026
Video of Micron-Printed Mechanism Moving
That was easier to detach from the Krapton than anticipated. Check it out on YouTube. My hand shakes like a rattlesnake tail. This had better result in people buying me a coffee!
Visible Light Micrograph Of Krapton Print
Managed to get a good raking light image of the print on Krapton. I must make a lighting rig that does the raking light properly.
Apparently getting hairs trapped under the Krapton only has a very marginal effect on the output, and does not seem to affect detachment. It appears that a perfect bed and flat surface is optional for UV fibre printing on Krapton at least.
So with 4μm layers we actually get good adhesion. There is one flyer - top right shows a curly filament. This is the perimeter of the circle bottom centre. I am running with 65% overlap at this point, but obviously the perimeters are not bonding bell enough. Now I have reduced the layer height to 4μm Prusaslicer will let me reduce the extrusion width to 7μm. If I reduce it further it crashes with a "Invalid spacing supplied to Flow::with_spacing()" error. The print is ~20μm thick.
I'll try to get this loose on the Krapton, but don't hold much hope. I'll probably try a reprint on glass and see if that is detachable. Once I can detach, I can test an actual flexure joint!
If that doesn't work I may cheer myself up by reprinting Benchies with the current settings, just for lols.
UPDATE: Did another print and nicer photo on the compound microscope:
Ref: PrusaSlicer Config for UV Fibre printing
Just so it's there, should anyone want to crib. Remember PrusaSlicer runs on 1 unit = 10μm.
Gratuitous latest print done using these settings on Krapton tape under UV:
; prusaslicer_config = begin
; arc_fitting = disabled
; autoemit_temperature_commands = 0
; automatic_extrusion_widths = 0
; automatic_infill_combination = 0
; automatic_infill_combination_max_layer_height = 100%
; avoid_crossing_curled_overhangs = 0
; avoid_crossing_perimeters = 0
; avoid_crossing_perimeters_max_detour = 0
; bed_custom_model =
; bed_custom_texture =
; bed_shape = -15x-15,485x-15,485x485,-15x485
; bed_temperature = 0
; bed_temperature_extruder = 0
; before_layer_gcode =
; between_objects_gcode =
; binary_gcode = 0
; bottom_fill_pattern = rectilinear
; bottom_solid_layers = 2
; bottom_solid_min_thickness = 0
; bridge_acceleration = 0
; bridge_angle = 0
; bridge_fan_speed = 100
; bridge_flow_ratio = 1
; bridge_speed = 10
; brim_separation = 0
; brim_type = no_brim
; brim_width = 0
; chamber_minimal_temperature = 0
; chamber_temperature = 0
; color_change_gcode = M600
; colorprint_heights =
; complete_objects = 0
; cooling = 1
; cooling_perimeter_transition_distance = 0
; cooling_slowdown_logic = uniform_cooling
; cooling_tube_length = 5
; cooling_tube_retraction = 91.5
; custom_parameters_filament = ""
; custom_parameters_print =
; custom_parameters_printer =
; default_acceleration = 0
; default_filament_profile =
; default_print_profile =
; deretract_speed = 0
; disable_fan_first_layers = 3
; dont_support_bridges = 1
; draft_shield = disabled
; duplicate_distance = 6
; elefant_foot_compensation = 0
; enable_dynamic_fan_speeds = 0
; enable_dynamic_overhang_speeds = 0
; end_filament_gcode = "; *END gcode for filament, exposes UV\n"
; end_gcode = ; *END\nM84 ; disable motors\n
; ensure_vertical_shell_thickness = enabled
; external_perimeter_acceleration = 0
; external_perimeter_extrusion_width = 0
; external_perimeter_speed = 100%
; external_perimeters_first = 0
; extra_loading_move = -2
; extra_perimeters = 1
; extra_perimeters_on_overhangs = 0
; extruder_clearance_height = 20
; extruder_clearance_radius = 20
; extruder_colour = ""
; extruder_offset = 0x0
; extrusion_axis = E
; extrusion_multiplier = 1
; extrusion_width = 0.81
; fan_always_on = 0
; fan_below_layer_time = 60
; filament_abrasive = 0
; filament_colour = #29B2B2
; filament_cooling_final_speed = 3.4
; filament_cooling_initial_speed = 2.2
; filament_cooling_moves = 4
; filament_cost = 0
; filament_density = 0
; filament_deretract_speed = nil
; filament_diameter = 1.75
; filament_flush_speed = 0
; filament_flush_volume = 0
; filament_infill_max_crossing_speed = 0
; filament_infill_max_speed = 0
; filament_load_time = 0
; filament_loading_speed = 28
; filament_loading_speed_start = 3
; filament_max_volumetric_speed = 0
; filament_minimal_purge_on_wipe_tower = 15
; filament_multitool_ramming = 0
; filament_multitool_ramming_flow = 10
; filament_multitool_ramming_volume = 10
; filament_notes = ""
; filament_purge_multiplier = 100%
; filament_ramming_parameters = "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6"
; filament_retract_before_travel = nil
; filament_retract_before_wipe = nil
; filament_retract_layer_change = nil
; filament_retract_length = nil
; filament_retract_length_toolchange = nil
; filament_retract_lift = nil
; filament_retract_lift_above = nil
; filament_retract_lift_below = nil
; filament_retract_restart_extra = nil
; filament_retract_restart_extra_toolchange = nil
; filament_retract_speed = nil
; filament_seam_gap_distance = nil
; filament_settings_id = "RepRapMicron V0.05"
; filament_shrinkage_compensation_xy = 0%
; filament_shrinkage_compensation_z = 0%
; filament_soluble = 0
; filament_spool_weight = 0
; filament_stamping_distance = 0
; filament_stamping_loading_speed = 20
; filament_toolchange_delay = 0
; filament_travel_lift_before_obstacle = nil
; filament_travel_max_lift = nil
; filament_travel_ramping_lift = nil
; filament_travel_slope = nil
; filament_type = PLA
; filament_unload_time = 0
; filament_unloading_speed = 90
; filament_unloading_speed_start = 100
; filament_vendor = (Unknown)
; filament_wipe = nil
; fill_angle = 45
; fill_density = 15%
; fill_pattern = rectilinear
; first_layer_acceleration = 0
; first_layer_acceleration_over_raft = 0
; first_layer_bed_temperature = 0
; first_layer_extrusion_width = 0
; first_layer_height = 0.7
; first_layer_infill_speed = 30%
; first_layer_speed = 10%
; first_layer_speed_over_raft = 30
; first_layer_temperature = 0
; full_fan_speed_layer = 0
; fuzzy_skin = none
; fuzzy_skin_point_dist = 0.8
; fuzzy_skin_thickness = 0.3
; gap_fill_enabled = 0
; gap_fill_speed = 12
; gcode_comments = 0
; gcode_flavor = mach3
; gcode_label_objects = disabled
; gcode_resolution = 0.0125
; gcode_substitutions =
; high_current_on_filament_swap = 0
; host_type = prusalink
; idle_temperature = nil
; infill_acceleration = 0
; infill_anchor = 600%
; infill_anchor_max = 50
; infill_every_layers = 1
; infill_extruder = 1
; infill_extrusion_width = 0
; infill_first = 0
; infill_overlap = 65%
; infill_speed = 12
; interface_shells = 0
; interlocking_beam = 0
; interlocking_beam_layer_count = 2
; interlocking_beam_width = 0.8
; interlocking_boundary_avoidance = 2
; interlocking_depth = 2
; interlocking_orientation = 22.5
; ironing = 0
; ironing_flowrate = 15%
; ironing_spacing = 0.1
; ironing_speed = 15
; ironing_type = top
; layer_gcode =
; layer_height = 0.4
; machine_limits_usage = time_estimate_only
; machine_max_acceleration_e = 10000,5000
; machine_max_acceleration_extruding = 1500,1250
; machine_max_acceleration_retracting = 1500,1250
; machine_max_acceleration_travel = 1500,1250
; machine_max_acceleration_x = 9000,1000
; machine_max_acceleration_y = 9000,1000
; machine_max_acceleration_z = 500,200
; machine_max_feedrate_e = 120,120
; machine_max_feedrate_x = 500,200
; machine_max_feedrate_y = 500,200
; machine_max_feedrate_z = 12,12
; machine_max_jerk_e = 2.5,2.5
; machine_max_jerk_x = 10,10
; machine_max_jerk_y = 10,10
; machine_max_jerk_z = 0.2,0.4
; machine_max_junction_deviation = 0,0
; machine_min_extruding_rate = 0,0
; machine_min_travel_rate = 0,0
; max_fan_speed = 100
; max_layer_height = 0
; max_print_height = 1200
; max_print_speed = 2000
; max_volumetric_extrusion_rate_slope_negative = 0
; max_volumetric_extrusion_rate_slope_positive = 0
; max_volumetric_speed = 0
; min_bead_width = 85%
; min_fan_speed = 35
; min_feature_size = 25%
; min_layer_height = 0
; min_print_speed = 10
; min_skirt_length = 0
; mmu_segmented_region_interlocking_depth = 0
; mmu_segmented_region_max_width = 0
; multimaterial_purging = 140
; notes =
; nozzle_diameter = 1
; nozzle_high_flow = 1
; only_one_perimeter_first_layer = 0
; only_retract_when_crossing_perimeters = 0
; ooze_prevention = 0
; output_filename_format = [input_filename_base].gcode
; over_bridge_speed = 10
; overhang_fan_speed_0 = 0
; overhang_fan_speed_1 = 0
; overhang_fan_speed_2 = 0
; overhang_fan_speed_3 = 0
; overhang_speed_0 = 15
; overhang_speed_1 = 15
; overhang_speed_2 = 20
; overhang_speed_3 = 25
; overhangs = 1
; parking_pos_retraction = 92
; pause_print_gcode = M601
; perimeter_acceleration = 0
; perimeter_extruder = 1
; perimeter_extrusion_width = 0
; perimeter_generator = classic
; perimeter_speed = 12
; perimeters = 1
; physical_printer_settings_id =
; post_process = /home/vik/uRepRap/UV_head/prusaslicer_filter.sh
; prefer_clockwise_movements = 0
; print_settings_id = RepRapMicron V0.05 - UV Fibre
; printer_model =
; printer_notes =
; printer_settings_id = RepRapMicron V0.05 - UV Fibre
; printer_technology = FFF
; printer_variant =
; printer_vendor =
; raft_contact_distance = 0.1
; raft_expansion = 1.5
; raft_first_layer_density = 90%
; raft_first_layer_expansion = 3
; raft_layers = 0
; remaining_times = 0
; resolution = 0
; retract_before_travel = 2
; retract_before_wipe = 0%
; retract_layer_change = 1
; retract_length = 1
; retract_length_toolchange = 10
; retract_lift = 3.5
; retract_lift_above = 0
; retract_lift_below = 0
; retract_restart_extra = 0
; retract_restart_extra_toolchange = 0
; retract_speed = 40
; scarf_seam_entire_loop = 0
; scarf_seam_length = 20
; scarf_seam_max_segment_length = 1
; scarf_seam_on_inner_perimeters = 0
; scarf_seam_only_on_smooth = 1
; scarf_seam_placement = nowhere
; scarf_seam_start_height = 0%
; seam_gap_distance = 15%
; seam_position = random
; silent_mode = 0
; single_extruder_multi_material = 0
; single_extruder_multi_material_priming = 1
; skirt_distance = 6
; skirt_height = 0
; skirts = 1
; slice_closing_radius = 0.049
; slicing_mode = regular
; slowdown_below_layer_time = 5
; small_perimeter_speed = 12
; solid_infill_acceleration = 0
; solid_infill_below_area = 70
; solid_infill_every_layers = 0
; solid_infill_extruder = 1
; solid_infill_extrusion_width = 0
; solid_infill_speed = 12
; spiral_vase = 0
; staggered_inner_seams = 0
; standby_temperature_delta = -5
; start_filament_gcode = "; Filament gcode\n"
; start_gcode = G61 ; precise movement\n
; support_material = 0
; support_material_angle = 0
; support_material_auto = 1
; support_material_bottom_contact_distance = 0
; support_material_bottom_interface_layers = -1
; support_material_buildplate_only = 0
; support_material_closing_radius = 2
; support_material_contact_distance = 0.2
; support_material_enforce_layers = 0
; support_material_extruder = 1
; support_material_extrusion_width = 0.87
; support_material_interface_contact_loops = 0
; support_material_interface_extruder = 1
; support_material_interface_layers = 3
; support_material_interface_pattern = rectilinear
; support_material_interface_spacing = 0
; support_material_interface_speed = 100%
; support_material_pattern = rectilinear
; support_material_spacing = 2.5
; support_material_speed = 12
; support_material_style = grid
; support_material_synchronize_layers = 0
; support_material_threshold = 0
; support_material_with_sheath = 1
; support_material_xy_spacing = 50%
; support_tree_angle = 40
; support_tree_angle_slow = 25
; support_tree_branch_diameter = 2
; support_tree_branch_diameter_angle = 5
; support_tree_branch_diameter_double_wall = 3
; support_tree_branch_distance = 1
; support_tree_tip_diameter = 0.8
; support_tree_top_rate = 15%
; temperature = 0
; template_custom_gcode =
; thick_bridges = 1
; thin_walls = 1
; thumbnails =
; thumbnails_format = PNG
; toolchange_gcode =
; toolchange_ordering = optimized
; top_fill_pattern = rectilinear
; top_infill_extrusion_width = 0
; top_one_perimeter_type = none
; top_solid_infill_acceleration = 0
; top_solid_infill_speed = 12
; top_solid_layers = 2
; top_solid_min_thickness = 1
; travel_acceleration = 0
; travel_lift_before_obstacle = 0
; travel_max_lift = 0
; travel_ramping_lift = 0
; travel_short_distance_acceleration = 0
; travel_slope = 0
; travel_speed = 40
; travel_speed_z = 40
; use_firmware_retraction = 0
; use_relative_e_distances = 0
; use_volumetric_e = 0
; variable_layer_height = 0
; wall_distribution_count = 1
; wall_transition_angle = 10
; wall_transition_filter_deviation = 25%
; wall_transition_length = 100%
; wipe = 0
; wipe_into_infill = 0
; wipe_into_objects = 0
; wipe_tower = 0
; wipe_tower_acceleration = 0
; wipe_tower_bridging = 10
; wipe_tower_brim_width = 2
; wipe_tower_cone_angle = 0
; wipe_tower_extra_flow = 100%
; wipe_tower_extra_spacing = 100%
; wipe_tower_extruder = 0
; wipe_tower_no_sparse_layers = 0
; wipe_tower_width = 60
; wiping_volumes_matrix = 0
; wiping_volumes_use_custom_matrix = 0
; xy_size_compensation = 0
; z_offset = 0
; prusaslicer_config = end
Monday, October 12, 2026
Not There Yet But Improved
Well that helped! Obviously still a lot going wrong here, but notice we're now getting at least one perimeter. I have given perimeters a 50% overlap, which is excessive but functional. I am running into problems where Prusaslicer cannot comprehend that a print head can deposit material that is deeper than it is wide - which is the first layer case for this configuration.
Looks like the fibre end blobbed over (oval feature, bottom) which so far has meant I've been moving too slowly. Obviously things fell apart in the top right. A lot of perimeter fragments are visible, so maybe try more overlap? I also appear to have over-compensated for that unknown aspect ratio distortion on the Y axis.The nice thing to see is the beginning of a double flexure joint in the right-angled feature top centre. You'll need to zoom in for that, but it's much more visible under the binocular microscope, particularly with the UV illumination. Photo taken with my phone as the Svbony has no UV filter and whites out.
Prusaslicer bug in Marlin?
From what I can see, Prusaslicer doesn't set the XYZ speed when in Marlin mode all the time. Sometimes it relies on the A Axis speed being set. As I discard all A axis speeds, uh, I kinda end up with the axis speed not being set (or reset). So, patched that and we try again.
So Where Does The Fibre Print Go Wrong?
Looking at a test print and an outcome side by side, two things become apparent:
For scale, the round thing is 300μm notional diameter. Y Axis aspect ratio is out by about 1.33
That Y axis distortion is not doing my prints any favours (possibly why the horizontal section disintegrated), and the perimeters are not bonding to the infill. Let's fix those issues...
Here's a zoom-in from a bench microscope (at 90 degrees, sorry):


















