Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
3689 commits
Select commit Hold shift + click to select a range
71aec9f
Refactor OpsRenderer to remove unused index VBOs and update shader to…
knipknap Jul 30, 2026
7ffc9d7
Remove dead code from 2D canvas
knipknap Jul 30, 2026
9c74ca7
Remove dead code from 3D canvas gl_utils
knipknap Jul 30, 2026
e96913a
Remove dead code from pipeline artifact
knipknap Jul 30, 2026
df1fc3b
Remove dead pipeline encoders, stitch_chunk_to_bitmap, and their tests
knipknap Jul 30, 2026
32b8746
Remove dead coordinate space classes
knipknap Jul 30, 2026
87f6ae2
Remove dead code from pipeline
knipknap Jul 30, 2026
4c65c7d
Remove dead EncodedOutput serialization test
knipknap Jul 30, 2026
3f98ac9
Update raygeo dependency to version 1.27.0 in requirements files
knipknap Jul 30, 2026
d3c61ee
update changelog and translations for 1.9.0-beta1
knipknap Jul 30, 2026
03a9a2b
try fixing flaky pipeline test
knipknap Jul 30, 2026
ccaeebd
Update raygeo to version 1.27.1
knipknap Jul 30, 2026
2c56f59
fix(mac): restore Monterey-compatible bundles
pgilfernandez Jul 30, 2026
6c2a653
Merge pull request #322 from pgilfernandez/fix-190beta1-issues
knipknap Jul 30, 2026
8ecf6d0
Fix ChArUco detection array shapes
trixdaddy Jul 30, 2026
25d4e2e
Merge pull request #323 from trixdaddy/fix/charuco-corner-shapes
knipknap Jul 30, 2026
6d06efe
Fix intent-rebuild hot loop on docs without workflow content
knipknap Jul 31, 2026
3ef3334
Expose disjoint pockets as multi-face parts and surface assembler war…
knipknap Aug 1, 2026
faf2826
Update raygeo to version 1.29.0
knipknap Aug 1, 2026
3959fc8
Add CNC Essentials addon with milling steps and assembly warnings
knipknap Aug 1, 2026
09b1905
feat: machine capabilities and generalized head model
knipknap Aug 1, 2026
8e437e4
fix: serialize CNC step attributes in project files
knipknap Aug 1, 2026
4b9a6a7
refactor: rename selected_laser_uid to selected_head_uid
knipknap Aug 1, 2026
bef12bb
feat: introduce additive LaserStep base in laser addon
knipknap Aug 1, 2026
5b8bc3d
fix: disambiguate EngraveStep raster power range from max_power
knipknap Aug 1, 2026
0efeb05
refactor: give steps the machine, drop MachineDefaults
knipknap Aug 2, 2026
6dc2dd8
refactor: strip laser attributes from core Step
knipknap Aug 2, 2026
d1272dd
fix: power-dim 3D toolpaths on first open
knipknap Aug 2, 2026
1660fb3
refactor: separate driver features from step capabilities
knipknap Aug 2, 2026
9f5aab0
add varset.merge_varsets()
knipknap Aug 2, 2026
80488b5
refactor: registry-backed step capabilities and machine-driven settings
knipknap Aug 2, 2026
7bd81ca
refactor: composable step settings pages, rows, and groups
knipknap Aug 2, 2026
55914b6
remove a test that depended on an addon
knipknap Aug 2, 2026
3a2b3cd
test: fix flaky widget-tree search in post-processing page test
knipknap Aug 2, 2026
00c7a3c
feat: extend recipe system with step-type targeting
knipknap Aug 2, 2026
0af2cd8
fix: replace deprecated GTK CSS APIs
knipknap Aug 2, 2026
00e8762
feat: add ROTARY machine capability inferred from rotary modules
knipknap Aug 2, 2026
4951e6a
fix: report original step type in missing features dialog
knipknap Aug 2, 2026
4ce3570
refactor: de-duplicate kerf and path offset into a single offset_mm
knipknap Aug 2, 2026
dd0587d
update recipe editor screenshots and docs
knipknap Aug 2, 2026
44e855d
feat: unified machine configuration wizard with AI spec lookup
knipknap Aug 3, 2026
38def6c
Update translations
knipknap Aug 3, 2026
a85d7b3
feat: import SVG colors as layers (raygeo 1.31.0)
knipknap Aug 4, 2026
527a11c
build: bump raygeo to 1.31.1
knipknap Aug 4, 2026
1158e26
deps: bump raygeo to 1.31.2
knipknap Aug 4, 2026
14f3571
Update docs and translations for release 1.9.0-beta2
knipknap Aug 4, 2026
5c81b40
test: mock glDepthMask in ops renderer tests
knipknap Aug 4, 2026
f9c9a48
deps: bump pypdf, GitPython, aiohttp and fix npm vulns
knipknap Aug 4, 2026
948e732
feat: add color rules to map SVG colors to step types
knipknap Aug 4, 2026
3110e8a
add some icons to avoid theme fallback that breaks on some platforms
knipknap Aug 4, 2026
f8ba4d0
update changelog and metainfo
knipknap Aug 4, 2026
d440c6b
feat: add delete entry to step context menu in layer workflow strip
knipknap Aug 4, 2026
1aa0bfe
fix: replace PIL with pure-Python color parser in normalize_color
knipknap Aug 4, 2026
7c0160b
refactor: unit spin rows use a subtitle format string with {unit}/{ma…
knipknap Aug 5, 2026
b82ad89
feat: add service registry + settings-page hooks and enforce addon re…
knipknap Aug 5, 2026
bd6b840
feat: add UnitSystem enum, driver detection, and machine settings UI
knipknap Aug 5, 2026
fd2bd71
feat: make dimensional UI fields unit-aware
knipknap Aug 5, 2026
f6e87d4
Bump raygeo to 1.32.1 and fix raster pixel extent
knipknap Aug 5, 2026
24a8434
update translations
knipknap Aug 5, 2026
e1b2fcc
feat: driver communication in machine-native units
knipknap Aug 5, 2026
f3ddd1b
remove obsolete vector_config references in image metadata dialog
knipknap Aug 5, 2026
fa1dbab
fix: keep scanline overlay visible after playback completes
knipknap Aug 6, 2026
33960f3
fix: wake in-flight ping-pong on cancel in simple GRBL driver
knipknap Aug 6, 2026
4a0ca0f
feat: draw 2D and 3D canvas grids in the preferred length unit
knipknap Aug 6, 2026
eba952f
feat: warn when project uses unsupported cooling method
knipknap Aug 6, 2026
9dd38a8
fix: stop spin rows from reformatting text while editing
knipknap Aug 6, 2026
8d094a9
update api_version to 18 for multiple addons
knipknap Aug 6, 2026
b04f53b
refactor: derive step recipe keys from recipe_varset()
knipknap Aug 6, 2026
6d41741
refactor: split unit_spin_row into pref_rows package
knipknap Aug 6, 2026
73de980
3d canvas cleanup: introduce color_lut_provider to de-duplicate lut c…
knipknap Aug 6, 2026
b2c55d7
refactor: ingest compiled vertex/overlay layers in 3D renderers
knipknap Aug 6, 2026
52359ea
fix: render laser beam over scanline ring buffer
knipknap Aug 6, 2026
2e84dcb
refactor: ingest compiled texture layers in TextureArtifactRenderer
knipknap Aug 6, 2026
0cdf38c
refactor: move 3D scene rendering into SceneRenderer with per-rendere…
knipknap Aug 6, 2026
e4d04ef
refactor: use public OpPlayer snapshots API; remove dead 3D shims
knipknap Aug 6, 2026
1ad8247
fix: refresh step settings when a recipe is applied
knipknap Aug 6, 2026
83715fe
refactor: move machine-for-layer config out of the 3D renderer
knipknap Aug 6, 2026
8a38335
refactor: render playback controls as a bar below the 3D canvas
knipknap Aug 6, 2026
c77bf51
fix: apply per-widget CSS for material colors in list
knipknap Aug 6, 2026
09149a6
recipe manager: show selected step in recipe description
knipknap Aug 6, 2026
9def9f2
refactor: make screenshot filenames mirror targets 1:1
knipknap Aug 6, 2026
2cef71c
fix: remove invalid 'infinite' keyword from blobShape transition
knipknap Aug 6, 2026
2fbe358
fix: migrate legacy opsproducer params when loading steps
knipknap Aug 6, 2026
698c7fc
refactor: move shaders and renderer base into dedicated modules
knipknap Aug 6, 2026
d0f44db
refactor: isolate GL state and shader uniforms at the orchestrator level
knipknap Aug 6, 2026
a690024
refactor: normalize all renderers to prepare(ctx) + render(ctx, shaders)
knipknap Aug 6, 2026
fc946e1
refactor: replace min/max_value_in_base bounds with base-unit lower/u…
knipknap Aug 7, 2026
a0801fd
refactor: drive scene rendering through an ordered render registry
knipknap Aug 7, 2026
19ea1ea
fix: untrack zone renderer GL objects before deleting them
knipknap Aug 7, 2026
8dd5444
fix: preserve frequency and pulse width in MachineState.copy
knipknap Aug 7, 2026
4dadabc
fix: re-upload text atlas on GL context re-init
knipknap Aug 7, 2026
c62be68
fix: look up view_bg_color as fallback for 3D canvas background
knipknap Aug 7, 2026
2942466
refactor: deduplicate rotary-axis resolution across player, snapshots…
knipknap Aug 7, 2026
d0ee14e
fix: force isolated config for screenshot runs
knipknap Aug 7, 2026
149739e
Move playback glue from Canvas3D onto PlaybackOverlay
knipknap Aug 7, 2026
ebf6cca
Extract 3D camera interaction into CameraController
knipknap Aug 7, 2026
2767b21
Unify theme colour resolution into a shared service
knipknap Aug 7, 2026
35a8550
Extract chunked artifact upload into ChunkedUploadController
knipknap Aug 7, 2026
93d5637
Decouple WorldSurface canvas from Rayforge config
knipknap Aug 7, 2026
25b6d6c
Extract machine and document signal wiring into DocSignalHub
knipknap Aug 7, 2026
5dda002
Extract public build_snapshots from OpPlayer
knipknap Aug 7, 2026
5493322
Extract ScenePresenter from Canvas3D
knipknap Aug 7, 2026
94efbdf
Extract RenderContextBuilder from Canvas3D
knipknap Aug 7, 2026
45567b4
Tidy Canvas3D bridge accessors and Shader cleanup guard
knipknap Aug 7, 2026
e9e8a13
Demote diagnostic logs to debug level
knipknap Aug 7, 2026
1310f33
Standardize matrix convention at the shader boundary
knipknap Aug 7, 2026
7c3f08b
Cache colour LUT arrays in ColorLutProvider
knipknap Aug 7, 2026
812b5ef
Refactor render context into mutable sections updated per frame
knipknap Aug 7, 2026
c38f60c
Stop OpPlayer from mutating live machine configuration
knipknap Aug 7, 2026
900e14a
Move presenter signal wiring out of Canvas3D into the presenter
knipknap Aug 7, 2026
b257a15
Unify renderer base abstraction and normalize teardown
knipknap Aug 7, 2026
6e03b9d
Type chunked upload items and simplify dispatch
knipknap Aug 7, 2026
95774ad
Rename compile_scene_in_thread and centralize preview ops access
knipknap Aug 7, 2026
aefb71e
Propagate generation_id from job artifact into compiled scene
knipknap Aug 7, 2026
0938632
fix(sim3d): keep texture alpha constant so it no longer brightens aft…
knipknap Aug 7, 2026
e709c17
feat(sim3d): zoom and orbit around the point under the cursor
knipknap Aug 7, 2026
cf57d89
feat(sim3d): smooth distance-based playback with sub-command interpol…
knipknap Aug 7, 2026
309e618
feat(sim3d): glide step buttons instead of jumping
knipknap Aug 8, 2026
a6a20cb
fix(sim3d): use unmapped ops for playback time model
knipknap Aug 8, 2026
f0d0f75
deps: bump raygeo to 1.33.0
knipknap Aug 8, 2026
31d1a11
update translations
knipknap Aug 8, 2026
3800d60
test(sim3d): mock missing GL calls in renderer and theme tests
knipknap Aug 8, 2026
bcdbf4c
refactor: migrate deprecated typing aliases to native types
knipknap Aug 8, 2026
a33de13
update changelog and metainfo for 1.9.0-beta4 release
knipknap Aug 8, 2026
b854792
ci: enable dependabot and add pixi dependency update workflow
knipknap Aug 8, 2026
75898cb
build(deps): bump actions/stale from 10 to 11
dependabot[bot] Aug 8, 2026
5d48871
build(deps): bump actions/download-artifact from 4 to 8
dependabot[bot] Aug 8, 2026
748b2bf
build(deps): bump actions/setup-python from 5 to 7
dependabot[bot] Aug 8, 2026
3e573cb
build(deps): bump actions/checkout from 6 to 7
dependabot[bot] Aug 8, 2026
972f7bc
build(deps): bump softprops/action-gh-release from 2 to 3
dependabot[bot] Aug 8, 2026
df57c74
build(deps): bump @easyops-cn/docusaurus-search-local in /website
dependabot[bot] Aug 8, 2026
1aa6499
Merge pull request #325 from barebaric/dependabot/github_actions/acti…
knipknap Aug 8, 2026
4b3a361
Merge pull request #326 from barebaric/dependabot/github_actions/acti…
knipknap Aug 8, 2026
7698285
Merge pull request #328 from barebaric/dependabot/github_actions/acti…
knipknap Aug 8, 2026
30c98e1
Merge pull request #331 from barebaric/dependabot/npm_and_yarn/websit…
knipknap Aug 8, 2026
515e24a
Merge pull request #327 from barebaric/dependabot/github_actions/acti…
knipknap Aug 8, 2026
93df17f
build(deps): bump react from 18.3.1 to 19.2.8 in /website
dependabot[bot] Aug 8, 2026
1128291
Merge pull request #329 from barebaric/dependabot/github_actions/soft…
knipknap Aug 8, 2026
70c3f2d
deps: update pixi dependencies and fix resulting type errors
knipknap Aug 8, 2026
114bb94
build(deps): bump react-dom from 18.3.1 to 19.2.8 in /website
knipknap Aug 8, 2026
b4e3e30
Merge pull request #330 from barebaric/dependabot/npm_and_yarn/websit…
knipknap Aug 8, 2026
5c95fa6
Constrain right panel width so it cannot obscure the canvas overlays
knipknap Aug 8, 2026
528fa40
fix(sim3d): grab keyboard focus when the 3D canvas is clicked
knipknap Aug 8, 2026
95aa61c
refactor(pref_rows): re-export row widgets from package init
knipknap Aug 8, 2026
e13e681
feat(addon): add default state to addon metadata and update state ret…
knipknap Aug 8, 2026
6d86754
feat(settings): implement live updates for addon-contributed pages in…
knipknap Aug 8, 2026
5818d20
add raygeo to vscode workspace
knipknap Aug 8, 2026
f5ebd65
add an experimental / unfinished tool library addon
knipknap Aug 8, 2026
11db39b
lint: add ruff to pixi lint and apply safe autofixes
knipknap Aug 8, 2026
3fb2f5a
apply the second batch of ruff auto-fixes
knipknap Aug 8, 2026
0f54b65
lint: fix low-count ruff errors (SIM118, LOG015, UP007, F401, B018, T…
knipknap Aug 8, 2026
5e530a7
lint: fix P1 errors (G201, DTZ005, TRY004)
knipknap Aug 8, 2026
9a4fec8
fix ruff errors in scripts
knipknap Aug 8, 2026
3f8fc65
lint: fix INT001 by using format() instead of f-strings in gettext calls
knipknap Aug 8, 2026
bf957b3
lint: fix SIM117 by combining nested with statements
knipknap Aug 8, 2026
473b794
lint: fix F841 unused exception variables
knipknap Aug 8, 2026
581b18e
lint: fix S110 try-except-pass by narrowing or logging
knipknap Aug 8, 2026
bb0cfd0
lint: fix SIM102 by combining nested if statements
knipknap Aug 8, 2026
e170654
lint: fix BLE001 by narrowing exceptions in ui_gtk
knipknap Aug 8, 2026
2daa297
lint: fix BLE001 blind exceptions and E501 line lengths
knipknap Aug 8, 2026
2f834a5
lint: fix E402 by adding file-level flake8 noqa directives
knipknap Aug 8, 2026
8322a8a
lint: fix pyright errors across steps, drivers, and tests
knipknap Aug 9, 2026
37df374
lint: fix RUF012 by annotating mutable class attributes as ClassVar
knipknap Aug 9, 2026
e186b23
hide a deprecation warning in third party library; fix another
knipknap Aug 9, 2026
ac750b8
lint: remove unused PRODUCER_CLASS attribute from Step class
knipknap Aug 9, 2026
43cb628
fix: pan 3D canvas by dragging the plane 1:1 with the mouse
knipknap Aug 9, 2026
bc41c49
hide Gtk deprecations for versions that don't exist yet
knipknap Aug 9, 2026
e4e83a9
fix: incorrect cylinder angle interpolation during animation
knipknap Aug 9, 2026
f20f8cf
fix: run machine switch config update on the main thread
knipknap Aug 9, 2026
925a461
fix: catch all load errors when loading 3D models
knipknap Aug 9, 2026
d57fb8f
fix: model could obscure ops in 3d view
knipknap Aug 9, 2026
8278e2d
fix: draw toolpath and scanline trail above the raster texture
knipknap Aug 9, 2026
6c9fa13
feat: render raster scanlines at physical laser dot width
knipknap Aug 9, 2026
20a9aee
fix: use max-reduction mipmaps to prevent raster minification moire
knipknap Aug 9, 2026
b817e65
refactor: move scanline dilation into raygeo rasterizer
knipknap Aug 9, 2026
7f8253e
fix: update render registry order assertions for toolpath and ring trail
knipknap Aug 9, 2026
3c2bdef
fix: mock remaining GL calls in Windows-sensitive renderer tests
knipknap Aug 9, 2026
4e07eeb
fix: mock remaining GL calls missed in renderer tests
knipknap Aug 9, 2026
7771cad
feat: add tutorial spotlight and video tutorial contribution sections…
knipknap Aug 9, 2026
3525873
memory improvement: only compute a kinematic mapping if a rotary modu…
knipknap Aug 9, 2026
076eb56
Update consumers for flat op maps and add raster profiling script
knipknap Aug 9, 2026
b2d2b3d
memory improvement: adopt the new raygeo CompressedArray
knipknap Aug 9, 2026
5ed47a1
Don't retain assembly intermediates between builds
knipknap Aug 9, 2026
ea91d6b
Remove getattr playback_progress hack in sim3d renderers
knipknap Aug 9, 2026
be12929
Add MachineCodeOpMap.op_for_line() and use it in drivers
knipknap Aug 10, 2026
2db269d
Add x32/x64 playback speeds and keep focus off overlay controls
knipknap Aug 10, 2026
fbf88aa
add a uiscript to take a snapshot of memory consumption
knipknap Aug 10, 2026
fd90777
Use bytearray-backed MachineCodeOpMap and bump raygeo to 1.36.1
knipknap Aug 10, 2026
165e91c
Only build mapped_ops for rotary jobs in pipeline
knipknap Aug 10, 2026
b2d65bc
build(deps): bump prefix-dev/setup-pixi from 0.9.4 to 0.10.1
dependabot[bot] Aug 10, 2026
5dda356
build(deps): bump actions/upload-artifact from 4 to 7
dependabot[bot] Aug 10, 2026
44afed0
build(deps): bump webfactory/ssh-agent from 0.9.0 to 0.10.0
dependabot[bot] Aug 10, 2026
7e01512
Don't cache the final job ops in the pipeline
knipknap Aug 10, 2026
bc75259
Merge pull request #335 from barebaric/dependabot/github_actions/pref…
knipknap Aug 10, 2026
00eebb3
Merge pull request #336 from barebaric/dependabot/github_actions/acti…
knipknap Aug 10, 2026
0066627
Merge pull request #337 from barebaric/dependabot/github_actions/webf…
knipknap Aug 10, 2026
7750a56
ci: clean pixi cache before upgrading dependencies
knipknap Aug 10, 2026
a47347e
ci: keep pluggy pinned and trigger workflows from dependabot PRs
knipknap Aug 10, 2026
71cacb4
fix: arm --exit watcher only after uiscript has run
knipknap Aug 10, 2026
2e65652
fix: prepare sim3d vertex uploads in a worker thread
knipknap Aug 10, 2026
3d9d337
perf: reduce 3D canvas main-thread stalls after pipeline finish
knipknap Aug 10, 2026
6a50a44
deps: bump raygeo to 1.37.0
knipknap Aug 10, 2026
588f6cc
add a script for getting a memory snapshot
knipknap Aug 10, 2026
4085858
update changelog and translations for release 1.9.0
knipknap Aug 10, 2026
a4051bc
deps: update pixi dependencies
knipknap Aug 10, 2026
6509fc9
Merge pull request #340 from barebaric/pixi-dependabot
knipknap Aug 10, 2026
df784e5
show status labels for the pipeline state
knipknap Aug 10, 2026
346bc5a
replace step capabilities with multi-step-type recipe targeting
knipknap Aug 10, 2026
90a15b3
register transformer widgets via a dedicated registry
knipknap Aug 10, 2026
a6e1be2
register step settings pages via a dedicated registry
knipknap Aug 10, 2026
65b4b71
decouple transformer settings widgets from the editor
knipknap Aug 10, 2026
fbef2e7
move post-processing page infrastructure into post_processor package
knipknap Aug 11, 2026
045ce77
update raygeo version to 1.38.1 in requirements files
knipknap Aug 11, 2026
1105ab0
add post-processor settings to recipes
knipknap Aug 11, 2026
f70a7e8
move recipe widgets into a recipes package
knipknap Aug 11, 2026
b6eb909
feat: add CNC machining operations addon
knipknap Aug 11, 2026
498775c
Merge pull request #324 from barebaric/cnc
knipknap Aug 11, 2026
631fbbd
refactor: unify point transforms onto a single matrix path (#334)
knipknap Aug 11, 2026
33f5e35
refactor: unify item transforms onto the point-matrix path (#334)
knipknap Aug 11, 2026
519b571
feat: add workspace orientation as a matrix composition (#334)
knipknap Aug 11, 2026
06cbd3e
move coordspace.py from pipeline to machine module, and remove a laye…
knipknap Aug 11, 2026
c5c8f3a
refactor: add MachineView facade and decouple WorkOriginElement (#334)
knipknap Aug 11, 2026
c73af74
add translation tag to appstream metainfo
knipknap Aug 11, 2026
b2c0adc
fix: work around PyInstaller 6.22.0 spec generation bug on Windows
knipknap Aug 11, 2026
402a638
remove the dead Machine.get_visual_wcs_offset()
knipknap Aug 11, 2026
7c0e6da
add maturity field to addon metadata
knipknap Aug 12, 2026
a7958e9
deps: bump raygeo to 1.38.2, restore air assist emission
knipknap Aug 12, 2026
ae2667d
Merge pull request #341 from barebaric/addon-maturity
knipknap Aug 12, 2026
f0ae5bc
rename MachineView to MachinePanel
knipknap Aug 12, 2026
f3a8b40
fix: bump raygeo to 1.38.3 for WCS offset fix
knipknap Aug 12, 2026
7b8c1fd
refactor: route coordinate transforms through MachinePanel
knipknap Aug 12, 2026
c9696c8
refactor: make MachineSpace native-only, own rotation in MachinePanel
knipknap Aug 12, 2026
b4f24c7
feat: implement margin clamping for work area dimensions and add logg…
knipknap Aug 12, 2026
994979e
fix: add Signal to machine mock for tracking changes in WCS visual ma…
knipknap Aug 12, 2026
0edf6b9
refactor: make both canvases consume MachinePanel presentation
knipknap Aug 12, 2026
414f0f3
refactor: centralize inline world-transform helpers
knipknap Aug 12, 2026
81225e0
feat: rotation-aware jogging through MachinePanel
knipknap Aug 12, 2026
3c21c6a
feat: expose MACHINE-to-panel rotation and zone projections
knipknap Aug 12, 2026
2689773
feat: add confirmation dialog for enabling experimental addons
knipknap Aug 12, 2026
13b6bcd
prepare a release 1.9.1
knipknap Aug 12, 2026
c52fcbc
fix: use generous timeouts for process task tests on CI
knipknap Aug 12, 2026
aed0669
update recipe editor docs and screenshots
knipknap Aug 12, 2026
1031ecc
fix: handle null opsproducer_dict when loading legacy engrave steps
knipknap Aug 12, 2026
0e40812
fix: step name change not propagating to layer panel
knipknap Aug 12, 2026
f2a1b5b
chore: update changelog and metainfo for release 1.9.2 with bug fixes
knipknap Aug 12, 2026
d75ec71
feat: rename default-named layers to imported layer names
knipknap Aug 12, 2026
7ebf878
feat: add inline rename for layer items via double-click, menu, and F2
knipknap Aug 12, 2026
3d4538b
import dialog color indicator style tweak
knipknap Aug 12, 2026
fb710d3
Added Amharic language code to preferences page.
yosephfeleke251 Aug 13, 2026
40c3351
Create rayforge.po
yosephfeleke251 Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[flake8]
ignore = E127,E128,E121,E123,E126,E203,E226,E24,E704,W503,W504
exclude = .git,__pycache__,docs/source/conf.py,old,build,dist
max-line-length = 79
builtins = _
34 changes: 34 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

IMPORTANT:
If you are opening an issue related to the connection to your machine, please provide the debug dump!
See here how to save it: https://rayforge.org/docs/troubleshooting/debug

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Versions:**
You can collect the version info from the Rayforge about dialog.

**Extra info:**
Anything else?
20 changes: 20 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: 'enhancement'
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.
22 changes: 22 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "06:00"

- package-ecosystem: "pre-commit"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "06:00"

- package-ecosystem: "npm"
directory: "/website"
schedule:
interval: "weekly"
day: "monday"
time: "06:00"
217 changes: 217 additions & 0 deletions .github/workflows/build-exe.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,217 @@
name: Build Windows Executable

on:
push:
branches:
- main
tags:
- "*"
pull_request:
branches:
- "**"

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

jobs:
build:
runs-on: windows-2025
outputs:
version: ${{ steps.set-version.outputs.version }}
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0
fetch-tags: true

- name: Set Version
id: set-version
shell: bash
run: |
if [[ "${{ github.ref_type }}" == "tag" ]]; then
VERSION=${{ github.ref_name }}
elif git describe --tags >/dev/null 2>&1; then
VERSION=$(git describe --tags)
else
VERSION="0.0.0-$(git rev-parse --short HEAD)"
fi
if [ -z "$VERSION" ]; then
echo "Error: No git version number found!"
exit 1
fi
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Version: $VERSION"

- name: Set up MSYS2 Environment Shell
id: msys2
uses: msys2/setup-msys2@v2
with:
msystem: MINGW64
#update: true
# Minimal packages required to run the setup script itself
install: base-devel git unzip wget zip

- name: Configure Environment Paths
shell: msys2 {0}
run: |
# Use cygpath to reliably convert the runner's Windows path to an MSYS2 path.
# This is the standard and most robust method.
MSYS2_PATH_VAR=$(cygpath -u "${{ steps.msys2.outputs.msys2-location }}")

echo "MSYS2_PATH=$MSYS2_PATH_VAR" >> $GITHUB_ENV

# Add necessary binaries to the system PATH for subsequent steps
echo "$MSYS2_PATH_VAR/mingw64/bin" >> $GITHUB_PATH
echo "$MSYS2_PATH_VAR/usr/bin" >> $GITHUB_PATH

- name: Install Dependencies (win_setup.sh)
shell: msys2 {0}
run: |
# The MSYS2_PATH is required by the setup script to generate the .msys2_env file.
export MSYS2_PATH=${{ env.MSYS2_PATH }}
bash scripts/win/win_setup.sh

- name: Verify GI Typelib Files
shell: msys2 {0}
if: false
run: |
source $GITHUB_WORKSPACE/.msys2_env
echo "Listing GI typelib files:"
ls -l $GI_TYPELIB_PATH/*.typelib

- name: List MSYS2 packages
shell: msys2 {0}
if: false
run: |
source $GITHUB_WORKSPACE/.msys2_env
pacman --version
pacman -Q

- name: Check Cairo DLL Dependencies
shell: msys2 {0}
if: false
run: |
source $GITHUB_WORKSPACE/.msys2_env
$MSYS2_PATH/mingw64/bin/ntldd -R $MSYS2_PATH/mingw64/bin/libcairo-2.dll
$MSYS2_PATH/mingw64/bin/ntldd -R $MSYS2_PATH/mingw64/bin/libcairo-gobject-2.dll
$MSYS2_PATH/mingw64/bin/objdump -p $MSYS2_PATH/mingw64/bin/libcairo-2.dll | grep "DLL Name"
$MSYS2_PATH/mingw64/bin/objdump -p $MSYS2_PATH/mingw64/bin/libcairo-gobject-2.dll | grep "DLL Name"

- name: Run Test Suite (win_test.sh)
shell: msys2 {0}
run: |
# Enable debug logging for Python
export PYTHONUNBUFFERED=1
export PYTHONFAULTHANDLER=1
# Enable RUST backtrace for vtracer
export RUST_BACKTRACE=1
# The test script will source .msys2_env internally.
bash scripts/win/win_test.sh

- name: Run Build Process (win_build.sh)
shell: msys2 {0}
run: |
# The build script will source .msys2_env internally.
bash scripts/win/win_build.sh "${{ env.VERSION }}"

- name: Compress PyInstaller Bundle
shell: msys2 {0}
run: |
BUNDLE_DIR="dist/rayforge-v${{ env.VERSION }}"
ZIP_FILE="dist/rayforge-v${{ env.VERSION }}-windows-bundle.zip"
zip -r9 "${ZIP_FILE}" "${BUNDLE_DIR}"

- name: Upload PyInstaller bundle
uses: actions/upload-artifact@v7
with:
name: rayforge-v${{ steps.set-version.outputs.version }}-windows-bundle
path: dist/rayforge-v${{ steps.set-version.outputs.version }}-windows-bundle.zip

- name: Upload Installer Artifact
uses: actions/upload-artifact@v7
with:
name: rayforge-v${{ steps.set-version.outputs.version }}-installer.zip
path: dist/rayforge-v${{ steps.set-version.outputs.version }}-installer.exe
compression-level: 9

test-exe:
name: Test Executable
needs: build
runs-on: windows-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0

- name: Download Artifact
uses: actions/download-artifact@v8
with:
name: rayforge-v${{ needs.build.outputs.version }}-windows-bundle

- name: Extract Bundle
shell: bash
run: |
unzip rayforge-v${{ needs.build.outputs.version }}-windows-bundle.zip

- name: Test Executable (CLI)
shell: bash
run: |
echo "Listing files in current directory:"
ls -l

# Define paths based on the extracted directory
BUNDLE_DIR="dist/rayforge-v${{ needs.build.outputs.version }}"
EXECUTABLE_NAME="rayforge-v${{ needs.build.outputs.version }}.exe"

echo "Listing files in extracted directory:"
ls -lR "${BUNDLE_DIR}"

echo "Running executable directly:"
./"${BUNDLE_DIR}/${EXECUTABLE_NAME}" --help

- name: Test Executable (UI Smoke Test)
shell: bash
run: |
bash scripts/win/win_run_ui_test.sh \
"dist/rayforge-v${{ needs.build.outputs.version }}" \
"rayforge-v${{ needs.build.outputs.version }}.exe"

release:
name: Create GitHub Release
needs: [build, test-exe]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/') && github.repository == 'barebaric/rayforge'
outputs:
is_prerelease: ${{ steps.release_info.outputs.is_prerelease }}
steps:
- name: Determine release type
id: release_info
shell: bash
run: |
TAG="${{ github.ref_name }}"
if [[ "$TAG" =~ ^[0-9]+\.[0-9]+\.[0-9]+- ]]; then
echo "is_prerelease=true" >> "$GITHUB_OUTPUT"
else
echo "is_prerelease=false" >> "$GITHUB_OUTPUT"
fi

- name: Download Installer Artifact
uses: actions/download-artifact@v8
with:
# For the release, we use the installer artifact
name: rayforge-v${{ needs.build.outputs.version }}-installer.zip

- name: Create GitHub Release
uses: softprops/action-gh-release@v3
with:
# The file to attach to the release is the installer
files: rayforge-v${{ needs.build.outputs.version }}-installer.exe
draft: false
prerelease: ${{ steps.release_info.outputs.is_prerelease }}
name: Release ${{ needs.build.outputs.version }}
tag_name: ${{ github.ref_name }}
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Loading