浏览代码

add sparkmaker page

Thomas Buck 1年前
父节点
当前提交
b746a2f69c
共有 62 个文件被更改,包括 2387 次插入0 次删除
  1. 258
    0
      input/projects/3d-printing/sparkmaker_repair.md
  2. 2024
    0
      static/files/PrusaSlicer_config_bundle.ini
  3. 105
    0
      static/files/config_sparkmaker.ini
  4. 二进制
      static/img/sparkmaker_1.jpg
  5. 二进制
      static/img/sparkmaker_10.jpg
  6. 二进制
      static/img/sparkmaker_10_small.jpg
  7. 二进制
      static/img/sparkmaker_11.jpg
  8. 二进制
      static/img/sparkmaker_11_small.jpg
  9. 二进制
      static/img/sparkmaker_12.jpg
  10. 二进制
      static/img/sparkmaker_12_small.jpg
  11. 二进制
      static/img/sparkmaker_13.jpg
  12. 二进制
      static/img/sparkmaker_13_small.jpg
  13. 二进制
      static/img/sparkmaker_14.jpg
  14. 二进制
      static/img/sparkmaker_14_small.jpg
  15. 二进制
      static/img/sparkmaker_15.jpg
  16. 二进制
      static/img/sparkmaker_15_small.jpg
  17. 二进制
      static/img/sparkmaker_16.jpg
  18. 二进制
      static/img/sparkmaker_16_small.jpg
  19. 二进制
      static/img/sparkmaker_17.jpg
  20. 二进制
      static/img/sparkmaker_17_small.jpg
  21. 二进制
      static/img/sparkmaker_18.jpg
  22. 二进制
      static/img/sparkmaker_18_small.jpg
  23. 二进制
      static/img/sparkmaker_19.jpg
  24. 二进制
      static/img/sparkmaker_19_small.jpg
  25. 二进制
      static/img/sparkmaker_1_small.jpg
  26. 二进制
      static/img/sparkmaker_2.jpg
  27. 二进制
      static/img/sparkmaker_20.mp4
  28. 二进制
      static/img/sparkmaker_20_poster.png
  29. 二进制
      static/img/sparkmaker_20_thumb.png
  30. 二进制
      static/img/sparkmaker_21.jpg
  31. 二进制
      static/img/sparkmaker_21_small.jpg
  32. 二进制
      static/img/sparkmaker_22.jpg
  33. 二进制
      static/img/sparkmaker_22_small.jpg
  34. 二进制
      static/img/sparkmaker_23.jpg
  35. 二进制
      static/img/sparkmaker_23_small.jpg
  36. 二进制
      static/img/sparkmaker_24.jpg
  37. 二进制
      static/img/sparkmaker_24_small.jpg
  38. 二进制
      static/img/sparkmaker_25.jpg
  39. 二进制
      static/img/sparkmaker_25_small.jpg
  40. 二进制
      static/img/sparkmaker_26.jpg
  41. 二进制
      static/img/sparkmaker_26_small.jpg
  42. 二进制
      static/img/sparkmaker_27.png
  43. 二进制
      static/img/sparkmaker_27_small.png
  44. 二进制
      static/img/sparkmaker_28.png
  45. 二进制
      static/img/sparkmaker_28_small.png
  46. 二进制
      static/img/sparkmaker_29.png
  47. 二进制
      static/img/sparkmaker_29_small.png
  48. 二进制
      static/img/sparkmaker_2_small.jpg
  49. 二进制
      static/img/sparkmaker_3.jpg
  50. 二进制
      static/img/sparkmaker_3_small.jpg
  51. 二进制
      static/img/sparkmaker_4.jpg
  52. 二进制
      static/img/sparkmaker_4_small.jpg
  53. 二进制
      static/img/sparkmaker_5.jpg
  54. 二进制
      static/img/sparkmaker_5_small.jpg
  55. 二进制
      static/img/sparkmaker_6.jpg
  56. 二进制
      static/img/sparkmaker_6_small.jpg
  57. 二进制
      static/img/sparkmaker_7.jpg
  58. 二进制
      static/img/sparkmaker_7_small.jpg
  59. 二进制
      static/img/sparkmaker_8.jpg
  60. 二进制
      static/img/sparkmaker_8_small.jpg
  61. 二进制
      static/img/sparkmaker_9.jpg
  62. 二进制
      static/img/sparkmaker_9_small.jpg

+ 258
- 0
input/projects/3d-printing/sparkmaker_repair.md 查看文件

@@ -0,0 +1,258 @@
1
+title: Reviving an old Sparkmaker SLA printer
2
+description: Fixing the hardware and creating a free-software slicing workflow
3
+parent: 3d-printing
4
+position: 35
5
+git: https://git.xythobuz.de/thomas/gcode-tools
6
+date: 2023-01-03
7
+comments: true
8
+---
9
+
10
+<!--% backToParent() %-->
11
+
12
+Many years ago someone donated his Sparkmaker SLA printer to our local makerspace, the [Toolbox Bodensee](https://toolbox-bodensee.de).
13
+Nobody has touched it for a long time, mostly because we were not keen to work with the poisonous and stinky UV resin required for the printer.
14
+But recently my friend [Philipp](https://www.phschoen.de) and I took the plunge.
15
+Here I describe what we had to do to get it working.
16
+
17
+<!--%
18
+lightgallery([
19
+    [ "img/sparkmaker_17.jpg", "Sparkmaker SLA printer" ],
20
+])
21
+%-->
22
+
23
+### Table Of Contents
24
+
25
+* [Endstop Fix](sparkmaker_repair.html#endstop)
26
+* [Encoder Replacement](sparkmaker_repair.html#encoder)
27
+* [First Slicing Experiments](sparkmaker_repair.html#experiments)
28
+* [SL1 to WOW File Format Converter Script](sparkmaker_repair.html#script)
29
+* [Configuring PrusaSlicer for the Sparkmaker](sparkmaker_repair.html#prusaslicer)
30
+* [More Pictures](sparkmaker_repair.html#more_pictures)
31
+
32
+## Endstop Fix
33
+<a class="anchor" name="endstop"></a>
34
+
35
+The printer only has a single axis, Z, with an optical endstop switch at the bottom.
36
+This switch is triggered by a large plastic shim screwed to the Z carriage.
37
+This shim was not centerd properly on this machine.
38
+So when trying to home, the shim collided with the housing of the switch, blocking the axis and threatening to rip off the switch.
39
+To fix this, just loosen the two screws in the shim and adjust the position.
40
+Both the shim and the print bed have some range of adjustment in the Z axis, so take care to adjust the shim in a way to still allow the bed to be properly leveled.
41
+
42
+<!--%
43
+lightgallery([
44
+    [ "img/sparkmaker_2.jpg", "Endstop trigger shim" ],
45
+])
46
+%-->
47
+
48
+## Encoder Replacement
49
+<a class="anchor" name="encoder"></a>
50
+
51
+After only a couple of hours of use, the encoder at the front of the machine stopped working properly.
52
+You can see this in the video below.
53
+
54
+<!--%
55
+lightgallery([
56
+    [ "img/sparkmaker_20.mp4", "video/mp4", "", "", "Demo of encoder problem" ],
57
+])
58
+%-->
59
+
60
+It stopped moving up, mostly only moving down, regardless of the direction it was turned.
61
+This meant the bed could no longer be lifted to easily remove it.
62
+I decided to replace it with an ALPS encoder ([STEC12E](https://www.reichelt.de/drehimpulsegeber-24-impulse-24-rastungen-vertikal-stec12e08-p73923.html?&nbc=1)) I still had lying around from repairing my oscilloscope a while back.
63
+
64
+<!--%
65
+lightgallery([
66
+    [ "img/sparkmaker_3.jpg", "Removing resin basin" ],
67
+    [ "img/sparkmaker_5.jpg", "Mainboard with LCD connector" ],
68
+    [ "img/sparkmaker_6.jpg", "Motor connector" ],
69
+    [ "img/sparkmaker_8.jpg", "UV LED board" ],
70
+])
71
+%-->
72
+
73
+This requires removing the base of the housing by unscrewing the outer four hex screws from the top, as well as the three hex screws on the bottom below the Z axis arm.
74
+Now we are allowed access to the encoder board.
75
+
76
+<!--%
77
+lightgallery([
78
+    [ "img/sparkmaker_9.jpg", "Encoder board" ],
79
+    [ "img/sparkmaker_10.jpg", "Encoder board backside" ],
80
+    [ "img/sparkmaker_11.jpg", "New encoder next to board" ],
81
+    [ "img/sparkmaker_12.jpg", "Fixed encoder board" ],
82
+])
83
+%-->
84
+
85
+The new encoder apparently does not have the same number of pulses per indent, so adjusting it still feels slightly weird.
86
+But it can now be turned normally in both directions, so it is usable again.
87
+
88
+<!--%
89
+lightgallery([
90
+    [ "img/sparkmaker_14.jpg", "Closer view of MCU on mainboard" ],
91
+    [ "img/sparkmaker_15.jpg", "Replacing the screws required a tool to push the nuts in" ],
92
+    [ "img/sparkmaker_16.jpg", "Showing some example image on the LCD" ],
93
+])
94
+%-->
95
+
96
+With the hardware back in working order I could now focus on the PC software side of things.
97
+
98
+## First Slicing Experiments
99
+<a class="anchor" name="experiments"></a>
100
+
101
+After getting the hardware back running the next step is generating some sliced files.
102
+Unfortunately the official Sparkmaker website no longer exists and the downloads from there are hard to find.
103
+They included a slicing software of course, but it seems to only run on Windows and Macs and it not open source.
104
+So I had to find some alternative.
105
+Most suggest using [ChituBox](https://www.chitubox.com) or [Lychee Slicer](https://mango3d.io/lychee-slicer-for-sla-3d-printers/), both can be used for free and seem to include presets for the Sparkmaker.
106
+
107
+<!--%
108
+lightgallery([
109
+    [ "img/sparkmaker_22.jpg", "Cleaning the LCD screen" ],
110
+    [ "img/sparkmaker_23.jpg", "The Anycubic resin we have been using" ],
111
+])
112
+%-->
113
+
114
+Philipp installed ChituBox on his machine and tried it out.
115
+It includes presets for the Sparkmaker that seem to work more or less.
116
+And the software also allows comfortable placement of support structures.
117
+But it didn't work perfectly all the time, we got at least one corrupted file where each slice contained the same garbage picture.
118
+
119
+<!--%
120
+lightgallery([
121
+    [ "img/sparkmaker_24.jpg", "Front view of first print" ],
122
+    [ "img/sparkmaker_25.jpg", "Side view of first print" ],
123
+    [ "img/sparkmaker_26.jpg", "Bottom view of first print" ],
124
+])
125
+%-->
126
+
127
+Even though one corner was warping strongly, the results of the first print attempt were promising.
128
+It is an SA-profile keycap, sliced with ChituBox with 0.1mm layer height.
129
+
130
+## SL1 to WOW File Format Converter Script
131
+<a class="anchor" name="script"></a>
132
+
133
+But there is one open-source alternative, [PrusaSlicer](https://github.com/prusa3d/PrusaSlicer), and it has support for SLA slicing for the [Prusa SL1 printer](https://www.prusa3d.com/product/original-prusa-sl1s-speed-3d-printer/).
134
+But it only produces `.sl1` files, their custom file format.
135
+The Sparkmaker, on the other hand, expects `.wow` files.
136
+Fortunately someone already [documented the file format well](https://github.com/bastirichter/Sparkmaker/blob/master/file_format.md).
137
+And there's also a [small GUI utility](https://github.com/Godzil/WoWTools) to visualize and modify pre-sliced `.wow` files.
138
+The Prusa file format was easy to "reverse-engineer", it's just a zip archive containing each slice as a `.png` file, and some settings in `.ini` files.
139
+
140
+The route to take was therefore obvious: write a script that takes `.sl1` files and converts them to `.wow`.
141
+
142
+<pre class="sh_python">
143
+<!--%
144
+include_url("https://git.xythobuz.de/thomas/gcode-tools/raw/branch/master/tools/convert_sparkmaker.py")
145
+%-->
146
+</pre>
147
+
148
+You can find it [on my Gitea server](https://git.xythobuz.de/thomas/gcode-tools/src/branch/master/tools/convert_sparkmaker.py).
149
+
150
+This is what running the script looks like.
151
+
152
+<pre class="sh_sh">
153
+$ convert_sparkmaker MGMKII_PrintOnePiece.sl1 mgmk2.wow
154
+Internal name: "MGMKII_PrintOnePiece"
155
+Found 414 slices
156
+Using following parameters:
157
+{'exposure_time': 15.0,
158
+ 'first_exposure_time': 120.0,
159
+ 'first_layer_height': 0.1,
160
+ 'layer_height': 0.1,
161
+ 'lift_height': 5.0,
162
+ 'lift_speed': 30.0,
163
+ 'sink_speed': 100.0}
164
+Height: 41.400mm
165
+Estimated print time: 3h 14m 32s
166
+Writing output to "mgmk2.wow"
167
+</pre>
168
+
169
+I only noticed after writing this script that [someone already did the same thing two years ago](https://github.com/PolSerg/sparkmaker).
170
+
171
+<!--%
172
+lightgallery([
173
+    [ "img/sparkmaker_18.jpg", "First print sliced with PrusaSlicer" ],
174
+    [ "img/sparkmaker_19.jpg", "Post-Curing a printed object" ],
175
+])
176
+%-->
177
+
178
+Thanks to the documentation linked above, writing a `.wow` file was very easy.
179
+I'm taking all the settings I can from the included `.ini` files, which are layer height, initial layer height, exposure time and initial exposure time.
180
+The settings referring to the lift of the object after each slice are not present in the file, so my script has useful defaults hard-coded.
181
+
182
+The script should also be usable for the Sparkmaker FHD, as it apparently uses the same file format.
183
+Of course the resolution and size need to be adjusted accordingly, both in my script and in the slicer.
184
+
185
+I noticed some interesting quirks of the printer firmware.
186
+It does not allow the usual style of inline comments explaining what a line does.
187
+When I tried adding comments to the commands in the G-Code header, the corresponding commands simply were not executed at all, which is obviously very problematic.
188
+
189
+Also the firmware does not hestitate to display both success messages at the end of a print, as well as error messages, on the LCD screen itself!
190
+When the LEDs are on this of course hardens the message into the resin.
191
+So G-Code always needs to take care to turn the LEDs off at the end of a print.
192
+For some reason we once managed to have the LEDs turned on with an error message showing.
193
+This requires draining the resin and scraping off any remaining bits.
194
+
195
+## Configuring PrusaSlicer for the Sparkmaker
196
+<a class="anchor" name="prusaslicer"></a>
197
+
198
+To configure PrusaSlicer I recommend starting out with their built-in profile for the SL1.
199
+Selecting it as the machine automatically switches the program over into "SLA mode", where the support and pad generation work differently compared to the normal FDM mode.
200
+You also need to enable expert mode to see all required settings.
201
+
202
+<!--%
203
+lightgallery([
204
+    [ "img/sparkmaker_27.png", "Printer Settings page in PrusaSlicer" ],
205
+    [ "img/sparkmaker_28.png", "Material Settings page in PrusaSlicer" ],
206
+    [ "img/sparkmaker_29.png", "Print Settings page in PrusaSlicer" ],
207
+])
208
+%-->
209
+
210
+The most important changes need to happen in the Printer Settings.
211
+There you need to adjust the display size to 854x480, the display size to 99.82x56.10mm, maximum height to 120mm, the orientation to landscape and disable all mirroring.
212
+
213
+In the Material Settings I recommend setting the exposure time to 15s and the initial exposure time to 120s.
214
+But this may change depending on the resin you plan to use.
215
+
216
+I'm not 100% sure about the display size, and of course this parameter is very important to ensure the printed objects have the correct size.
217
+I initially found [this unfinished project](https://github.com/n0sr3v/SLAcer.js) where the display diagonal is given as 4.6 inch.
218
+With this, and the display size in pixels, I calculated the theoretical display size.
219
+
220
+    screen width = 854 * 4.6 / sqrt(854^2 + 480^2) = 4.0099996503 inch = 101.854mm
221
+    screen height = 480 * 4.6 / sqrt(854^2 + 480^2) = 2.25386397207 inch = 57.248mm
222
+
223
+This is close, but the resulting objects were not quite perfect.
224
+So I printed a calibration cube at 5mm width, and one at 10mm width, to be able to calibrate the values.
225
+This gave similar correction factors in both axes.
226
+
227
+    101.854mm * 0.98 = 99.81692mm
228
+    57.248mm * 0.98 = 56.10304mm
229
+
230
+I'm sure these numbers are still not totally exact, but they seem to be close enough for my purposes.
231
+
232
+You can also [download my PrusaSlicer configuration for the Sparkmaker](files/config_sparkmaker.ini) or even for [all of my printers](files/PrusaSlicer_config_bundle.ini), if you're so inclined.
233
+
234
+As a test I printed [this model](https://www.printables.com/model/296411-metal-gear-mk-ii-from-game-metal-gear-solid-4), scaled down to 50% with a layer height of 0.1mm.
235
+This took about 3½ hours.
236
+For an early test I'm really happy with the results.
237
+Even scaled down the very fine connections between the body and head are strong enough to hold them together.
238
+
239
+<!--%
240
+lightgallery([
241
+    [ "img/sparkmaker_21.jpg", "Small Metal Gear Mk. II figurine" ],
242
+])
243
+%-->
244
+
245
+## More Pictures
246
+<a class="anchor" name="more_pictures"></a>
247
+
248
+<div class="collapse">Some more photographs I didn't use above.</div>
249
+<div class="collapsecontent">
250
+<!--%
251
+lightgallery([
252
+    [ "img/sparkmaker_1.jpg", "Badly lit look at endstop trigger" ],
253
+    [ "img/sparkmaker_4.jpg", "Badly lit look into printer body" ],
254
+    [ "img/sparkmaker_7.jpg", "Badly lit look at UV LEDs" ],
255
+    [ "img/sparkmaker_13.jpg", "Badly lit look at mainboard" ],
256
+])
257
+%-->
258
+</div>

+ 2024
- 0
static/files/PrusaSlicer_config_bundle.ini
文件差异内容过多而无法显示
查看文件


+ 105
- 0
static/files/config_sparkmaker.ini 查看文件

@@ -0,0 +1,105 @@
1
+# generated by PrusaSlicer 2.5.0 on 2023-01-03 at 11:14:59 UTC
2
+absolute_correction = 0
3
+area_fill = 50
4
+bed_custom_model = 
5
+bed_custom_texture = 
6
+bed_shape = 0x0,99.8169x0,99.8169x56.103,0x56.103
7
+bottle_cost = 0
8
+bottle_volume = 1000
9
+bottle_weight = 1
10
+compatible_printers_condition_cummulative = "printer_model==\"SL1\"";"printer_model==\"SL1\""
11
+compatible_prints = 
12
+compatible_prints_condition = layer_height == 0.1
13
+compatible_prints_condition_cummulative = "layer_height == 0.1"
14
+default_sla_material_profile = Prusa Orange Tough @0.05
15
+default_sla_print_profile = 0.05 Normal
16
+display_height = 56.103
17
+display_mirror_x = 0
18
+display_mirror_y = 0
19
+display_orientation = landscape
20
+display_pixels_x = 854
21
+display_pixels_y = 480
22
+display_width = 99.8169
23
+elefant_foot_compensation = 0
24
+elefant_foot_min_width = 0.2
25
+exposure_time = 15
26
+faded_layers = 10
27
+fast_tilt_time = 5
28
+gamma_correction = 1
29
+high_viscosity_tilt_time = 10
30
+hollowing_closing_distance = 2
31
+hollowing_enable = 0
32
+hollowing_min_thickness = 3
33
+hollowing_quality = 0.5
34
+host_type = octoprint
35
+inherits_cummulative = "0.1 Fast";"Prusa Orange Tough @0.1";"Original Prusa SL1"
36
+initial_exposure_time = 120
37
+initial_layer_height = 0.1
38
+layer_height = 0.1
39
+material_colour = #FF8040
40
+material_correction = 1,1,1
41
+material_correction_x = 1
42
+material_correction_y = 1
43
+material_correction_z = 1
44
+material_density = 1
45
+material_notes = 
46
+material_print_speed = fast
47
+material_type = Tough
48
+material_vendor = Made for Prusa
49
+max_exposure_time = 150
50
+max_initial_exposure_time = 300
51
+max_print_height = 120
52
+min_exposure_time = 1
53
+min_initial_exposure_time = 1
54
+output_filename_format = [input_filename_base].sl1
55
+pad_around_object = 0
56
+pad_around_object_everywhere = 0
57
+pad_brim_size = 1.6
58
+pad_enable = 1
59
+pad_max_merge_distance = 50
60
+pad_object_connector_penetration = 0.3
61
+pad_object_connector_stride = 10
62
+pad_object_connector_width = 0.5
63
+pad_object_gap = 1
64
+pad_wall_height = 0
65
+pad_wall_slope = 45
66
+pad_wall_thickness = 0.5
67
+physical_printer_settings_id = 
68
+print_host = 
69
+printer_model = SL1
70
+printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_SL1\n
71
+printer_settings_id = Sparkmaker
72
+printer_technology = SLA
73
+printer_variant = default
74
+printer_vendor = 
75
+printhost_apikey = 
76
+printhost_cafile = 
77
+relative_correction = 1,1
78
+relative_correction_x = 1
79
+relative_correction_y = 1
80
+relative_correction_z = 1
81
+sla_material_settings_id = Prusa Orange Tough @0.1 - Copy
82
+sla_print_settings_id = 0.1 Fast - Copy
83
+slice_closing_radius = 0.005
84
+slicing_mode = regular
85
+slow_tilt_time = 8
86
+support_base_diameter = 3
87
+support_base_height = 1
88
+support_base_safety_distance = 1
89
+support_buildplate_only = 0
90
+support_critical_angle = 45
91
+support_head_front_diameter = 0.5
92
+support_head_penetration = 0.5
93
+support_head_width = 3
94
+support_max_bridge_length = 10
95
+support_max_bridges_on_pillar = 3
96
+support_max_pillar_link_distance = 10
97
+support_object_elevation = 5
98
+support_pillar_connection_mode = zigzag
99
+support_pillar_diameter = 1.3
100
+support_pillar_widening_factor = 0
101
+support_points_density_relative = 100
102
+support_points_minimal_distance = 1
103
+support_small_pillar_diameter_percent = 60%
104
+supports_enable = 1
105
+thumbnails = 400x400,800x480

二进制
static/img/sparkmaker_1.jpg 查看文件


二进制
static/img/sparkmaker_10.jpg 查看文件


二进制
static/img/sparkmaker_10_small.jpg 查看文件


二进制
static/img/sparkmaker_11.jpg 查看文件


二进制
static/img/sparkmaker_11_small.jpg 查看文件


二进制
static/img/sparkmaker_12.jpg 查看文件


二进制
static/img/sparkmaker_12_small.jpg 查看文件


二进制
static/img/sparkmaker_13.jpg 查看文件


二进制
static/img/sparkmaker_13_small.jpg 查看文件


二进制
static/img/sparkmaker_14.jpg 查看文件


二进制
static/img/sparkmaker_14_small.jpg 查看文件


二进制
static/img/sparkmaker_15.jpg 查看文件


二进制
static/img/sparkmaker_15_small.jpg 查看文件


二进制
static/img/sparkmaker_16.jpg 查看文件


二进制
static/img/sparkmaker_16_small.jpg 查看文件


二进制
static/img/sparkmaker_17.jpg 查看文件


二进制
static/img/sparkmaker_17_small.jpg 查看文件


二进制
static/img/sparkmaker_18.jpg 查看文件


二进制
static/img/sparkmaker_18_small.jpg 查看文件


二进制
static/img/sparkmaker_19.jpg 查看文件


二进制
static/img/sparkmaker_19_small.jpg 查看文件


二进制
static/img/sparkmaker_1_small.jpg 查看文件


二进制
static/img/sparkmaker_2.jpg 查看文件


二进制
static/img/sparkmaker_20.mp4 查看文件


二进制
static/img/sparkmaker_20_poster.png 查看文件


二进制
static/img/sparkmaker_20_thumb.png 查看文件


二进制
static/img/sparkmaker_21.jpg 查看文件


二进制
static/img/sparkmaker_21_small.jpg 查看文件


二进制
static/img/sparkmaker_22.jpg 查看文件


二进制
static/img/sparkmaker_22_small.jpg 查看文件


二进制
static/img/sparkmaker_23.jpg 查看文件


二进制
static/img/sparkmaker_23_small.jpg 查看文件


二进制
static/img/sparkmaker_24.jpg 查看文件


二进制
static/img/sparkmaker_24_small.jpg 查看文件


二进制
static/img/sparkmaker_25.jpg 查看文件


二进制
static/img/sparkmaker_25_small.jpg 查看文件


二进制
static/img/sparkmaker_26.jpg 查看文件


二进制
static/img/sparkmaker_26_small.jpg 查看文件


二进制
static/img/sparkmaker_27.png 查看文件


二进制
static/img/sparkmaker_27_small.png 查看文件


二进制
static/img/sparkmaker_28.png 查看文件


二进制
static/img/sparkmaker_28_small.png 查看文件


二进制
static/img/sparkmaker_29.png 查看文件


二进制
static/img/sparkmaker_29_small.png 查看文件


二进制
static/img/sparkmaker_2_small.jpg 查看文件


二进制
static/img/sparkmaker_3.jpg 查看文件


二进制
static/img/sparkmaker_3_small.jpg 查看文件


二进制
static/img/sparkmaker_4.jpg 查看文件


二进制
static/img/sparkmaker_4_small.jpg 查看文件


二进制
static/img/sparkmaker_5.jpg 查看文件


二进制
static/img/sparkmaker_5_small.jpg 查看文件


二进制
static/img/sparkmaker_6.jpg 查看文件


二进制
static/img/sparkmaker_6_small.jpg 查看文件


二进制
static/img/sparkmaker_7.jpg 查看文件


二进制
static/img/sparkmaker_7_small.jpg 查看文件


二进制
static/img/sparkmaker_8.jpg 查看文件


二进制
static/img/sparkmaker_8_small.jpg 查看文件


二进制
static/img/sparkmaker_9.jpg 查看文件


二进制
static/img/sparkmaker_9_small.jpg 查看文件


正在加载...
取消
保存