175 Commits

Author SHA1 Message Date
b39fa0b693 Merge branch 'dev' into prova
All checks were successful
PR Checks / security-sast (pull_request) Successful in 30s
PR Checks / test-backend (pull_request) Successful in 26s
PR Checks / prettier-autofix (pull_request) Successful in 8s
PR Checks / test-frontend (pull_request) Successful in 1m2s
2026-03-03 13:41:38 +01:00
printcalc-ci
f3ea2be8b0 style: apply prettier formatting 2026-03-03 12:41:15 +00:00
c66903d22e fix(deploy): new test
All checks were successful
PR Checks / prettier-autofix (pull_request) Successful in 10s
PR Checks / security-sast (pull_request) Successful in 28s
PR Checks / test-backend (pull_request) Successful in 24s
PR Checks / test-frontend (pull_request) Successful in 1m6s
2026-03-03 13:39:50 +01:00
4bc815b04d Merge pull request 'fix(deploy): prova workflow' (#12) from prova into dev
All checks were successful
Build and Deploy / test-backend (push) Successful in 25s
Build and Deploy / build-and-push (push) Successful in 42s
Build and Deploy / deploy (push) Successful in 10s
PR Checks / prettier-autofix (pull_request) Successful in 7s
PR Checks / security-sast (pull_request) Successful in 28s
PR Checks / test-backend (pull_request) Successful in 24s
Reviewed-on: #12
2026-03-03 13:24:02 +01:00
127a321621 fix(deploy): fix security
All checks were successful
PR Checks / prettier-autofix (pull_request) Successful in 9s
PR Checks / security-sast (pull_request) Successful in 30s
PR Checks / test-backend (pull_request) Successful in 25s
2026-03-03 13:22:45 +01:00
27af5f7ebb fix(deploy): prova workflow
Some checks failed
PR Checks / prettier-autofix (pull_request) Successful in 7s
PR Checks / security-sast (pull_request) Failing after 27s
PR Checks / test-backend (pull_request) Successful in 38s
2026-03-03 13:02:24 +01:00
edef17d0ad Merge remote-tracking branch 'origin/prova' into prova
Some checks failed
PR Checks / prettier-autofix (pull_request) Successful in 7s
PR Checks / security-sast (pull_request) Failing after 21s
PR Checks / test-backend (pull_request) Successful in 37s
# Conflicts:
#	.gitea/workflows/pr-checks.yaml
2026-03-03 13:00:28 +01:00
76f648e82a fix(deploy): prova workflow 2026-03-03 13:00:14 +01:00
printcalc-ci
b68d702a3d style: apply prettier formatting 2026-03-03 11:58:34 +00:00
173a6b70d2 fix(deploy): prova workflow
Some checks failed
PR Checks / prettier-autofix (pull_request) Successful in 10s
PR Checks / security-sast (pull_request) Failing after 29s
PR Checks / test-backend (pull_request) Successful in 57s
2026-03-03 12:58:21 +01:00
c08add9b1e Merge remote-tracking branch 'origin/prova' into prova
Some checks failed
PR Checks / prettier-autofix (pull_request) Successful in 7s
PR Checks / qodana (pull_request) Failing after 8s
PR Checks / test-backend (pull_request) Successful in 39s
2026-03-03 12:55:20 +01:00
3ea8c1b2ad fix(deploy): prova workflow 2026-03-03 12:55:09 +01:00
printcalc-ci
20293cc044 style: apply prettier formatting 2026-03-03 11:46:26 +00:00
dd6f723271 fix(deploy): prova workflow
Some checks failed
PR Checks / qodana (pull_request) Failing after 32s
PR Checks / prettier-autofix (pull_request) Successful in 39s
PR Checks / test-backend (pull_request) Successful in 38s
2026-03-03 12:45:23 +01:00
c28d22ccdb fix(deploy): new worlfkow gitea
All checks were successful
Build and Deploy / test-backend (push) Successful in 38s
Build and Deploy / build-and-push (push) Successful in 15s
Build and Deploy / deploy (push) Successful in 8s
2026-03-03 12:43:20 +01:00
3abe90d8f3 fix(deploy): new worlfkow gitea 2026-03-03 12:42:23 +01:00
04cbf00a2d Merge branch 'main' into dev
All checks were successful
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 18s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 38s
Build, Test, Deploy and Analysis / deploy (push) Successful in 10s
Build, Test, Deploy and Analysis / qodana (push) Has been skipped
# Conflicts:
#	.gitea/workflows/cicd.yaml
2026-03-03 12:35:11 +01:00
be8e523574 fix(deploy): cicd.yaml
Some checks failed
Build, Test, Deploy and Analysis / qodana (pull_request) Failing after 12s
Build, Test, Deploy and Analysis / build-and-push (pull_request) Has been skipped
Build, Test, Deploy and Analysis / deploy (pull_request) Has been skipped
Build, Test, Deploy and Analysis / test-backend (pull_request) Successful in 39s
Build, Test, Deploy and Analysis / qodana (push) Has been skipped
Build, Test, Deploy and Analysis / test-backend (push) Has been skipped
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 17s
Build, Test, Deploy and Analysis / deploy (push) Successful in 8s
2026-03-03 12:33:18 +01:00
c680486157 fix(front-end): quantity changes and normalization
Some checks failed
Build, Test, Deploy and Analysis / qodana (push) Failing after 12s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 37s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 25s
Build, Test, Deploy and Analysis / deploy (push) Successful in 10s
2026-03-03 12:05:00 +01:00
90bdb5384d fix(front-end): color selector
Some checks failed
Build, Test, Deploy and Analysis / qodana (push) Failing after 17s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 41s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 23s
Build, Test, Deploy and Analysis / deploy (push) Successful in 9s
2026-03-03 11:49:40 +01:00
04ecda99ee fix(chore):
Some checks failed
Build, Test, Deploy and Analysis / qodana (push) Failing after 13s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 38s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 34s
Build, Test, Deploy and Analysis / deploy (push) Successful in 9s
2026-03-03 11:16:40 +01:00
2d1a783e9c fix(chore): prepare Qodana dirs
Some checks failed
Build, Test, Deploy and Analysis / qodana (push) Failing after 56s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 51s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 17s
Build, Test, Deploy and Analysis / deploy (push) Successful in 8s
2026-03-03 10:30:43 +01:00
ef2be1a3be Merge pull request 'dev' (#10) from dev into main
Some checks failed
Build, Test, Deploy and Analysis / qodana (push) Failing after 8s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 39s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 15s
Build, Test, Deploy and Analysis / deploy (push) Successful in 8s
Reviewed-on: #10
2026-03-03 10:26:24 +01:00
5c27d4d16b feat(back-end): pla tought
Some checks failed
Build, Test, Deploy and Analysis / qodana (push) Failing after 8s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 37s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 41s
Build, Test, Deploy and Analysis / deploy (push) Successful in 9s
2026-03-03 10:24:21 +01:00
654aa775db fix(back-end): implementation of security better
Some checks failed
Build, Test, Deploy and Analysis / qodana (push) Failing after 12s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 37s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 41s
Build, Test, Deploy and Analysis / deploy (push) Successful in 9s
2026-03-03 10:11:12 +01:00
9307ba6fba Merge pull request 'produzione 1' (#9) from dev into main
Some checks failed
Build, Test, Deploy and Analysis / qodana (push) Failing after 8s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 14s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 38s
Build, Test, Deploy and Analysis / deploy (push) Successful in 7s
Reviewed-on: #9
2026-03-03 09:58:03 +01:00
c0d6b480c1 fix(back-end):
Some checks failed
Build, Test, Deploy and Analysis / qodana (push) Failing after 8s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 38s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 16s
Build, Test, Deploy and Analysis / deploy (push) Successful in 9s
2026-03-03 09:57:39 +01:00
fdb1bcb282 fix(back-end): noozle diameter
Some checks failed
Build, Test, Deploy and Analysis / test-backend (push) Successful in 54s
Build, Test, Deploy and Analysis / qodana (push) Failing after 1m12s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 37s
Build, Test, Deploy and Analysis / deploy (push) Successful in 9s
Build, Test, Deploy and Analysis / qodana (pull_request) Failing after 11s
Build, Test, Deploy and Analysis / build-and-push (pull_request) Has been cancelled
Build, Test, Deploy and Analysis / deploy (pull_request) Has been cancelled
Build, Test, Deploy and Analysis / test-backend (pull_request) Has been cancelled
2026-03-03 09:44:35 +01:00
09a4ac064f fix(back-end) security issue
Some checks failed
Build, Test, Deploy and Analysis / test-backend (pull_request) Successful in 39s
Build, Test, Deploy and Analysis / build-and-push (push) Failing after 34s
Build, Test, Deploy and Analysis / deploy (pull_request) Successful in 8s
Build, Test, Deploy and Analysis / qodana (push) Failing after 8s
Build, Test, Deploy and Analysis / qodana (pull_request) Failing after 11s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 40s
Build, Test, Deploy and Analysis / build-and-push (pull_request) Successful in 20s
Build, Test, Deploy and Analysis / deploy (push) Has been skipped
2026-03-03 09:30:22 +01:00
c00ca5a32e feat(chore): added qodana analysis job
Some checks failed
Build, Test, Deploy and Analysis / test-backend (pull_request) Failing after 0s
Build, Test, Deploy and Analysis / build-and-push (pull_request) Has been skipped
Build, Test, Deploy and Analysis / deploy (pull_request) Has been skipped
Build, Test, Deploy and Analysis / qodana (pull_request) Failing after 0s
Build, Test, Deploy and Analysis / qodana (push) Failing after 32s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 1m30s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 42s
Build, Test, Deploy and Analysis / deploy (push) Successful in 8s
2026-03-03 09:19:05 +01:00
9955f23f31 feat(chore): added qodana analysis job
Some checks failed
Build, Test, Deploy and Analysis / qodana (pull_request) Waiting to run
Build, Test, Deploy and Analysis / qodana (push) Failing after 5m7s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 40s
Build, Test, Deploy and Analysis / test-backend (pull_request) Failing after 0s
Build, Test, Deploy and Analysis / build-and-push (pull_request) Has been skipped
Build, Test, Deploy and Analysis / deploy (pull_request) Has been skipped
Build, Test, Deploy and Analysis / build-and-push (push) Failing after 0s
Build, Test, Deploy and Analysis / deploy (push) Has been skipped
2026-03-03 09:04:12 +01:00
25afb355b4 feat(front-end): make responsive back-office 2026-03-03 08:43:13 +01:00
b7c399e3cb feat(back-end): new stock db and back-office improvements 2026-03-02 20:19:19 +01:00
02e58ea00f fix(home): reordered calculator and capabilities sections
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 56s
Build, Test and Deploy / build-and-push (push) Successful in 25s
Build, Test and Deploy / deploy (push) Successful in 10s
2026-03-02 19:44:55 +01:00
819e00e067 feat(back-end): fix order page
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 47s
Build, Test and Deploy / build-and-push (push) Successful in 25s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-27 20:22:18 +01:00
ed76b13e4c feat(back-end and front-end): back-office pazzo
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 44s
Build, Test and Deploy / build-and-push (push) Successful in 46s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-27 15:46:41 +01:00
47553ebb82 feat(back-end and front-end): back-office test 2026-02-27 15:07:39 +01:00
949770a741 feat(back-end and front-end): back-office 2026-02-27 15:07:32 +01:00
65e1ee3be6 feat(back-end and front-end): back-office
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 37s
Build, Test and Deploy / build-and-push (push) Successful in 1m4s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-27 12:51:48 +01:00
3f938db257 feat(back-end and front-end): back-office
Some checks failed
Build, Test and Deploy / test-backend (push) Failing after 38s
Build, Test and Deploy / build-and-push (push) Has been skipped
Build, Test and Deploy / deploy (push) Has been skipped
2026-02-27 12:44:06 +01:00
1598f35c08 feat(back-end): email improvements
Some checks failed
Build, Test and Deploy / test-backend (push) Failing after 34s
Build, Test and Deploy / deploy (push) Has been skipped
Build, Test and Deploy / build-and-push (push) Has been skipped
2026-02-27 12:09:50 +01:00
8e9afbf260 feat(back-end): email improvements
Some checks failed
Build, Test and Deploy / build-and-push (push) Has been cancelled
Build, Test and Deploy / deploy (push) Has been cancelled
Build, Test and Deploy / test-backend (push) Has been cancelled
2026-02-27 12:09:37 +01:00
6e52988cdd feat(front-end): delay on update
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 36s
Build, Test and Deploy / build-and-push (push) Successful in 22s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-27 11:50:17 +01:00
2e701d5597 feat(front-end): traslation de and fr4
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 35s
Build, Test and Deploy / build-and-push (push) Successful in 24s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-27 11:37:34 +01:00
150faf3b5a feat(front-end): traslation de and fr
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 35s
Build, Test and Deploy / build-and-push (push) Successful in 40s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-27 11:32:14 +01:00
64cd90eabc feat(front-end): traslation en 2026-02-27 11:10:45 +01:00
877171ceb1 feat(front-end): traslation in italian 2026-02-27 11:05:20 +01:00
521009de7c feat(front-end): gestione quantità massima e price for piece 2026-02-27 10:59:02 +01:00
8028e9c7b7 feat(back-end): model dimension 2026-02-27 10:43:59 +01:00
a85c57032d fix(front-end): calculator improvements 2026-02-27 10:43:06 +01:00
219b4e127d fix(front-end): calculator improvements in base quality settings
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 37s
Build, Test and Deploy / build-and-push (push) Successful in 23s
Build, Test and Deploy / deploy (push) Successful in 11s
2026-02-27 10:22:32 +01:00
f7ddab0e93 fix(front-end): red write and last commit for today
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 35s
Build, Test and Deploy / build-and-push (push) Successful in 22s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-26 22:30:34 +01:00
80a41b0cc2 feat(frontend e back-end): termini e condizioni
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 38s
Build, Test and Deploy / build-and-push (push) Successful in 1m3s
Build, Test and Deploy / deploy (push) Successful in 11s
2026-02-26 22:24:51 +01:00
6f3e601f21 feat(frontend): about improvments
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 35s
Build, Test and Deploy / build-and-push (push) Successful in 24s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-26 21:42:12 +01:00
e82862821e feat(frontend): fav icon e upload multiple files
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 35s
Build, Test and Deploy / build-and-push (push) Successful in 40s
Build, Test and Deploy / deploy (push) Successful in 10s
2026-02-26 19:41:40 +01:00
b6230e69e4 feat(frontend): update images, and desing home
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 42s
Build, Test and Deploy / build-and-push (push) Successful in 42s
Build, Test and Deploy / deploy (push) Successful in 10s
2026-02-26 19:09:59 +01:00
c58d674a70 feat(back-end - front end): improvements in email and invoice rendering
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 37s
Build, Test and Deploy / build-and-push (push) Successful in 45s
Build, Test and Deploy / deploy (push) Successful in 10s
2026-02-25 16:35:58 +01:00
fecb394272 fix(back-end) calculator improvements
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 41s
Build, Test and Deploy / build-and-push (push) Successful in 40s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-25 15:05:23 +01:00
54d12f4da0 fix(front-end): improvements
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 41s
Build, Test and Deploy / build-and-push (push) Successful in 49s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-25 10:53:08 +01:00
4ddd33662d fix(front-end): 3d view only for stl
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 33s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-24 13:12:29 +01:00
a6eae757c5 feat(front-end): upload only supported file and add step warning message
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 40s
Build, Test and Deploy / build-and-push (push) Successful in 24s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-24 13:06:16 +01:00
6463fac211 fix(back-end): email fix
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 34s
Build, Test and Deploy / build-and-push (push) Successful in 40s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-24 10:47:13 +01:00
57f6301e03 feat(back-end front-end): integration with twint
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 34s
Build, Test and Deploy / build-and-push (push) Successful in 43s
Build, Test and Deploy / deploy (push) Successful in 10s
2026-02-24 10:07:04 +01:00
699a968875 feat(back-end front-end): upgrade to the order componen instead of payment and order-confirmed
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 39s
Build, Test and Deploy / build-and-push (push) Successful in 1m3s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-24 08:44:42 +01:00
c1652798b4 feat(back-end front-end): new UX for
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 32s
Build, Test and Deploy / build-and-push (push) Successful in 39s
Build, Test and Deploy / deploy (push) Successful in 10s
2026-02-23 18:56:24 +01:00
ec4d512136 feat(back-end front-end): uuid truncated for better UX
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 36s
Build, Test and Deploy / build-and-push (push) Successful in 41s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-23 17:30:43 +01:00
abf47e0003 feat(back-end): email service and test
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 33s
Build, Test and Deploy / build-and-push (push) Successful in 33s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-23 16:20:11 +01:00
0438ba3ae5 feat(back-end): email service and test
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 49s
Build, Test and Deploy / build-and-push (push) Successful in 55s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-23 15:23:11 +01:00
c3f9539988 feat(front-enc):
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 34s
Build, Test and Deploy / build-and-push (push) Successful in 23s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-20 17:47:34 +01:00
1d82230564 feat(front-enc): fix back-ground
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 37s
Build, Test and Deploy / build-and-push (push) Successful in 39s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-20 17:11:44 +01:00
15d5d31d06 feat(back-end, front-enc): twint payment 2026-02-20 17:09:42 +01:00
ccc53b7d4f feat(back-end): bill and qr
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 33s
Build, Test and Deploy / build-and-push (push) Successful in 1m8s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-20 14:54:28 +01:00
8e12b3bcdf feat(back-end): add ClamAV service remember to add env and compose.deploy on server 2026-02-20 10:32:07 +01:00
0d23521cac feat(back-end): add ClamAV service remember to add env and compose.deploy on server 2026-02-19 15:59:33 +01:00
2189e58cc6 fix(deploy): update env
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 26s
Build, Test and Deploy / build-and-push (push) Successful in 13s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-18 22:04:22 +01:00
87f43f2239 fix(deploy): update env
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 27s
Build, Test and Deploy / build-and-push (push) Successful in 13s
Build, Test and Deploy / deploy (push) Failing after 9s
2026-02-18 22:00:06 +01:00
0ddfed4f07 fix(back-end): try fix profile manager
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 26s
Build, Test and Deploy / build-and-push (push) Successful in 14s
Build, Test and Deploy / deploy (push) Failing after 5s
2026-02-18 21:57:23 +01:00
e7daf79394 fix(back-end): try fix profile manager
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 26s
Build, Test and Deploy / build-and-push (push) Successful in 14s
Build, Test and Deploy / deploy (push) Failing after 5s
2026-02-18 21:53:34 +01:00
7bb94da45b fix(back-end): try fix profile manager
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 28s
Build, Test and Deploy / build-and-push (push) Successful in 17s
Build, Test and Deploy / deploy (push) Failing after 4s
2026-02-18 21:48:09 +01:00
d28609ee95 fix(back-end): try fix profile manager
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 28s
Build, Test and Deploy / build-and-push (push) Successful in 20s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-18 20:07:41 +01:00
8364ad0671 fix(back-end): try fix profile manager
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 27s
Build, Test and Deploy / build-and-push (push) Successful in 18s
Build, Test and Deploy / deploy (push) Failing after 7s
2026-02-18 19:50:21 +01:00
797b10e4ad fix(back-end): try fix profile manager
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 27s
Build, Test and Deploy / build-and-push (push) Has been cancelled
Build, Test and Deploy / deploy (push) Has been cancelled
2026-02-18 19:49:56 +01:00
ec77b76abb fix(back-end): try fix profile manager
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 25s
Build, Test and Deploy / build-and-push (push) Successful in 28s
Build, Test and Deploy / deploy (push) Successful in 10s
2026-02-18 19:33:57 +01:00
bb269d84a5 fix(back-end): shift model
Some checks failed
Build, Test and Deploy / build-and-push (push) Has been cancelled
Build, Test and Deploy / deploy (push) Has been cancelled
Build, Test and Deploy / test-backend (push) Has been cancelled
2026-02-17 16:34:40 +01:00
46eb980e24 fix(back-end): shift model
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m13s
Build, Test and Deploy / build-and-push (push) Successful in 28s
Build, Test and Deploy / deploy (push) Successful in 7s
2026-02-17 16:32:46 +01:00
85a4db1630 fix(back-end): shift model
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m13s
Build, Test and Deploy / build-and-push (push) Successful in 29s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-17 16:25:21 +01:00
701a10e886 fix(back-end): shift model
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 2m31s
Build, Test and Deploy / build-and-push (push) Successful in 1m47s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-17 15:35:17 +01:00
2eea773ee2 feat(back-end): files saved in disc
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m13s
Build, Test and Deploy / build-and-push (push) Successful in 16s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-12 21:25:29 +01:00
44f9408b22 feat(back-end & front-end): add session file
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m14s
Build, Test and Deploy / build-and-push (push) Successful in 39s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-12 19:24:58 +01:00
044fba8d5a feat(back-end & front-end): checkout, update form structure, add new DTOs, refactor order logic
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m15s
Build, Test and Deploy / build-and-push (push) Successful in 39s
Build, Test and Deploy / deploy (push) Successful in 10s
2026-02-12 19:01:48 +01:00
257c60fa5e feat(back-end): refactor session creation
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m13s
Build, Test and Deploy / build-and-push (push) Successful in 56s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-12 17:07:26 +01:00
5a84fb13c0 feat(back-end): cors config update
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m12s
Build, Test and Deploy / build-and-push (push) Successful in 35s
Build, Test and Deploy / deploy (push) Successful in 8s
2026-02-12 16:10:10 +01:00
89d84ed369 feat(back-end & web): improvements
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m12s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 7s
2026-02-12 16:02:03 +01:00
9c3d5fae12 feat(back-end & ): removed Abstract repository
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 1m12s
Build, Test and Deploy / build-and-push (push) Successful in 38s
Build, Test and Deploy / deploy (push) Has been cancelled
2026-02-12 16:00:03 +01:00
96ae9bb609 feat(back-end): removed Abstract repository
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m12s
Build, Test and Deploy / build-and-push (push) Successful in 29s
Build, Test and Deploy / deploy (push) Successful in 6s
2026-02-12 15:32:31 +01:00
9cbd856ab6 feat(back-end): new db for custom quote requests
Some checks failed
Build, Test and Deploy / test-backend (push) Failing after 42s
Build, Test and Deploy / build-and-push (push) Has been skipped
Build, Test and Deploy / deploy (push) Has been skipped
2026-02-12 15:26:58 +01:00
bb151ae835 feat(web): calculator improvements
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m12s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 6s
2026-02-12 14:49:23 +01:00
7ebaff322c feat(web): improvements in routes for calculator
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m12s
Build, Test and Deploy / build-and-push (push) Successful in 22s
Build, Test and Deploy / deploy (push) Successful in 6s
2026-02-12 12:44:12 +01:00
e17da96c22 fix(web): enrivoments
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m18s
Build, Test and Deploy / build-and-push (push) Successful in 26s
Build, Test and Deploy / deploy (push) Successful in 7s
2026-02-12 12:19:59 +01:00
3e9745c7cc feat(deploy): compose deploy fixed
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m20s
Build, Test and Deploy / build-and-push (push) Successful in 17s
Build, Test and Deploy / deploy (push) Successful in 6s
2026-02-12 12:07:16 +01:00
3da3e6c60c feat(deploy): compose deploy fixed
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m17s
Build, Test and Deploy / build-and-push (push) Successful in 18s
Build, Test and Deploy / deploy (push) Successful in 7s
2026-02-12 11:56:31 +01:00
85b823d614 feat(deploy): compose deploy fixed
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m13s
Build, Test and Deploy / build-and-push (push) Successful in 14s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-11 16:25:20 +01:00
d20d12c1f4 feat(deploy): compose deploy fixed
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m12s
Build, Test and Deploy / build-and-push (push) Successful in 13s
Build, Test and Deploy / deploy (push) Successful in 4s
2026-02-11 16:19:31 +01:00
ab5f6a609d feat(deploy): compose deploy fixed
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m12s
Build, Test and Deploy / build-and-push (push) Successful in 15s
Build, Test and Deploy / deploy (push) Successful in 6s
2026-02-11 16:14:00 +01:00
5ba203a8d1 feat(deploy): compose deploy fixed
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m13s
Build, Test and Deploy / build-and-push (push) Successful in 14s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-11 16:04:06 +01:00
3ca3f8e466 feat(deploy): compose deploy fixed
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m13s
Build, Test and Deploy / build-and-push (push) Successful in 14s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-11 15:54:06 +01:00
5620f6a8eb feat(deploy): compose deploy fixed
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m11s
Build, Test and Deploy / build-and-push (push) Successful in 13s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-11 15:50:09 +01:00
1583ff479c feat(deploy): compose deploy fixed
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m12s
Build, Test and Deploy / build-and-push (push) Successful in 13s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-11 15:46:06 +01:00
b7d81040e6 feat(deploy): fix deploy ports
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 1m14s
Build, Test and Deploy / build-and-push (push) Successful in 14s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-11 15:27:09 +01:00
b249cf2000 feat(deploy): fix deploy ports
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 1m12s
Build, Test and Deploy / build-and-push (push) Successful in 15s
Build, Test and Deploy / deploy (push) Failing after 3s
2026-02-11 15:21:41 +01:00
dfc27da142 feat(deploy): added cache Gradle step for faster deploy
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 1m40s
Build, Test and Deploy / build-and-push (push) Successful in 13s
Build, Test and Deploy / deploy (push) Failing after 3s
2026-02-11 15:10:03 +01:00
dde92af857 fix(deploy): fix regex
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 25s
Build, Test and Deploy / build-and-push (push) Successful in 35s
Build, Test and Deploy / deploy (push) Failing after 3s
2026-02-11 15:08:25 +01:00
7b92e63a49 fix(deploy): fix cicd.yaml printf fixed
Some checks failed
Build, Test and Deploy / test-backend (push) Failing after 25s
Build, Test and Deploy / build-and-push (push) Has been skipped
Build, Test and Deploy / deploy (push) Has been skipped
2026-02-11 15:03:07 +01:00
8fac8ac892 feat(back-end): db connections implemented and created users 2026-02-11 14:53:46 +01:00
e5183590c5 feat(back-end): db connections and other stuff
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 26s
Build, Test and Deploy / build-and-push (push) Successful in 15s
Build, Test and Deploy / deploy (push) Successful in 3s
2026-02-10 19:07:37 +01:00
3b4ef37e58 feat(web): * for reaquired field
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 43s
Build, Test and Deploy / build-and-push (push) Successful in 49s
Build, Test and Deploy / deploy (push) Successful in 4s
2026-02-09 19:29:14 +01:00
eb4ad8b637 feat(web): * for reaquired field
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 22s
Build, Test and Deploy / build-and-push (push) Successful in 37s
Build, Test and Deploy / deploy (push) Successful in 9s
2026-02-09 18:55:38 +01:00
f0e0f57e7c feat(web): multiple feature
Some checks failed
Build, Test and Deploy / build-and-push (push) Has been cancelled
Build, Test and Deploy / test-backend (push) Successful in 23s
Build, Test and Deploy / deploy (push) Has been cancelled
2026-02-09 18:54:06 +01:00
05e1c224f0 feat(web): success comnponent
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 26s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-09 18:07:29 +01:00
f1636d9057 feat(web): success message contact us
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 26s
Build, Test and Deploy / build-and-push (push) Successful in 27s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-09 17:59:51 +01:00
44d99b0a68 feat(web): new step for user details
Some checks failed
Build, Test and Deploy / test-backend (push) Has been cancelled
Build, Test and Deploy / build-and-push (push) Has been cancelled
Build, Test and Deploy / deploy (push) Has been cancelled
2026-02-09 17:53:43 +01:00
83b3008234 feat(web): new step for user details 2026-02-09 17:52:34 +01:00
78af87ac3c feat(web): new step for user details
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 25s
Build, Test and Deploy / build-and-push (push) Failing after 21s
Build, Test and Deploy / deploy (push) Has been skipped
2026-02-09 17:49:36 +01:00
b3c0413b7c feat(web): improvements in home and about us
Some checks failed
Build, Test and Deploy / test-backend (push) Failing after 1m55s
Build, Test and Deploy / build-and-push (push) Has been skipped
Build, Test and Deploy / deploy (push) Has been skipped
2026-02-09 17:38:02 +01:00
4f301b1652 feat(web): update quality print advanced and base
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 29s
Build, Test and Deploy / build-and-push (push) Successful in 23s
Build, Test and Deploy / deploy (push) Successful in 6s
2026-02-09 16:06:19 +01:00
debf153f58 feat(web): update quality print advanced and base
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 22s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-06 13:58:23 +01:00
f3d271ded2 feat(web): update color selector
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 21s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-06 13:40:44 +01:00
13790f2055 feat(web): update color selector
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 27s
Build, Test and Deploy / build-and-push (push) Successful in 24s
Build, Test and Deploy / deploy (push) Successful in 6s
2026-02-06 13:25:41 +01:00
bcdeafe119 chore(web): refractor
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 23s
Build, Test and Deploy / build-and-push (push) Successful in 22s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-06 11:33:25 +01:00
7978884ca6 feat(front-end): fix advanced view
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 23s
Build, Test and Deploy / build-and-push (push) Successful in 22s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-06 11:18:57 +01:00
cb7b44073c feat(front-end): responsive layout
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 31s
Build, Test and Deploy / build-and-push (push) Successful in 1m40s
Build, Test and Deploy / deploy (push) Successful in 6s
2026-02-06 11:09:46 +01:00
99ae6db064 feat(front-end): multiple file upload
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 22s
Build, Test and Deploy / build-and-push (push) Successful in 20s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-05 17:21:52 +01:00
fcf439e369 feat(front-end): multiple file upload
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 22s
Build, Test and Deploy / build-and-push (push) Successful in 20s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-05 17:14:26 +01:00
cecdfacd33 feat(front-end): multiple file upload
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 23s
Build, Test and Deploy / deploy (push) Has been cancelled
Build, Test and Deploy / build-and-push (push) Has been cancelled
2026-02-05 17:13:56 +01:00
5bc698815c fix(back-end): update profile inheritance
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 21s
Build, Test and Deploy / build-and-push (push) Failing after 19s
Build, Test and Deploy / deploy (push) Has been skipped
2026-02-05 17:12:18 +01:00
73ccf8f4de feat(web): fix col
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 23s
Build, Test and Deploy / build-and-push (push) Successful in 14s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-05 15:08:58 +01:00
0b4daed512 feat(web) improvements in ui for calculator
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 22s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 4s
2026-02-05 15:03:18 +01:00
8a7d736aa9 feat(web) improvements in ui for calculator
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 23s
Build, Test and Deploy / build-and-push (push) Successful in 23s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-05 14:57:32 +01:00
ce179cac62 feat(web) linked calculator and contact form
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 27s
Build, Test and Deploy / build-and-push (push) Successful in 24s
Build, Test and Deploy / deploy (push) Successful in 4s
2026-02-05 11:42:48 +01:00
ab7b95a3d7 feat(web) improvments in calculation page
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 29s
Build, Test and Deploy / build-and-push (push) Successful in 37s
Build, Test and Deploy / deploy (push) Successful in 6s
2026-02-05 09:44:54 +01:00
da8e476485 fix(web): traslation error
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 21s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 7s
2026-02-04 16:31:38 +01:00
810d5f6c0c feat(web): entire site responsive
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 22s
Build, Test and Deploy / build-and-push (push) Successful in 20s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-04 16:22:26 +01:00
8a75aed6d8 feat(web): entire site responsive
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 23s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 4s
2026-02-04 16:18:37 +01:00
a0efdc105d feat(web) about page
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 25s
Build, Test and Deploy / build-and-push (push) Successful in 22s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-04 15:58:37 +01:00
422d80a4d4 fix(deploy): fixed deploy for gradle.
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 26s
Build, Test and Deploy / build-and-push (push) Successful in 1m11s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-04 15:35:36 +01:00
db4df2573c fix(deploy): fixed deploy for gradle.
Some checks failed
Build, Test and Deploy / test-backend (push) Failing after 3s
Build, Test and Deploy / build-and-push (push) Has been skipped
Build, Test and Deploy / deploy (push) Has been skipped
2026-02-04 15:33:28 +01:00
2f7e8798d2 feat(front-end): contact form and about separated
Some checks failed
Build, Test and Deploy / test-backend (push) Failing after 17s
Build, Test and Deploy / build-and-push (push) Has been skipped
Build, Test and Deploy / deploy (push) Has been skipped
2026-02-04 15:17:29 +01:00
d816eeda1d chore: back-end remove mvn for gradle
Some checks failed
Build, Test and Deploy / test-backend (push) Failing after 25s
Build, Test and Deploy / build-and-push (push) Has been skipped
Build, Test and Deploy / deploy (push) Has been skipped
2026-02-04 14:47:32 +01:00
af5b40021d feat(web): separated html and scss from ts
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 44s
Build, Test and Deploy / build-and-push (push) Successful in 22s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-02 20:59:50 +01:00
653186e9d3 feat(web): add enhanced grid
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 27s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 6s
2026-02-02 20:33:20 +01:00
c6ec937ea0 fix back-end
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 26s
Build, Test and Deploy / build-and-push (push) Successful in 1m28s
Build, Test and Deploy / deploy (push) Successful in 6s
2026-02-02 19:47:20 +01:00
3aa644e9ee fix back-end
Some checks failed
Build, Test and Deploy / test-backend (push) Failing after 4s
Build, Test and Deploy / build-and-push (push) Has been skipped
Build, Test and Deploy / deploy (push) Has been skipped
2026-02-02 19:46:11 +01:00
21cf8891b2 feat(web): fix port
Some checks failed
Build, Test and Deploy / build-and-push (push) Has been cancelled
Build, Test and Deploy / deploy (push) Has been cancelled
Build, Test and Deploy / test-backend (push) Has been cancelled
2026-02-02 19:44:08 +01:00
ceeb831a41 feat(web): java from python
Some checks failed
Build, Test and Deploy / build-and-push (push) Has been cancelled
Build, Test and Deploy / deploy (push) Has been cancelled
Build, Test and Deploy / test-backend (push) Has been cancelled
2026-02-02 19:40:58 +01:00
316c74e299 feat(web): removed component in hero panel
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 12s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-02 18:56:47 +01:00
a5ff515fd7 feat(web): add auth for dev enviroment
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 12s
Build, Test and Deploy / build-and-push (push) Successful in 21s
Build, Test and Deploy / deploy (push) Successful in 4s
2026-02-02 18:48:06 +01:00
6952090865 feat(web): add auth for dev enviroment 2026-02-02 18:45:22 +01:00
10e1fb49f4 feat(web): new style and calculator revisited
All checks were successful
Build, Test and Deploy / deploy (push) Successful in 4s
Build, Test and Deploy / test-backend (push) Successful in 12s
Build, Test and Deploy / build-and-push (push) Successful in 20s
2026-02-02 18:41:18 +01:00
32b9b2ef8d feat(web): new style and calculator revisited
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 14s
Build, Test and Deploy / build-and-push (push) Failing after 20s
Build, Test and Deploy / deploy (push) Has been skipped
2026-02-02 18:38:25 +01:00
0a538b0d88 feat(web): home component
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 12s
Build, Test and Deploy / build-and-push (push) Successful in 20s
Build, Test and Deploy / deploy (push) Successful in 4s
2026-02-02 17:41:20 +01:00
2c658d00c1 feat(web): vibe coding pazzo
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 13s
Build, Test and Deploy / build-and-push (push) Successful in 28s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-02-02 17:38:03 +01:00
5a2da916fa fix(web) fix api/api in enviroment
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 19s
Build, Test and Deploy / build-and-push (push) Successful in 16s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-01-31 17:51:10 +01:00
82d1cf2c71 feat(web) back-end routing
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 15s
Build, Test and Deploy / build-and-push (push) Successful in 23s
Build, Test and Deploy / deploy (push) Successful in 4s
2026-01-31 17:46:35 +01:00
85d7315e30 feat(web) back-end routing
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 15s
Build, Test and Deploy / build-and-push (push) Successful in 26s
Build, Test and Deploy / deploy (push) Successful in 5s
2026-01-31 17:41:47 +01:00
179ba2b85c fix: cicdl.yaml
All checks were successful
Build, Test and Deploy / test-backend (push) Successful in 18s
Build, Test and Deploy / build-and-push (push) Successful in 19s
Build, Test and Deploy / deploy (push) Successful in 18s
2026-01-29 23:09:38 +01:00
ac8135aec8 fix: cicdl.yaml
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 12s
Build, Test and Deploy / build-and-push (push) Successful in 13s
Build, Test and Deploy / deploy (push) Failing after 3s
2026-01-29 22:28:09 +01:00
74f040fa50 fix: cicdl.yaml
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 12s
Build, Test and Deploy / build-and-push (push) Successful in 14s
Build, Test and Deploy / deploy (push) Failing after 3s
2026-01-29 22:07:53 +01:00
73fa36f9ec fix: cicdl.yaml
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 12s
Build, Test and Deploy / build-and-push (push) Successful in 2m46s
Build, Test and Deploy / deploy (push) Failing after 3s
2026-01-29 21:48:32 +01:00
7fafabad42 fix: ubuntu runner
Some checks failed
Build, Test and Deploy / test-backend (push) Successful in 13s
Build, Test and Deploy / build-and-push (push) Failing after 11s
Build, Test and Deploy / deploy (push) Has been skipped
2026-01-29 19:33:57 +01:00
465678f3e4 Merge pull request 'feat/parameters' (#1) from feat/parameters into main
Some checks failed
Build, Test and Deploy / test-backend (push) Failing after 4s
Build, Test and Deploy / build-and-push (push) Has been skipped
Build, Test and Deploy / deploy (push) Has been skipped
Reviewed-on: #1
2026-01-29 17:23:37 +01:00
967c68fa52 chore: remove all .DS_Store files and ignore them in .gitignore 2026-01-29 16:51:43 +01:00
6715d1f75e feat: setup CI/CD with Gitea Actions for dev, int, and prod environments 2026-01-29 16:47:18 +01:00
c365b4fa6b feat(): new feature 2026-01-29 15:59:08 +01:00
e9cca3daeb feat(orca): added orcaslicer preset 2026-01-28 14:30:04 +01:00
443ff04430 feat(web + backend): advanced and simple quote. 2026-01-27 23:38:47 +01:00
8867 changed files with 486497 additions and 1191 deletions

View File

@@ -0,0 +1,209 @@
name: Build and Deploy
on:
push:
branches: [main, int, dev]
concurrency:
group: print-calculator-deploy-${{ gitea.ref }}
cancel-in-progress: true
jobs:
test-backend:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: "21"
distribution: "temurin"
cache: gradle
- name: Run Tests with Gradle
run: |
cd backend
chmod +x gradlew
./gradlew test
test-frontend:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node 22
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
cache-dependency-path: "frontend/package-lock.json"
- name: Install Chromium
shell: bash
run: |
apt-get update
apt-get install -y --no-install-recommends chromium
- name: Install frontend dependencies
shell: bash
run: |
cd frontend
npm ci --no-audit --no-fund
- name: Run frontend tests (headless)
shell: bash
env:
CHROME_BIN: /usr/bin/chromium
CI: "true"
run: |
cd frontend
npm run test -- --watch=false --browsers=ChromeHeadlessNoSandbox
build-and-push:
needs: [test-backend, test-frontend]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set TAG + OWNER lowercase
shell: bash
run: |
if [[ "${{ gitea.ref }}" == "refs/heads/main" ]]; then
echo "TAG=prod" >> "$GITHUB_ENV"
elif [[ "${{ gitea.ref }}" == "refs/heads/int" ]]; then
echo "TAG=int" >> "$GITHUB_ENV"
else
echo "TAG=dev" >> "$GITHUB_ENV"
fi
echo "OWNER_LOWER=$(echo '${{ gitea.repository_owner }}' | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_ENV"
- name: Ensure docker CLI exists
shell: bash
run: |
if ! command -v docker >/dev/null 2>&1; then
apt-get update
apt-get install -y --no-install-recommends docker.io
fi
docker version
- name: Login to Gitea Registry
shell: bash
run: |
set -euo pipefail
printf '%s' "${{ secrets.REGISTRY_TOKEN }}" | docker login "${{ secrets.REGISTRY_URL }}" \
-u "${{ secrets.REGISTRY_USER }}" --password-stdin
- name: Build & Push Backend
shell: bash
run: |
BACKEND_IMAGE="${{ secrets.REGISTRY_URL }}/${{ env.OWNER_LOWER }}/print-calculator-backend:${{ env.TAG }}"
docker build -t "$BACKEND_IMAGE" ./backend
docker push "$BACKEND_IMAGE"
- name: Build & Push Frontend
shell: bash
run: |
FRONTEND_IMAGE="${{ secrets.REGISTRY_URL }}/${{ env.OWNER_LOWER }}/print-calculator-frontend:${{ env.TAG }}"
docker build -t "$FRONTEND_IMAGE" ./frontend
docker push "$FRONTEND_IMAGE"
deploy:
needs: build-and-push
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set ENV
shell: bash
run: |
if [[ "${{ gitea.ref }}" == "refs/heads/main" ]]; then
echo "ENV=prod" >> "$GITHUB_ENV"
elif [[ "${{ gitea.ref }}" == "refs/heads/int" ]]; then
echo "ENV=int" >> "$GITHUB_ENV"
else
echo "ENV=dev" >> "$GITHUB_ENV"
fi
- name: Setup SSH key
shell: bash
run: |
set -euo pipefail
apt-get update
apt-get install -y --no-install-recommends openssh-client
mkdir -p ~/.ssh
chmod 700 ~/.ssh
printf '%s' "${{ secrets.SSH_PRIVATE_KEY_B64 }}" | tr -d '\r\n\t ' > /tmp/key.b64
echo "b64_len=$(wc -c < /tmp/key.b64)"
base64 -d /tmp/key.b64 > ~/.ssh/id_ed25519
tr -d '\r' < ~/.ssh/id_ed25519 > ~/.ssh/id_ed25519.clean
mv ~/.ssh/id_ed25519.clean ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keygen -y -f ~/.ssh/id_ed25519 >/dev/null
ssh-keyscan -H "${{ secrets.SERVER_HOST }}" >> ~/.ssh/known_hosts 2>/dev/null
- name: Write env and compose to server
shell: bash
run: |
if [[ "${{ gitea.ref }}" == "refs/heads/main" ]]; then
DEPLOY_TAG="prod"
elif [[ "${{ gitea.ref }}" == "refs/heads/int" ]]; then
DEPLOY_TAG="int"
else
DEPLOY_TAG="dev"
fi
DEPLOY_OWNER=$(echo '${{ gitea.repository_owner }}' | tr '[:upper:]' '[:lower:]')
cat "deploy/envs/${{ env.ENV }}.env" > /tmp/full_env.env
if [[ "${{ env.ENV }}" == "prod" ]]; then
DB_URL="${{ secrets.DB_URL_PROD }}"
DB_USER="${{ secrets.DB_USERNAME_PROD }}"
DB_PASS="${{ secrets.DB_PASSWORD_PROD }}"
elif [[ "${{ env.ENV }}" == "int" ]]; then
DB_URL="${{ secrets.DB_URL_INT }}"
DB_USER="${{ secrets.DB_USERNAME_INT }}"
DB_PASS="${{ secrets.DB_PASSWORD_INT }}"
else
DB_URL="${{ secrets.DB_URL_DEV }}"
DB_USER="${{ secrets.DB_USERNAME_DEV }}"
DB_PASS="${{ secrets.DB_PASSWORD_DEV }}"
fi
printf '\nDB_URL="%s"\nDB_USERNAME="%s"\nDB_PASSWORD="%s"\n' \
"$DB_URL" "$DB_USER" "$DB_PASS" >> /tmp/full_env.env
printf 'REGISTRY_URL="%s"\nREPO_OWNER="%s"\nTAG="%s"\n' \
"${{ secrets.REGISTRY_URL }}" "$DEPLOY_OWNER" "$DEPLOY_TAG" >> /tmp/full_env.env
ADMIN_TTL="${{ secrets.ADMIN_SESSION_TTL_MINUTES }}"
ADMIN_TTL="${ADMIN_TTL:-480}"
printf 'ADMIN_PASSWORD="%s"\nADMIN_SESSION_SECRET="%s"\nADMIN_SESSION_TTL_MINUTES="%s"\n' \
"${{ secrets.ADMIN_PASSWORD }}" "${{ secrets.ADMIN_SESSION_SECRET }}" "$ADMIN_TTL" >> /tmp/full_env.env
echo "Preparing to send env file with variables:"
grep -Ev "PASSWORD|SECRET" /tmp/full_env.env || true
ssh -i ~/.ssh/id_ed25519 -o BatchMode=yes "${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}" \
"setenv ${{ env.ENV }}" < /tmp/full_env.env
ssh -i ~/.ssh/id_ed25519 -o BatchMode=yes "${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}" \
"setcompose ${{ env.ENV }}" < docker-compose.deploy.yml
- name: Trigger deploy on Unraid (forced command key)
shell: bash
run: |
set -euo pipefail
ssh -i ~/.ssh/id_ed25519 -o BatchMode=yes "${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }}" "deploy ${{ env.ENV }}"

View File

@@ -0,0 +1,172 @@
name: PR Checks
on:
pull_request:
branches: [main, int, dev]
concurrency:
group: print-calculator-pr-${{ gitea.ref }}
cancel-in-progress: true
jobs:
prettier-autofix:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node 22
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Apply formatting with Prettier
shell: bash
run: |
npx --yes prettier@3.6.2 --write \
"frontend/src/**/*.{ts,html,scss,css,json}" \
".gitea/workflows/*.{yml,yaml}"
- name: Commit and push formatting changes
shell: bash
run: |
if git diff --quiet; then
echo "No formatting changes to commit."
exit 0
fi
if ! command -v jq >/dev/null 2>&1; then
apt-get update
apt-get install -y --no-install-recommends jq
fi
EVENT_FILE="${GITHUB_EVENT_PATH:-}"
if [[ -z "$EVENT_FILE" || ! -f "$EVENT_FILE" ]]; then
echo "Event payload not found, skipping auto-push."
exit 0
fi
HEAD_REPO="$(jq -r '.pull_request.head.repo.full_name // empty' "$EVENT_FILE")"
BASE_REPO="$(jq -r '.repository.full_name // empty' "$EVENT_FILE")"
PR_BRANCH="$(jq -r '.pull_request.head.ref // empty' "$EVENT_FILE")"
if [[ -z "$PR_BRANCH" ]]; then
echo "PR branch not found in event payload, skipping auto-push."
exit 0
fi
if [[ -n "$HEAD_REPO" && -n "$BASE_REPO" && "$HEAD_REPO" != "$BASE_REPO" ]]; then
echo "PR from fork ($HEAD_REPO), skipping auto-push."
exit 0
fi
git config user.name "printcalc-ci"
git config user.email "ci@printcalculator.local"
git add frontend/src .gitea/workflows
git commit -m "style: apply prettier formatting"
git push origin "HEAD:${PR_BRANCH}"
security-sast:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Python and Semgrep
shell: bash
run: |
apt-get update
apt-get install -y --no-install-recommends python3 python3-pip
python3 -m pip install --upgrade pip
python3 -m pip install semgrep
- name: Run Semgrep (SAST)
shell: bash
run: |
semgrep --version
semgrep --config auto --error \
--exclude frontend/node_modules \
--exclude backend/build \
backend/src frontend/src
- name: Install Gitleaks
shell: bash
run: |
set -euo pipefail
VERSION="8.24.2"
curl -sSL "https://github.com/gitleaks/gitleaks/releases/download/v${VERSION}/gitleaks_${VERSION}_linux_x64.tar.gz" \
-o /tmp/gitleaks.tar.gz
tar -xzf /tmp/gitleaks.tar.gz -C /tmp
install -m 0755 /tmp/gitleaks /usr/local/bin/gitleaks
gitleaks version
- name: Run Gitleaks (secrets scan)
shell: bash
run: |
set +e
gitleaks detect --source . --no-git --redact --exit-code 1 \
--report-format json --report-path /tmp/gitleaks-report.json
rc=$?
if [[ $rc -ne 0 ]]; then
echo "Gitleaks findings:"
cat /tmp/gitleaks-report.json
fi
exit $rc
test-backend:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: "21"
distribution: "temurin"
cache: gradle
- name: Run Tests with Gradle
run: |
cd backend
chmod +x gradlew
./gradlew test
test-frontend:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node 22
uses: actions/setup-node@v4
with:
node-version: "22"
cache: "npm"
cache-dependency-path: "frontend/package-lock.json"
- name: Install Chromium
shell: bash
run: |
apt-get update
apt-get install -y --no-install-recommends chromium
- name: Install frontend dependencies
shell: bash
run: |
cd frontend
npm ci --no-audit --no-fund
- name: Run frontend tests (headless)
shell: bash
env:
CHROME_BIN: /usr/bin/chromium
CI: "true"
run: |
cd frontend
npm run test -- --watch=false --browsers=ChromeHeadlessNoSandbox

25
.gitignore vendored
View File

@@ -24,3 +24,28 @@ hs_err_pid*
replay_pid*
/frontend/.vscode/
/backend/venv/
# IDEs and editors
.idea/
*.iml
.vscode/
.vs/
.fleet/
.project
.classpath
.settings/
.DS_Store
# Build Results
target/
build/
.gradle/
.mvn/
./storage_orders
./storage_quotes
storage_orders
storage_quotes
# Qodana local reports/artifacts
backend/.qodana/

45
GEMINI.md Normal file
View File

@@ -0,0 +1,45 @@
# GEMINI Project Context
Questo file serve a dare contesto all'AI (Antigravity/Gemini) sulla struttura e logica del progetto.
## Project Overview
**Nome**: Print Calculator
**Scopo**: Calcolare costi e tempi di stampa 3D da file STL in modo preciso tramite slicing reale.
**Stack**:
- **Backend**: Java 21 (Spring Boot 3.4), PostgreSQL, Flyway.
- **Frontend**: Angular 19 (TypeScript), Angular Material, Three.js per visualizzazione 3D.
## Architecture
### Backend (`/backend`)
- **`BackendApplication.java`**: Entrypoint dell'applicazione Spring Boot.
- **`controller/`**: Espone le API REST per l'upload e il calcolo dei preventivi.
- **`service/SlicerService.java`**: Wrappa l'eseguibile di **OrcaSlicer** per effettuare lo slicing reale del modello.
- Gestisce i profili di stampa (Macchina, Processo, Filamento) caricati da file JSON.
- Crea configurazioni on-the-fly e invoca OrcaSlicer in modalità headless.
- **`service/GCodeParser.java`**: Analizza il G-Code generato per estrarre tempo di stampa e peso del materiale dai metadati del file.
- **`service/QuoteCalculator.java`**: Calcola il prezzo finale basandosi su politiche di prezzo salvate nel database.
- Gestisce costi macchina a scaglioni (tiered pricing).
- Calcola costi energetici basati sulla potenza della stampante e costo del kWh.
- Applica markup percentuali e fee fissi per job.
### Frontend (`/frontend`)
- Applicazione Angular 19 con architettura modulare (core, features, shared).
- **Three.js**: Utilizzato per il rendering dei file STL caricati dall'utente.
- **Angular Material**: Per l'interfaccia utente.
- **ngx-translate**: Per il supporto multilingua.
## Key Concepts
- **Real Slicing**: Il backend esegue un vero slicing usando OrcaSlicer. Questo garantisce stime di tempo e materiale estremamente precise.
- **Database-Driven Pricing**: A differenza di versioni precedenti, il calcolo del preventivo è ora guidato da entità DB (`PricingPolicy`, `PrinterMachine`, `FilamentVariant`).
- **G-Code Metadata**: L'applicazione legge direttamene i commenti generati dallo slicer nel G-Code (es. `; estimated printing time`, `; filament used [g]`).
## Development Notes
- **Backend**: Richiede JDK 21. Si avvia con `./gradlew bootRun`.
- **Database**: Richiede PostgreSQL. Le migrazioni sono gestite da Flyway.
- **Frontend**: Richiede Node.js 22. Si avvia con `npm start`.
- **OrcaSlicer**: Deve essere installato sul sistema e il percorso configurato in `application.properties` o tramite variabile d'ambiente `SLICER_PATH`.
## AI Agent Rules
- **No Inline Code**: Tutti i componenti Angular DEVONO usare file separati per HTML (`templateUrl`) e SCSS (`styleUrl`). È vietato usare `template` o `styles` inline nel decoratore `@Component`.
- **Spring Boot Conventions**: Seguire i pattern standard di Spring Boot (Service-Repository-Controller).

View File

@@ -1,10 +0,0 @@
.PHONY: install s
install:
@echo "Installing Backend dependencies..."
cd backend && pip install -r requirements.txt || pip install fastapi uvicorn trimesh python-multipart numpy
@echo "Installing Frontend dependencies..."
cd frontend && npm install
start:
@echo "Starting development environment..."
./start.sh

View File

@@ -1,70 +1,67 @@
# Print Calculator (OrcaSlicer Edition)
Un'applicazione Full Stack (Angular + Python/FastAPI) per calcolare preventivi di stampa 3D precisi utilizzando **OrcaSlicer** in modalità headless.
Un'applicazione Full Stack (Angular + Spring Boot) per calcolare preventivi di stampa 3D precisi utilizzando **OrcaSlicer** in modalità headless.
## Funzionalità
* **Slicing Reale**: Usa il motore di OrcaSlicer per stimare tempo e materiale, non semplici approssimazioni geometriche.
* **Preventivazione Completa**: Calcola costo materiale, ammortamento macchina, energia e ricarico.
* **Configurabile**: Prezzi e parametri macchina modificabili via variabili d'ambiente.
* **Docker Ready**: Tutto containerizzato per un facile deployment.
* **Slicing Reale**: Usa il motore di OrcaSlicer per stimare tempo e materiale, garantendo la massima precisione.
* **Preventivazione Database-Driven**: Calcolo basato su politiche di prezzo configurabili nel database (costo materiale, ammortamento macchina a scaglioni, energia e markup).
* **Visualizzazione 3D**: Anteprima del file STL caricato tramite Three.js.
* **Multi-Profilo**: Supporto per diverse stampanti, materiali e profili di processo.
## Stack Tecnologico
- **Backend**: Java 21, Spring Boot 3.4, PostgreSQL, Flyway.
- **Frontend**: Angular 19, Angular Material, Three.js.
- **Slicer**: OrcaSlicer (invocato via CLI).
## Prerequisiti
* Docker Desktop & Docker Compose installati.
* **Java 21** installato.
* **Node.js 22** e **npm** installati.
* **PostgreSQL** attivo.
* **OrcaSlicer** installato sul sistema.
## Avvio Rapido
1. Clona il repository.
2. Esegui lo script di avvio o docker-compose:
```bash
docker-compose up --build
```
*Nota: La prima build impiegherà alcuni minuti per scaricare OrcaSlicer (~200MB) e compilare il Frontend.*
### 1. Database
Crea un database PostgreSQL chiamato `printcalc`. Le tabelle verranno create automaticamente al primo avvio tramite Flyway.
3. Accedi all'applicazione:
* **Frontend**: [http://localhost](http://localhost)
* **API Docs**: [http://localhost:8000/docs](http://localhost:8000/docs)
### 2. Backend
Configura il percorso di OrcaSlicer in `backend/src/main/resources/application.properties` o tramite la variabile d'ambiente `SLICER_PATH`.
## Configurazione Prezzi
Puoi modificare i prezzi nel file `docker-compose.yml` (sezione `environment` del servizio backend):
* `FILAMENT_COST_PER_KG`: Costo filamento al kg (es. 25.0).
* `MACHINE_COST_PER_HOUR`: Costo orario macchina (ammortamento/manutenzione).
* `ENERGY_COST_PER_KWH`: Costo energia elettrica.
* `MARKUP_PERCENT`: Margine di profitto percentuale (es. 20 = +20%).
## Struttura del Progetto
* `/backend`: API Python FastAPI. Include Dockerfile che scarica OrcaSlicer AppImage.
* `/frontend`: Applicazione Angular 19+ con Material Design.
* `/backend/profiles`: Contiene i profili di slicing (.ini). Attualmente configurato per una stima generica simil-Bambu Lab A1.
## Troubleshooting
### Errore Download OrcaSlicer
Se la build del backend fallisce durante il download di `OrcaSlicer.AppImage`, verifica la tua connessione internet o aggiorna l'URL nel `backend/Dockerfile`.
### Slicing Fallito (Costo 0 o Errore)
Se l'API ritorna errore o valori nulli:
1. Controlla che il file STL sia valido (manifold).
2. Controlla i log del backend: `docker logs print-calculator-backend`.
## Sviluppo Locale (Senza Docker)
**Backend**:
Richiede Linux (o WSL2) per eseguire l'AppImage di OrcaSlicer.
```bash
cd backend
pip install -r requirements.txt
# Assicurati di avere OrcaSlicer installato e nel PATH o aggiorna SLICER_PATH in slicer.py
uvicorn main:app --reload
./gradlew bootRun
```
**Frontend**:
### 3. Frontend
```bash
cd frontend
npm install
npm start
```
Accedi a [http://localhost:4200](http://localhost:4200).
## Configurazione Prezzi
I prezzi non sono più gestiti tramite variabili d'ambiente fisse ma tramite tabelle nel database:
- `pricing_policy`: Definisce markup, fee fissi e costi elettrici.
- `pricing_policy_machine_hour_tier`: Definisce i costi orari delle macchine in base alla durata della stampa.
- `printer_machine`: Anagrafica stampanti e consumi energetici.
- `filament_material_type` / `filament_variant`: Listino prezzi materiali.
## Struttura del Progetto
* `/backend`: API Spring Boot.
* `/frontend`: Applicazione Angular.
* `/backend/profiles`: Contiene i file di configurazione per OrcaSlicer.
## Troubleshooting
### Percorso OrcaSlicer
Assicurati che `slicer.path` punti al binario corretto. Su macOS è solitamente `/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer`. Su Linux è il percorso all'AppImage (estratta o meno).
### Database connection
Verifica le credenziali in `application.properties`. Se usi Docker, puoi passare `DB_URL`, `DB_USERNAME` e `DB_PASSWORD` come variabili d'ambiente.

54
backend/.gitignore vendored Normal file
View File

@@ -0,0 +1,54 @@
/target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
target
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbproject/public/
/nbproject/project.properties
/nbproject/project.xml
### VS Code ###
.vscode/
### Gradle ###
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### Java ###
*.class
*.log
*.ctxt
.mtj.tmp/
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
### Spring Boot ###
HELP.md
!gradle/wrapper/gradle-wrapper.jar

View File

@@ -1,6 +1,17 @@
FROM --platform=linux/amd64 python:3.10-slim-bookworm
# Stage 1: Build Java JAR
FROM eclipse-temurin:21-jdk-jammy AS build
WORKDIR /app
COPY gradle gradle
COPY gradlew build.gradle settings.gradle ./
# Download dependencies first to cache them
RUN ./gradlew dependencies --no-daemon
COPY src ./src
RUN ./gradlew bootJar -x test --no-daemon
# Install system dependencies for OrcaSlicer (AppImage)
# Stage 2: Runtime Environment
FROM eclipse-temurin:21-jre-jammy
# Install system dependencies for OrcaSlicer (same as before)
RUN apt-get update && apt-get install -y \
wget \
p7zip-full \
@@ -8,36 +19,28 @@ RUN apt-get update && apt-get install -y \
libglib2.0-0 \
libgtk-3-0 \
libdbus-1-3 \
libwebkit2gtk-4.1-0 \
libwebkit2gtk-4.0-37 \
&& rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /app
# Download and extract OrcaSlicer
# Using v2.2.0 as a stable recent release
# We extract the AppImage to run it without FUSE
# Install OrcaSlicer
WORKDIR /opt
RUN wget -q https://github.com/SoftFever/OrcaSlicer/releases/download/v2.2.0/OrcaSlicer_Linux_V2.2.0.AppImage -O OrcaSlicer.AppImage \
&& 7z x OrcaSlicer.AppImage -o/opt/orcaslicer \
&& chmod -R +x /opt/orcaslicer \
&& rm OrcaSlicer.AppImage
# Add OrcaSlicer to PATH
ENV PATH="/opt/orcaslicer/usr/bin:${PATH}"
# Set Slicer Path env variable for Java app
ENV SLICER_PATH="/opt/orcaslicer/AppRun"
# Install Python dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
WORKDIR /app
# Copy JAR from build stage
COPY --from=build /app/build/libs/*.jar app.jar
# Copy profiles
COPY profiles ./profiles
# Create directories for app and temp files
RUN mkdir -p /app/temp /app/profiles
EXPOSE 8080
# Copy application code
COPY . .
# Expose port
EXPOSE 8000
# Run the application
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
COPY entrypoint.sh .
RUN chmod +x entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]

60
backend/build.gradle Normal file
View File

@@ -0,0 +1,60 @@
plugins {
id 'java'
id 'application'
id 'org.springframework.boot' version '3.4.1'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.printcalculator'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
application {
mainClass = 'com.printcalculator.BackendApplication'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'xyz.capybara:clamav-client:2.1.2'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
runtimeOnly 'org.postgresql:postgresql'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
testRuntimeOnly 'com.h2database:h2'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation 'io.github.openhtmltopdf:openhtmltopdf-pdfbox:1.1.37'
implementation 'io.github.openhtmltopdf:openhtmltopdf-svg-support:1.1.37'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'net.codecrete.qrbill:qrbill-generator:3.4.0'
implementation 'org.springframework.boot:spring-boot-starter-mail'
}
tasks.named('test') {
useJUnitPlatform()
}
tasks.named('bootRun') {
args = ["--spring.profiles.active=local"]
}
application {
applicationDefaultJvmArgs = ["-Dspring.profiles.active=local"]
}

View File

@@ -1,150 +0,0 @@
import re
import os
import logging
from typing import Dict, Any, Optional
from config import settings
logger = logging.getLogger(__name__)
class GCodeParser:
@staticmethod
def parse_metadata(gcode_path: str) -> Dict[str, Any]:
"""
Parses the G-code to extract estimated time and material usage.
Scans both the beginning (header) and end (footer) of the file.
"""
stats = {
"print_time_seconds": 0,
"filament_length_mm": 0,
"filament_volume_mm3": 0,
"filament_weight_g": 0,
"slicer_estimated_cost": 0
}
if not os.path.exists(gcode_path):
logger.warning(f"GCode file not found for parsing: {gcode_path}")
return stats
try:
with open(gcode_path, 'r', encoding='utf-8', errors='ignore') as f:
# Read header (first 500 lines)
header_lines = [f.readline().strip() for _ in range(500) if f]
# Read footer (last 20KB)
f.seek(0, 2)
file_size = f.tell()
read_len = min(file_size, 20480)
f.seek(file_size - read_len)
footer_lines = f.read().splitlines()
all_lines = header_lines + footer_lines
for line in all_lines:
line = line.strip()
if not line.startswith(";"):
continue
GCodeParser._parse_line(line, stats)
# Fallback calculation
if stats["filament_weight_g"] == 0 and stats["filament_length_mm"] > 0:
GCodeParser._calculate_weight_fallback(stats)
except Exception as e:
logger.error(f"Error parsing G-code: {e}")
return stats
@staticmethod
def _parse_line(line: str, stats: Dict[str, Any]):
# Parse Time
if "estimated printing time =" in line: # Header
time_str = line.split("=")[1].strip()
stats["print_time_seconds"] = GCodeParser._parse_time_string(time_str)
elif "total estimated time:" in line: # Footer
parts = line.split("total estimated time:")
if len(parts) > 1:
stats["print_time_seconds"] = GCodeParser._parse_time_string(parts[1].strip())
# Parse Filament info
if "filament used [g] =" in line:
try:
stats["filament_weight_g"] = float(line.split("=")[1].strip())
except ValueError: pass
if "filament used [mm] =" in line:
try:
stats["filament_length_mm"] = float(line.split("=")[1].strip())
except ValueError: pass
if "filament used [cm3] =" in line:
try:
# cm3 to mm3
stats["filament_volume_mm3"] = float(line.split("=")[1].strip()) * 1000
except ValueError: pass
@staticmethod
def _calculate_weight_fallback(stats: Dict[str, Any]):
# Assumes 1.75mm diameter and PLA density 1.24
radius = 1.75 / 2
volume_mm3 = 3.14159 * (radius ** 2) * stats["filament_length_mm"]
volume_cm3 = volume_mm3 / 1000.0
stats["filament_weight_g"] = volume_cm3 * 1.24
@staticmethod
def _parse_time_string(time_str: str) -> int:
"""
Converts '1d 2h 3m 4s' to seconds.
"""
total_seconds = 0
days = re.search(r'(\d+)d', time_str)
hours = re.search(r'(\d+)h', time_str)
mins = re.search(r'(\d+)m', time_str)
secs = re.search(r'(\d+)s', time_str)
if days: total_seconds += int(days.group(1)) * 86400
if hours: total_seconds += int(hours.group(1)) * 3600
if mins: total_seconds += int(mins.group(1)) * 60
if secs: total_seconds += int(secs.group(1))
return total_seconds
class QuoteCalculator:
@staticmethod
def calculate(stats: Dict[str, Any]) -> Dict[str, Any]:
"""
Calculates the final quote based on parsed stats and settings.
"""
# 1. Material Cost
# Cost per gram = (Cost per kg / 1000)
material_cost = (stats["filament_weight_g"] / 1000.0) * settings.FILAMENT_COST_PER_KG
# 2. Machine Time Cost
# Cost per second = (Cost per hour / 3600)
print_time_hours = stats["print_time_seconds"] / 3600.0
machine_cost = print_time_hours * settings.MACHINE_COST_PER_HOUR
# 3. Energy Cost
# kWh = (Watts / 1000) * hours
kwh_used = (settings.PRINTER_POWER_WATTS / 1000.0) * print_time_hours
energy_cost = kwh_used * settings.ENERGY_COST_PER_KWH
# Subtotal
subtotal = material_cost + machine_cost + energy_cost
# 4. Markup
markup_factor = 1.0 + (settings.MARKUP_PERCENT / 100.0)
total_price = subtotal * markup_factor
return {
"breakdown": {
"material_cost": round(material_cost, 2),
"machine_cost": round(machine_cost, 2),
"energy_cost": round(energy_cost, 2),
"subtotal": round(subtotal, 2),
"markup_amount": round(total_price - subtotal, 2)
},
"total_price": round(total_price, 2),
"currency": "EUR"
}

View File

@@ -1,25 +0,0 @@
import os
class Settings:
# Directories
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
TEMP_DIR = os.environ.get("TEMP_DIR", os.path.join(BASE_DIR, "temp"))
PROFILES_DIR = os.environ.get("PROFILES_DIR", os.path.join(BASE_DIR, "profiles"))
# Slicer Paths
SLICER_PATH = os.environ.get("SLICER_PATH", "/opt/orcaslicer/AppRun")
ORCA_HOME = os.environ.get("ORCA_HOME", "/opt/orcaslicer")
# Defaults Profiles (Bambu A1)
MACHINE_PROFILE = os.path.join(ORCA_HOME, "resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json")
PROCESS_PROFILE = os.path.join(ORCA_HOME, "resources/profiles/BBL/process/0.20mm Standard @BBL A1.json")
FILAMENT_PROFILE = os.path.join(ORCA_HOME, "resources/profiles/BBL/filament/Generic PLA @BBL A1.json")
# Pricing
FILAMENT_COST_PER_KG = float(os.environ.get("FILAMENT_COST_PER_KG", 25.0))
MACHINE_COST_PER_HOUR = float(os.environ.get("MACHINE_COST_PER_HOUR", 2.0))
ENERGY_COST_PER_KWH = float(os.environ.get("ENERGY_COST_PER_KWH", 0.30))
PRINTER_POWER_WATTS = float(os.environ.get("PRINTER_POWER_WATTS", 150.0))
MARKUP_PERCENT = float(os.environ.get("MARKUP_PERCENT", 20.0))
settings = Settings()

25
backend/entrypoint.sh Normal file
View File

@@ -0,0 +1,25 @@
#!/bin/sh
echo "----------------------------------------------------------------"
echo "Starting Backend Application"
echo "DB_URL: $DB_URL"
echo "DB_USERNAME: $DB_USERNAME"
echo "SPRING_DATASOURCE_URL: $SPRING_DATASOURCE_URL"
echo "SLICER_PATH: $SLICER_PATH"
echo "----------------------------------------------------------------"
# Determine which environment variables to use for database connection
# This allows compatibility with different docker-compose configurations
FINAL_DB_URL="${DB_URL:-$SPRING_DATASOURCE_URL}"
FINAL_DB_USER="${DB_USERNAME:-$SPRING_DATASOURCE_USERNAME}"
FINAL_DB_PASS="${DB_PASSWORD:-$SPRING_DATASOURCE_PASSWORD}"
if [ -n "$FINAL_DB_URL" ]; then
echo "Using database URL: $FINAL_DB_URL"
exec java -jar app.jar \
--spring.datasource.url="${FINAL_DB_URL}" \
--spring.datasource.username="${FINAL_DB_USER}" \
--spring.datasource.password="${FINAL_DB_PASS}"
else
echo "No database URL specified in environment, relying on application.properties defaults."
exec java -jar app.jar
fi

Binary file not shown.

View File

@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

248
backend/gradlew vendored Executable file
View File

@@ -0,0 +1,248 @@
#!/bin/sh
#
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

93
backend/gradlew.bat vendored Normal file
View File

@@ -0,0 +1,93 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:execute
@rem Setup the command line
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@@ -1,112 +0,0 @@
import os
import shutil
import uuid
import logging
from fastapi import FastAPI, UploadFile, File, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
# Import custom modules
from config import settings
from slicer import slicer_service
from calculator import GCodeParser, QuoteCalculator
# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("api")
app = FastAPI(title="Print Calculator API")
# CORS Setup
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Ensure directories exist
os.makedirs(settings.TEMP_DIR, exist_ok=True)
class QuoteResponse(BaseModel):
printer: str
print_time_seconds: int
print_time_formatted: str
material_grams: float
cost: dict
notes: list[str] = []
def cleanup_files(files: list):
for f in files:
try:
if os.path.exists(f):
os.remove(f)
except Exception as e:
logger.warning(f"Failed to delete temp file {f}: {e}")
def format_time(seconds: int) -> str:
m, s = divmod(seconds, 60)
h, m = divmod(m, 60)
if h > 0:
return f"{int(h)}h {int(m)}m"
return f"{int(m)}m {int(s)}s"
@app.post("/calculate/stl", response_model=QuoteResponse)
async def calculate_from_stl(file: UploadFile = File(...)):
if not file.filename.lower().endswith(".stl"):
raise HTTPException(status_code=400, detail="Only .stl files are supported.")
# Unique ID for this request
req_id = str(uuid.uuid4())
input_filename = f"{req_id}.stl"
output_filename = f"{req_id}.gcode"
input_path = os.path.join(settings.TEMP_DIR, input_filename)
output_path = os.path.join(settings.TEMP_DIR, output_filename)
try:
# 1. Save Uploaded File
with open(input_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
# 2. Slice
# slicer_service methods raise exceptions on failure
slicer_service.slice_stl(input_path, output_path)
# 3. Parse Results
stats = GCodeParser.parse_metadata(output_path)
if stats["print_time_seconds"] == 0 and stats["filament_weight_g"] == 0:
# Slicing likely failed or produced empty output without throwing error
raise HTTPException(status_code=500, detail="Slicing completed but no stats found. Check mesh validity.")
# 4. Calculate Costs
quote = QuoteCalculator.calculate(stats)
return {
"printer": "BambuLab A1 (Estimated)",
"print_time_seconds": stats["print_time_seconds"],
"print_time_formatted": format_time(stats["print_time_seconds"]),
"material_grams": stats["filament_weight_g"],
"cost": {
"material": quote["breakdown"]["material_cost"],
"machine": quote["breakdown"]["machine_cost"],
"energy": quote["breakdown"]["energy_cost"],
"markup": quote["breakdown"]["markup_amount"],
"total": quote["total_price"]
},
"notes": ["Estimation generated using OrcaSlicer headless."]
}
except Exception as e:
logger.error(f"Error processing request: {e}")
raise HTTPException(status_code=500, detail=str(e))
finally:
# Cleanup
cleanup_files([input_path, output_path])
@app.get("/health")
def health_check():
return {"status": "ok", "slicer": settings.SLICER_PATH}

View File

@@ -6,13 +6,13 @@ bed_shape = 0x0,256x0,256x256,0x256
nozzle_diameter = 0.4
filament_diameter = 1.75
max_print_speed = 500
travel_speed = 500
travel_speed = 700
gcode_flavor = klipper
# Bambu uses specific gcode but klipper/marlin is close enough for time est if accel matches
machine_max_acceleration_x = 10000
machine_max_acceleration_y = 10000
machine_max_acceleration_e = 5000
machine_max_acceleration_extruding = 5000
machine_max_acceleration_e = 6000
machine_max_acceleration_extruding = 6000
# PRINT SETTINGS
layer_height = 0.2
@@ -26,17 +26,17 @@ bottom_solid_layers = 3
# SPEED SETTINGS (Conservative defaults for A1)
perimeter_speed = 200
external_perimeter_speed = 150
external_perimeter_speed = 200
infill_speed = 250
solid_infill_speed = 200
top_solid_infill_speed = 150
support_material_speed = 150
bridge_speed = 50
bridge_speed = 150
gap_fill_speed = 50
# FILAMENT SETTINGS
filament_density = 1.24
filament_cost = 25.0
filament_cost = 18.0
filament_max_volumetric_speed = 15
temperature = 220
bed_temperature = 60
bed_temperature = 65

View File

@@ -0,0 +1,88 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab X1 Carbon",
"print": {
"ipcam": {
"resolution_supported": [ "720p", "1080p" ],
"virtual_camera": "enabled",
"liveview": {
"remote": "tutk"
},
"file": {
"remote": "tutk",
"model_download": "enabled"
}
},
"support_motor_noise_cali":false,
"support_tunnel_mqtt":false,
"support_mqtt_alive":false,
"support_command_ams_switch":false,
"support_cloud_print_only":false,
"support_1080dpi":false,
"support_prompt_sound":false,
"support_ams_humidity":false,
"support_auto_recovery_step_loss":false,
"support_auto_leveling":true,
"support_update_remain":false,
"support_timelapse":true,
"support_filament_backup":false,
"support_chamber_fan":true,
"support_aux_fan":true,
"support_send_to_sd":false,
"support_print_all":true,
"support_print_without_sd":true,
"support_flow_calibration":true,
"support_build_plate_marker_detect":false,
"support_lidar_calibration":true,
"support_ai_monitoring":false,
"support_first_layer_inspect":true,
"support_chamber_temp_edit":false,
"support_extrusion_cali":false,
"support_user_preset":false
},
"model_id":"BL-P001",
"compatible_machine":["BL-P002", "C11", "C12", "C13"],
"printer_type":"3DPrinter-X1-Carbon",
"printer_thumbnail_image":"printer_thumbnail",
"printer_connect_help_image":"input_access_code_x1",
"printer_use_ams_image":"ams_icon",
"use_ams_type":"generic",
"printer_arch":"core_xy",
"printer_series":"series_x1",
"has_cali_line":true,
"printer_is_enclosed":true
},
"01.01.01.00": {
"print": {
"support_1080dpi":true,
"support_ams_humidity":true,
"support_update_remain":true,
"support_auto_recovery_step_loss":true,
"support_filament_backup":true,
"support_send_to_sd":true,
"support_build_plate_marker_detect":true,
"support_ai_monitoring":true
}
},
"01.05.06.01" : {
"print": {
"support_command_ams_switch":true
}
},
"01.05.06.05" : {
"engineer":"00.03.10.05",
"print": {
"support_mqtt_alive":true
}
},
"01.05.06.06": {
"print": {
"support_tunnel_mqtt":true
}
},
"01.06.06.00": {
"print": {
"support_user_preset":true
}
}
}

View File

@@ -0,0 +1,88 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab X1",
"print": {
"ipcam": {
"resolution_supported": [ "720p", "1080p" ],
"virtual_camera": "enabled",
"liveview": {
"remote": "tutk"
},
"file": {
"remote": "tutk",
"model_download": "enabled"
}
},
"support_motor_noise_cali":false,
"support_tunnel_mqtt":false,
"support_mqtt_alive":false,
"support_command_ams_switch":false,
"support_cloud_print_only":false,
"support_1080dpi":false,
"support_prompt_sound":false,
"support_ams_humidity":false,
"support_auto_recovery_step_loss":false,
"support_auto_leveling":true,
"support_update_remain":false,
"support_timelapse":true,
"support_filament_backup":false,
"support_chamber_fan":true,
"support_aux_fan":true,
"support_send_to_sd":false,
"support_print_all":true,
"support_print_without_sd":true,
"support_flow_calibration":true,
"support_build_plate_marker_detect":false,
"support_lidar_calibration":true,
"support_ai_monitoring":false,
"support_first_layer_inspect":true,
"support_chamber_temp_edit":false,
"support_extrusion_cali":false,
"support_user_preset":false
},
"model_id": "BL-P002",
"compatible_machine":["BL-P001", "C11", "C12", "C13"],
"printer_type": "3DPrinter-X1",
"printer_thumbnail_image": "printer_thumbnail",
"printer_connect_help_image": "input_access_code_x1",
"printer_use_ams_image":"ams_icon",
"use_ams_type":"generic",
"printer_arch" : "core_xy",
"printer_series":"series_x1",
"has_cali_line":true,
"printer_is_enclosed":true
},
"01.01.01.00": {
"print": {
"support_1080dpi":true,
"support_ams_humidity":true,
"support_update_remain":true,
"support_auto_recovery_step_loss":true,
"support_filament_backup":true,
"support_send_to_sd":true,
"support_build_plate_marker_detect":true,
"support_ai_monitoring":true
}
},
"01.05.06.01" : {
"print": {
"support_command_ams_switch":true
}
},
"01.05.06.05" : {
"engineer":"00.03.10.05",
"print": {
"support_mqtt_alive":true
}
},
"01.05.06.06": {
"print": {
"support_tunnel_mqtt":true
}
},
"01.06.06.00": {
"print": {
"support_user_preset":true
}
}
}

View File

@@ -0,0 +1,93 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab P1P",
"print": {
"ipcam": {
"resolution_supported": [ "720p" ],
"liveview": {
"local": "local"
}
},
"support_motor_noise_cali":false,
"support_tunnel_mqtt":false,
"support_mqtt_alive":false,
"support_command_ams_switch":false,
"support_cloud_print_only":true,
"support_1080dpi":false,
"support_prompt_sound":false,
"support_ams_humidity":true,
"support_auto_recovery_step_loss":true,
"support_auto_leveling":true,
"support_update_remain":true,
"support_timelapse":true,
"support_filament_backup":true,
"support_chamber_fan":true,
"support_aux_fan":true,
"support_send_to_sd":false,
"support_print_all":false,
"support_print_without_sd":false,
"support_flow_calibration":false,
"support_build_plate_marker_detect":false,
"support_lidar_calibration":false,
"support_ai_monitoring":false,
"support_first_layer_inspect":false,
"support_chamber_temp_edit":false,
"support_extrusion_cali":true,
"support_user_preset":false,
"bed_temperature_limit": 100
},
"model_id": "C11",
"compatible_machine":["BL-P001", "BL-P002", "C12", "C13"],
"printer_type": "C11",
"ftp_folder" : "sdcard/",
"printer_thumbnail_image": "printer_thumbnail_p1p",
"printer_connect_help_image": "input_access_code_p1p",
"printer_use_ams_image":"ams_icon",
"use_ams_type":"generic",
"printer_arch" : "core_xy",
"printer_series":"series_p1p",
"has_cali_line":false,
"printer_is_enclosed":false
},
"01.02.00.00": {
"print": {
"support_send_to_sd":true
}
},
"01.02.99.00": {
"print": {
"ipcam": {
"liveview": {
"remote": "tutk"
}
}
}
},
"01.02.99.10" : {
"print": {
"support_command_ams_switch":true
}
},
"01.03.50.01" : {
"engineer":"00.06.03.51",
"print": {
"support_mqtt_alive":true,
"support_tunnel_mqtt":true
}
},
"01.04.50.01": {
"print": {
"ipcam": {
"file": {
"remote": "tutk"
}
},
"support_user_preset":true
}
},
"01.07.50.00": {
"print": {
"support_print_all": true
}
}
}

View File

@@ -0,0 +1,85 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab P1S",
"print": {
"ipcam": {
"resolution_supported": [ "720p" ],
"liveview": {
"local": "local"
}
},
"support_motor_noise_cali":false,
"support_tunnel_mqtt":false,
"support_mqtt_alive":false,
"support_command_ams_switch":false,
"support_cloud_print_only":true,
"support_1080dpi":false,
"support_prompt_sound":false,
"support_ams_humidity":true,
"support_auto_recovery_step_loss":true,
"support_auto_leveling":true,
"support_update_remain":true,
"support_timelapse":true,
"support_filament_backup":true,
"support_chamber_fan":true,
"support_aux_fan":true,
"support_send_to_sd":true,
"support_print_all":false,
"support_print_without_sd":false,
"support_flow_calibration":false,
"support_build_plate_marker_detect":false,
"support_lidar_calibration":false,
"support_ai_monitoring":false,
"support_first_layer_inspect":false,
"support_chamber_temp_edit":false,
"support_extrusion_cali":true,
"support_user_preset":false,
"bed_temperature_limit": 100
},
"model_id": "C12",
"compatible_machine":["BL-P001", "BL-P002", "C11", "C13"],
"printer_type": "C12",
"ftp_folder" : "sdcard/",
"printer_thumbnail_image": "printer_thumbnail_p1s",
"printer_connect_help_image": "input_access_code_p1p",
"printer_use_ams_image":"ams_icon",
"use_ams_type":"generic",
"printer_arch" : "core_xy",
"printer_series":"series_p1p",
"has_cali_line":false,
"printer_is_enclosed":true
},
"01.02.99.10" : {
"print": {
"support_command_ams_switch":true
}
},
"01.03.50.01": {
"engineer":"00.06.03.51",
"resolution_supported": [ "720p" ],
"print": {
"ipcam": {
"liveview": {
"remote": "tutk"
}
},
"support_mqtt_alive":true,
"support_tunnel_mqtt":true
}
},
"01.04.50.01": {
"print": {
"ipcam": {
"file": {
"remote": "tutk"
}
},
"support_user_preset":true
}
},
"01.07.50.00": {
"print": {
"support_print_all": true
}
}
}

View File

@@ -0,0 +1,61 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab X1E",
"print": {
"ipcam": {
"resolution_supported": [ "720p", "1080p" ],
"virtual_camera": "enabled",
"liveview": {
"remote": "tutk"
},
"file": {
"remote": "tutk",
"model_download": "enabled"
}
},
"support_motor_noise_cali":false,
"support_tunnel_mqtt":true,
"support_mqtt_alive":true,
"support_command_ams_switch":true,
"support_ssl_for_mqtt":true,
"support_cloud_print_only":false,
"support_1080dpi":true,
"support_prompt_sound":false,
"support_ams_humidity":true,
"support_auto_recovery_step_loss":true,
"support_auto_leveling":true,
"support_update_remain":true,
"support_timelapse":true,
"support_filament_backup":true,
"support_chamber_fan":true,
"support_aux_fan":true,
"support_send_to_sd":true,
"support_print_all":true,
"support_print_without_sd":true,
"support_flow_calibration":true,
"support_build_plate_marker_detect":true,
"support_lidar_calibration":true,
"support_ai_monitoring":true,
"support_first_layer_inspect":true,
"support_chamber_temp_edit":true,
"support_extrusion_cali":false,
"support_user_preset":false,
"bed_temperature_limit": 110,
"nozzle_max_temperature": 320
},
"model_id": "C13",
"compatible_machine":["BL-P001", "BL-P002", "C11", "C12"],
"printer_type": "C13",
"printer_thumbnail_image": "printer_thumbnail",
"printer_connect_help_image": "input_access_code_x1",
"printer_use_ams_image":"ams_icon",
"use_ams_type":"generic",
"printer_arch" : "core_xy",
"printer_series":"series_x1",
"has_cali_line":true,
"printer_is_enclosed":true
},
"01.05.06.06": {
"rv2166": "00.00.21.20"
}
}

View File

@@ -0,0 +1,62 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab A1 mini",
"print": {
"ipcam": {
"resolution_supported": [ "720p" ],
"liveview": {
"local": "local",
"remote": "tutk"
}
},
"support_motor_noise_cali":true,
"support_tunnel_mqtt":true,
"support_mqtt_alive":true,
"support_command_ams_switch":true,
"support_cloud_print_only":true,
"support_1080dpi":true,
"support_prompt_sound":true,
"support_ams_humidity":false,
"support_auto_recovery_step_loss":true,
"support_auto_leveling":true,
"support_update_remain":false,
"support_timelapse":true,
"support_filament_backup":true,
"support_chamber_fan":false,
"support_aux_fan":false,
"support_send_to_sd":true,
"support_print_all":false,
"support_print_without_sd":false,
"support_flow_calibration":true,
"support_lidar_calibration":false,
"support_ai_monitoring":false,
"support_first_layer_inspect":false,
"support_chamber_temp_edit":false,
"support_extrusion_cali":true,
"support_user_preset":false,
"bed_temperature_limit": 100
},
"model_id": "N1",
"compatible_machine":[],
"printer_type": "N1",
"ftp_folder" : "sdcard/",
"printer_thumbnail_image": "printer_thumbnail_n1",
"printer_connect_help_image": "input_access_code_n1",
"printer_use_ams_image":"extra_icon",
"use_ams_type":"f1",
"printer_arch" : "i3",
"printer_series":"series_p1p",
"has_cali_line":false,
"printer_is_enclosed":false
},
"01.01.50.01": {
"print": {
"ipcam": {
"file": {
"remote": "tutk"
}
},
"support_user_preset":true
}
}
}

View File

@@ -0,0 +1,61 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab A1",
"print": {
"ipcam": {
"resolution_supported": [ "720p" ],
"liveview": {
"local": "local",
"remote": "tutk"
}
},
"support_motor_noise_cali":true,
"support_tunnel_mqtt":true,
"support_mqtt_alive":true,
"support_command_ams_switch":true,
"support_cloud_print_only":true,
"support_1080dpi":true,
"support_prompt_sound":true,
"support_ams_humidity":false,
"support_auto_recovery_step_loss":true,
"support_auto_leveling":true,
"support_update_remain":false,
"support_timelapse":true,
"support_filament_backup":true,
"support_chamber_fan":false,
"support_aux_fan":false,
"support_send_to_sd":true,
"support_print_all":false,
"support_print_without_sd":false,
"support_flow_calibration":true,
"support_lidar_calibration":false,
"support_ai_monitoring":false,
"support_first_layer_inspect":false,
"support_chamber_temp_edit":false,
"support_extrusion_cali":true,
"support_user_preset":true,
"bed_temperature_limit": 100
},
"model_id": "N2S",
"compatible_machine":[],
"printer_type": "N2S",
"ftp_folder" : "sdcard/",
"printer_thumbnail_image": "printer_thumbnail_n2s",
"printer_connect_help_image": "input_access_code_n1",
"printer_use_ams_image":"extra_icon",
"use_ams_type":"f1",
"printer_arch" : "i3",
"printer_series":"series_p1p",
"has_cali_line":false,
"printer_is_enclosed":false
},
"01.01.50.01": {
"print": {
"ipcam": {
"file": {
"remote": "tutk"
}
}
}
}
}

View File

@@ -0,0 +1,74 @@
{
"00.00.00.00": {
"display_name": "Bambu Lab H2D",
"print": {
"2D": {
"laser": {
"power": [ 10, 40 ]
}
},
"ipcam": {
"resolution_supported": [ "1080p" ],
"virtual_camera": "enabled",
"liveview": {
"remote": "tutk"
},
"file": {
"local": "local",
"remote": "tutk",
"model_download": "enabled"
}
},
"nozzle_temp_range": [ 20, 350 ],
"bed_temp_range": [ 20, 120 ],
"support_motor_noise_cali": false,
"support_tunnel_mqtt": true,
"support_mqtt_alive": true,
"support_command_ams_switch": true,
"support_ssl_for_mqtt": true,
"support_cloud_print_only": false,
"support_1080dpi": true,
"support_prompt_sound": false,
"support_ams_humidity": true,
"support_auto_recovery_step_loss": true,
"support_bed_leveling": 2,
"support_update_remain": true,
"support_timelapse": true,
"support_filament_backup": true,
"support_chamber_fan": true,
"support_aux_fan": true,
"support_send_to_sd": true,
"support_print_all": true,
"support_print_without_sd": true,
"support_flow_calibration": true,
"support_auto_flow_calibration": true,
"support_build_plate_marker_detect": true,
"support_build_plate_marker_detect_type": 2,
"support_lidar_calibration": false,
"support_nozzle_offset_calibration": true,
"support_high_tempbed_calibration": true,
"support_ai_monitoring": true,
"support_first_layer_inspect": false,
"support_save_remote_print_file_to_storage": true,
"support_chamber_temp_edit": true,
"support_chamber_temp_edit_range": [ 20, 65 ],
"support_chamber_temp_switch_heating": 40,
"support_extrusion_cali": false,
"support_user_preset": false
},
"model_id": "O1D",
"printer_modes": [ "fdm", "laser", "cut" ],
"compatible_machine": [],
"printer_type": "O1D",
"printer_thumbnail_image": "printer_thumbnail_h2d",
"printer_connect_help_image": "input_access_code_h2d",
"printer_use_ams_image": "ams_icon",
"printer_ext_image": ["ext_image_o_right", "ext_image_o_left"],
"use_ams_type": "generic",
"printer_arch": "core_xy",
"printer_series": "series_o",
"has_cali_line": true,
"printer_is_enclosed": true,
"enable_set_nozzle_info": false
}
}

View File

@@ -0,0 +1,51 @@
M620 S[next_extruder]
M106 S255
M104 S250
M17 S
M17 X0.5 Y0.5
G91
G1 Y-5 F1200
G1 Z3
G90
G28 X
M17 R
G1 X70 F21000
G1 Y245
G1 Y265 F3000
G4
M106 S0
M109 S250
G1 X90
G1 Y255
G1 X120
G1 X20 Y50 F21000
G1 Y-3
T[next_extruder]
G1 X54
G1 Y265
G92 E0
G1 E40 F180
G4
M104 S[new_filament_temp]
G1 X70 F15000
G1 X76
G1 X65
G1 X76
G1 X65
G1 X90 F3000
G1 Y255
G1 X100
G1 Y265
G1 X70 F10000
G1 X100 F5000
G1 X70 F10000
G1 X100 F5000
G1 X165 F12000
G1 Y245
G1 X70
G1 Y265 F3000
G91
G1 Z-3 F1200
G90
M621 S[next_extruder]

View File

@@ -0,0 +1,33 @@
M620 S255
M106 P1 S255
M104 S250
M17 S
M17 X0.5 Y0.5
G91
G1 Y-5 F3000
G1 Z3 F1200
G90
G28 X
M17 R
G1 X70 F21000
G1 Y245
G1 Y265 F3000
G4
M106 P1 S0
M109 S250
G1 X90 F3000
G1 Y255 F4000
G1 X100 F5000
G1 X120 F21000
G1 X20 Y50
G1 Y-3
T255
G4
M104 S0
G1 X70 F3000
G91
G1 Z-3 F1200
G90
M621 S255

View File

@@ -0,0 +1,60 @@
{
"whitelist": [
],
"blacklist": [
{
"vendor": "Third Party",
"type": "TPU",
"action": "prohibition",
"description": "TPU: not supported"
},
{
"vendor": "Bambulab",
"type": "TPU",
"action": "prohibition",
"description": "TPU: not supported"
},
{
"vendor": "Third Party",
"type": "PVA",
"action": "warning",
"description": "PVA: flexible"
},
{
"vendor": "Third Party",
"type": "PLA-CF",
"action": "warning",
"description": "CF/GF: hard and brittle"
},
{
"vendor": "Third Party",
"type": "PETG-CF",
"action": "warning",
"description": "CF/GF: hard and brittle"
},
{
"vendor": "Third Party",
"type": "PA-CF",
"action": "warning",
"description": "CF/GF: hard and brittle"
},
{
"vendor": "Third Party",
"type": "PAHT-CF",
"action": "warning",
"description": "CF/GF: hard and brittle"
},
{
"vendor": "Bambulab",
"type": "PET-CF",
"action": "prohibition",
"description": "Bambu PET-CF/PA6-CF: not supported"
},
{
"vendor": "Bambulab",
"type": "PA6-CF",
"action": "prohibition",
"description": "Bambu PET-CF/PA6-CF: not supported"
}
]
}

View File

@@ -0,0 +1 @@
01.10.00.01

View File

@@ -0,0 +1,194 @@
{
"name": "Afinia",
"version": "02.03.01.10",
"force_update": "0",
"description": "Afinia configurations",
"machine_model_list": [
{
"name": "Afinia H+1(HS)",
"sub_path": "machine/Afinia H+1(HS).json"
}
],
"process_list": [
{
"name": "fdm_process_common",
"sub_path": "process/fdm_process_common.json"
},
{
"name": "fdm_process_afinia_common",
"sub_path": "process/fdm_process_afinia_common.json"
},
{
"name": "fdm_process_afinia_HS_common",
"sub_path": "process/fdm_process_afinia_HS_common.json"
},
{
"name": "0.12mm Fine @Afinia H+1(HS)",
"sub_path": "process/0.12mm Fine @Afinia H+1(HS).json"
},
{
"name": "0.16mm Optimal @Afinia H+1(HS)",
"sub_path": "process/0.16mm Optimal @Afinia H+1(HS).json"
},
{
"name": "0.20mm Standard @Afinia H+1(HS)",
"sub_path": "process/0.20mm Standard @Afinia H+1(HS).json"
},
{
"name": "0.24mm Draft @Afinia H+1(HS)",
"sub_path": "process/0.24mm Draft @Afinia H+1(HS).json"
},
{
"name": "0.28mm Extra Draft @Afinia H+1(HS)",
"sub_path": "process/0.28mm Extra Draft @Afinia H+1(HS).json"
},
{
"name": "fdm_process_afinia_0.18_nozzle_0.6",
"sub_path": "process/fdm_process_afinia_0.18_nozzle_0.6.json"
},
{
"name": "fdm_process_afinia_0.24_nozzle_0.6",
"sub_path": "process/fdm_process_afinia_0.24_nozzle_0.6.json"
},
{
"name": "fdm_process_afinia_0.30_nozzle_0.6",
"sub_path": "process/fdm_process_afinia_0.30_nozzle_0.6.json"
},
{
"name": "fdm_process_afinia_0.36_nozzle_0.6",
"sub_path": "process/fdm_process_afinia_0.36_nozzle_0.6.json"
},
{
"name": "fdm_process_afinia_0.42_nozzle_0.6",
"sub_path": "process/fdm_process_afinia_0.42_nozzle_0.6.json"
},
{
"name": "fdm_process_afinia_0.18_nozzle_0.6_HS",
"sub_path": "process/fdm_process_afinia_0.18_nozzle_0.6_HS.json"
},
{
"name": "fdm_process_afinia_0.24_nozzle_0.6_HS",
"sub_path": "process/fdm_process_afinia_0.24_nozzle_0.6_HS.json"
},
{
"name": "fdm_process_afinia_0.30_nozzle_0.6_HS",
"sub_path": "process/fdm_process_afinia_0.30_nozzle_0.6_HS.json"
},
{
"name": "fdm_process_afinia_0.36_nozzle_0.6_HS",
"sub_path": "process/fdm_process_afinia_0.36_nozzle_0.6_HS.json"
},
{
"name": "fdm_process_afinia_0.42_nozzle_0.6_HS",
"sub_path": "process/fdm_process_afinia_0.42_nozzle_0.6_HS.json"
},
{
"name": "0.18mm Fine @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.18mm Fine @Afinia H+1(HS) 0.6 nozzle.json"
},
{
"name": "0.24mm Standard @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.24mm Standard @Afinia H+1(HS) 0.6 nozzle.json"
},
{
"name": "0.30mm Standard @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.30mm Standard @Afinia H+1(HS) 0.6 nozzle.json"
},
{
"name": "0.30mm Strength @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.30mm Strength @Afinia H+1(HS) 0.6 nozzle.json"
},
{
"name": "0.36mm Draft @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.36mm Draft @Afinia H+1(HS) 0.6 nozzle.json"
},
{
"name": "0.42mm Extra Draft @Afinia H+1(HS) 0.6 nozzle",
"sub_path": "process/0.42mm Extra Draft @Afinia H+1(HS) 0.6 nozzle.json"
}
],
"filament_list": [
{
"name": "fdm_filament_common",
"sub_path": "filament/fdm_filament_common.json"
},
{
"name": "fdm_filament_pla",
"sub_path": "filament/fdm_filament_pla.json"
},
{
"name": "fdm_filament_abs",
"sub_path": "filament/fdm_filament_abs.json"
},
{
"name": "fdm_filament_tpu",
"sub_path": "filament/fdm_filament_tpu.json"
},
{
"name": "Afinia PLA",
"sub_path": "filament/Afinia PLA.json"
},
{
"name": "Afinia Value PLA",
"sub_path": "filament/Afinia Value PLA.json"
},
{
"name": "Afinia ABS",
"sub_path": "filament/Afinia ABS.json"
},
{
"name": "Afinia ABS+",
"sub_path": "filament/Afinia ABS+.json"
},
{
"name": "Afinia Value ABS",
"sub_path": "filament/Afinia Value ABS.json"
},
{
"name": "Afinia TPU",
"sub_path": "filament/Afinia TPU.json"
},
{
"name": "Afinia PLA@HS",
"sub_path": "filament/Afinia PLA@HS.json"
},
{
"name": "Afinia Value PLA@HS",
"sub_path": "filament/Afinia Value PLA@HS.json"
},
{
"name": "Afinia ABS@HS",
"sub_path": "filament/Afinia ABS@HS.json"
},
{
"name": "Afinia Value ABS@HS",
"sub_path": "filament/Afinia Value ABS@HS.json"
},
{
"name": "Afinia ABS+@HS",
"sub_path": "filament/Afinia ABS+@HS.json"
},
{
"name": "Afinia TPU@HS",
"sub_path": "filament/Afinia TPU@HS.json"
}
],
"machine_list": [
{
"name": "fdm_machine_common",
"sub_path": "machine/fdm_machine_common.json"
},
{
"name": "fdm_afinia_common",
"sub_path": "machine/fdm_afinia_common.json"
},
{
"name": "Afinia H+1(HS) 0.4 nozzle",
"sub_path": "machine/Afinia H+1(HS) 0.4 nozzle.json"
},
{
"name": "Afinia H+1(HS) 0.6 nozzle",
"sub_path": "machine/Afinia H+1(HS) 0.6 nozzle.json"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -0,0 +1,37 @@
{
"type": "filament",
"filament_id": "GFB00",
"setting_id": "GFSB00",
"name": "Afinia ABS+",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"nozzle_temperature": [
"275"
],
"nozzle_temperature_initial_layer": [
"275"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,37 @@
{
"type": "filament",
"filament_id": "GFB00_01",
"setting_id": "GFSB00",
"name": "Afinia ABS+@HS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"nozzle_temperature": [
"275"
],
"nozzle_temperature_initial_layer": [
"275"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,31 @@
{
"type": "filament",
"filament_id": "GFB00",
"setting_id": "GFSB00",
"name": "Afinia ABS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,31 @@
{
"type": "filament",
"filament_id": "GFB00_01",
"setting_id": "GFSB00",
"name": "Afinia ABS@HS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,34 @@
{
"type": "filament",
"filament_id": "GFA00",
"setting_id": "GFSA00",
"name": "Afinia PLA",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pla",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.26"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"21"
],
"filament_vendor": [
"Afinia"
],
"filament_long_retractions_when_cut": [
"1"
],
"filament_retraction_distances_when_cut": [
"18"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,34 @@
{
"type": "filament",
"filament_id": "GFA00_01",
"setting_id": "GFSA00",
"name": "Afinia PLA@HS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pla",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.26"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"21"
],
"filament_vendor": [
"Afinia"
],
"filament_long_retractions_when_cut": [
"1"
],
"filament_retraction_distances_when_cut": [
"18"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,27 @@
{
"type": "filament",
"name": "Afinia TPU",
"inherits": "fdm_filament_tpu",
"from": "system",
"filament_id": "GFU01",
"instantiation": "true",
"filament_vendor": [
"Afinia"
],
"filament_density": [
"1.22"
],
"nozzle_temperature_initial_layer": [
"230"
],
"filament_cost": [
"41.99"
],
"nozzle_temperature": [
"230"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,27 @@
{
"type": "filament",
"name": "Afinia TPU@HS",
"inherits": "fdm_filament_tpu",
"from": "system",
"filament_id": "GFU01_01",
"instantiation": "true",
"filament_vendor": [
"Afinia"
],
"filament_density": [
"1.22"
],
"nozzle_temperature_initial_layer": [
"230"
],
"filament_cost": [
"41.99"
],
"nozzle_temperature": [
"230"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,37 @@
{
"type": "filament",
"filament_id": "GFB00",
"setting_id": "GFSB00",
"name": "Afinia Value ABS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"nozzle_temperature": [
"245"
],
"nozzle_temperature_initial_layer": [
"245"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,37 @@
{
"type": "filament",
"filament_id": "GFB00_01",
"setting_id": "GFSB00",
"name": "Afinia Value ABS@HS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_abs",
"filament_flow_ratio": [
"0.95"
],
"filament_cost": [
"24.99"
],
"filament_vendor": [
"Afinia"
],
"fan_max_speed": [
"60"
],
"filament_max_volumetric_speed": [
"16"
],
"nozzle_temperature": [
"245"
],
"nozzle_temperature_initial_layer": [
"245"
],
"slow_down_layer_time": [
"12"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,40 @@
{
"type": "filament",
"filament_id": "GFA00",
"setting_id": "GFSA00",
"name": "Afinia Value PLA",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pla",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.26"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"21"
],
"filament_vendor": [
"Afinia"
],
"filament_long_retractions_when_cut": [
"1"
],
"filament_retraction_distances_when_cut": [
"18"
],
"nozzle_temperature": [
"190"
],
"nozzle_temperature_initial_layer": [
"190"
],
"compatible_printers": [
"Afinia H400 Pro 0.4 nozzle",
"Afinia H400 Pro 0.6 nozzle"
]
}

View File

@@ -0,0 +1,40 @@
{
"type": "filament",
"filament_id": "GFA00_01",
"setting_id": "GFSA00",
"name": "Afinia Value PLA@HS",
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pla",
"filament_cost": [
"24.99"
],
"filament_density": [
"1.26"
],
"filament_flow_ratio": [
"0.98"
],
"filament_max_volumetric_speed": [
"21"
],
"filament_vendor": [
"Afinia"
],
"filament_long_retractions_when_cut": [
"1"
],
"filament_retraction_distances_when_cut": [
"18"
],
"nozzle_temperature": [
"190"
],
"nozzle_temperature_initial_layer": [
"190"
],
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle",
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,82 @@
{
"type": "filament",
"name": "fdm_filament_abs",
"inherits": "fdm_filament_common",
"from": "system",
"instantiation": "false",
"activate_air_filtration": [
"0"
],
"cool_plate_temp": [
"0"
],
"cool_plate_temp_initial_layer": [
"0"
],
"eng_plate_temp": [
"90"
],
"eng_plate_temp_initial_layer": [
"90"
],
"fan_cooling_layer_time": [
"30"
],
"fan_max_speed": [
"80"
],
"fan_min_speed": [
"10"
],
"filament_cost": [
"20"
],
"filament_density": [
"1.04"
],
"filament_max_volumetric_speed": [
"28.6"
],
"filament_type": [
"ABS"
],
"hot_plate_temp": [
"90"
],
"hot_plate_temp_initial_layer": [
"90"
],
"nozzle_temperature": [
"270"
],
"nozzle_temperature_initial_layer": [
"270"
],
"nozzle_temperature_range_high": [
"280"
],
"nozzle_temperature_range_low": [
"240"
],
"overhang_fan_speed": [
"80"
],
"overhang_fan_threshold": [
"25%"
],
"reduce_fan_stop_start_freq": [
"1"
],
"slow_down_layer_time": [
"3"
],
"slow_down_min_speed": [
"20"
],
"textured_plate_temp": [
"90"
],
"textured_plate_temp_initial_layer": [
"90"
]
}

View File

@@ -0,0 +1,166 @@
{
"type": "filament",
"name": "fdm_filament_common",
"from": "system",
"instantiation": "false",
"activate_air_filtration": [
"0"
],
"chamber_temperatures": [
"0"
],
"close_fan_the_first_x_layers": [
"3"
],
"complete_print_exhaust_fan_speed": [
"70"
],
"cool_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"60"
],
"during_print_exhaust_fan_speed": [
"70"
],
"eng_plate_temp": [
"60"
],
"eng_plate_temp_initial_layer": [
"60"
],
"fan_cooling_layer_time": [
"60"
],
"fan_max_speed": [
"100"
],
"fan_min_speed": [
"35"
],
"filament_cost": [
"0"
],
"filament_density": [
"0"
],
"filament_deretraction_speed": [
"nil"
],
"filament_diameter": [
"1.75"
],
"filament_flow_ratio": [
"1"
],
"filament_is_support": [
"0"
],
"filament_long_retractions_when_cut": [
"nil"
],
"filament_max_volumetric_speed": [
"0"
],
"filament_minimal_purge_on_wipe_tower": [
"15"
],
"filament_retract_before_wipe": [
"nil"
],
"filament_retract_restart_extra": [
"nil"
],
"filament_retract_when_changing_layer": [
"nil"
],
"filament_retraction_distances_when_cut": [
"nil"
],
"filament_retraction_length": [
"nil"
],
"filament_retraction_minimum_travel": [
"nil"
],
"filament_retraction_speed": [
"nil"
],
"filament_settings_id": [
""
],
"filament_soluble": [
"0"
],
"filament_type": [
"PLA"
],
"filament_vendor": [
"Generic"
],
"filament_wipe": [
"nil"
],
"filament_wipe_distance": [
"nil"
],
"filament_z_hop": [
"nil"
],
"filament_z_hop_types": [
"nil"
],
"full_fan_speed_layer": [
"0"
],
"hot_plate_temp": [
"60"
],
"hot_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature": [
"200"
],
"nozzle_temperature_initial_layer": [
"200"
],
"overhang_fan_speed": [
"100"
],
"overhang_fan_threshold": [
"95%"
],
"reduce_fan_stop_start_freq": [
"0"
],
"required_nozzle_HRC": [
"3"
],
"slow_down_for_layer_cooling": [
"1"
],
"slow_down_layer_time": [
"8"
],
"slow_down_min_speed": [
"10"
],
"temperature_vitrification": [
"100"
],
"textured_plate_temp": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"compatible_printers": [],
"filament_start_gcode": [
"; Filament gcode\n;{if activate_air_filtration[current_extruder] && support_air_filtration}\n;M106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n;{endif}"
],
"filament_end_gcode": [
"; filament end gcode \n;M106 P3 S0\n"
]
}

View File

@@ -0,0 +1,82 @@
{
"type": "filament",
"name": "fdm_filament_pla",
"inherits": "fdm_filament_common",
"from": "system",
"instantiation": "false",
"fan_cooling_layer_time": [
"100"
],
"filament_max_volumetric_speed": [
"12"
],
"filament_density": [
"1.24"
],
"filament_cost": [
"20"
],
"cool_plate_temp": [
"35"
],
"eng_plate_temp": [
"0"
],
"hot_plate_temp": [
"60"
],
"textured_plate_temp": [
"60"
],
"cool_plate_temp_initial_layer": [
"35"
],
"eng_plate_temp_initial_layer": [
"0"
],
"hot_plate_temp_initial_layer": [
"60"
],
"textured_plate_temp_initial_layer": [
"60"
],
"nozzle_temperature_initial_layer": [
"220"
],
"reduce_fan_stop_start_freq": [
"1"
],
"fan_min_speed": [
"100"
],
"overhang_fan_threshold": [
"50%"
],
"close_fan_the_first_x_layers": [
"1"
],
"nozzle_temperature": [
"220"
],
"temperature_vitrification": [
"45"
],
"nozzle_temperature_range_low": [
"190"
],
"nozzle_temperature_range_high": [
"240"
],
"slow_down_min_speed": [
"20"
],
"slow_down_layer_time": [
"4"
],
"additional_cooling_fan_speed": [
"70"
],
"filament_start_gcode": [
"; filament start gcode\n;{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n;{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n;{endif}\n\n;{if activate_air_filtration[current_extruder] && support_air_filtration}\n;M106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n;{endif}"
]
}

View File

@@ -0,0 +1,79 @@
{
"type": "filament",
"name": "fdm_filament_tpu",
"inherits": "fdm_filament_common",
"from": "system",
"instantiation": "false",
"additional_cooling_fan_speed": [
"70"
],
"close_fan_the_first_x_layers": [
"1"
],
"cool_plate_temp": [
"30"
],
"cool_plate_temp_initial_layer": [
"30"
],
"eng_plate_temp": [
"30"
],
"eng_plate_temp_initial_layer": [
"30"
],
"fan_cooling_layer_time": [
"100"
],
"fan_min_speed": [
"100"
],
"filament_cost": [
"20"
],
"filament_density": [
"1.24"
],
"filament_max_volumetric_speed": [
"8"
],
"filament_retraction_length": [
"2.0"
],
"filament_type": [
"TPU"
],
"hot_plate_temp": [
"35"
],
"hot_plate_temp_initial_layer": [
"35"
],
"nozzle_temperature": [
"240"
],
"nozzle_temperature_initial_layer": [
"240"
],
"nozzle_temperature_range_high": [
"250"
],
"nozzle_temperature_range_low": [
"200"
],
"reduce_fan_stop_start_freq": [
"1"
],
"temperature_vitrification": [
"30"
],
"textured_plate_temp": [
"35"
],
"textured_plate_temp_initial_layer": [
"35"
],
"filament_start_gcode": [
"; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}"
]
}

View File

@@ -0,0 +1,21 @@
{
"type": "machine",
"setting_id": "GM001",
"name": "Afinia H+1(HS) 0.4 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "fdm_afinia_common",
"printer_model": "Afinia H+1(HS)",
"default_print_profile": "0.20mm Standard @Afinia H+1(HS)",
"nozzle_diameter": [
"0.4"
],
"printer_variant": "0.4",
"printable_area": [
"0x0",
"207x0",
"207x255",
"0x255"
],
"printable_height": "230"
}

View File

@@ -0,0 +1,26 @@
{
"type": "machine",
"setting_id": "GM001",
"name": "Afinia H+1(HS) 0.6 nozzle",
"from": "system",
"instantiation": "true",
"inherits": "Afinia H+1(HS) 0.4 nozzle",
"printer_model": "Afinia H+1(HS)",
"default_print_profile": "0.30mm Strength @Afinia H+1(HS) 0.6 nozzle",
"nozzle_diameter": [
"0.6"
],
"printer_variant": "0.6",
"max_layer_height": [
"0.42"
],
"min_layer_height": [
"0.18"
],
"retraction_length": [
"1.4"
],
"retraction_minimum_travel": [
"3"
]
}

View File

@@ -0,0 +1,12 @@
{
"type": "machine_model",
"name": "Afinia H+1(HS)",
"model_id": "my_afinia_h_1_hs_01",
"nozzle_diameter": "0.4;0.6",
"machine_tech": "FFF",
"family": "Afinia",
"bed_model": "",
"bed_texture": "",
"hotend_model": "",
"default_materials": "Afinia ABS;Afinia PLA"
}

View File

@@ -0,0 +1,60 @@
{
"type": "machine",
"name": "fdm_afinia_common",
"from": "system",
"instantiation": "false",
"inherits": "fdm_machine_common",
"gcode_flavor": "klipper",
"machine_max_acceleration_e": ["5000", "5000"],
"machine_max_acceleration_extruding": ["20000", "20000"],
"machine_max_acceleration_retracting": ["5000", "5000"],
"machine_max_acceleration_travel": ["20000", "20000"],
"machine_max_acceleration_x": ["20000", "20000"],
"machine_max_acceleration_y": ["20000", "20000"],
"machine_max_acceleration_z": ["500", "200"],
"machine_max_speed_e": ["25", "25"],
"machine_max_speed_x": ["500", "200"],
"machine_max_speed_y": ["500", "200"],
"machine_max_speed_z": ["12", "12"],
"machine_max_jerk_e": ["2.5", "2.5"],
"machine_max_jerk_x": ["9", "9"],
"machine_max_jerk_y": ["9", "9"],
"machine_max_jerk_z": ["0.2", "0.4"],
"machine_min_extruding_rate": ["0", "0"],
"machine_min_travel_rate": ["0", "0"],
"max_layer_height": ["0.32"],
"min_layer_height": ["0.08"],
"printable_height": "250",
"extruder_clearance_radius": "65",
"extruder_clearance_height_to_rod": "36",
"extruder_clearance_height_to_lid": "140",
"printer_settings_id": "",
"printer_technology": "FFF",
"printer_variant": "0.4",
"retraction_minimum_travel": ["1"],
"retract_before_wipe": ["70%"],
"retract_when_changing_layer": ["1"],
"retraction_length": ["0.8"],
"retract_length_toolchange": ["2"],
"z_hop": ["0.4"],
"retract_restart_extra": ["0"],
"retract_restart_extra_toolchange": ["0"],
"retraction_speed": ["30"],
"deretraction_speed": ["30"],
"z_hop_types": "Normal Lift",
"silent_mode": "0",
"single_extruder_multi_material": "1",
"change_filament_gcode": "",
"wipe": ["1"],
"default_filament_profile": [""],
"default_print_profile": "0.20mm Standard @Afinia H+1(HS)",
"bed_exclude_area": ["0x0"],
"machine_start_gcode": ";M190 S[bed_temperature_initial_layer_single]\n;M109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n",
"machine_end_gcode": "PRINT_END",
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
"machine_pause_gcode": "PAUSE",
"scan_first_layer": "0",
"nozzle_type": "undefine",
"auxiliary_fan": "0"
}

View File

@@ -0,0 +1,119 @@
{
"type": "machine",
"name": "fdm_machine_common",
"from": "system",
"instantiation": "false",
"printer_technology": "FFF",
"deretraction_speed": [
"40"
],
"extruder_colour": [
"#FCE94F"
],
"extruder_offset": [
"0x0"
],
"gcode_flavor": "marlin",
"silent_mode": "0",
"machine_max_acceleration_e": [
"5000"
],
"machine_max_acceleration_extruding": [
"10000"
],
"machine_max_acceleration_retracting": [
"1000"
],
"machine_max_acceleration_x": [
"10000"
],
"machine_max_acceleration_y": [
"10000"
],
"machine_max_acceleration_z": [
"500"
],
"machine_max_speed_e": [
"60"
],
"machine_max_speed_x": [
"500"
],
"machine_max_speed_y": [
"500"
],
"machine_max_speed_z": [
"10"
],
"machine_max_jerk_e": [
"5"
],
"machine_max_jerk_x": [
"8"
],
"machine_max_jerk_y": [
"8"
],
"machine_max_jerk_z": [
"0.4"
],
"machine_min_extruding_rate": [
"0"
],
"machine_min_travel_rate": [
"0"
],
"max_layer_height": [
"0.32"
],
"min_layer_height": [
"0.08"
],
"printable_height": "250",
"extruder_clearance_radius": "65",
"extruder_clearance_height_to_rod": "36",
"extruder_clearance_height_to_lid": "140",
"nozzle_diameter": [
"0.4"
],
"printer_settings_id": "",
"printer_variant": "0.4",
"retraction_minimum_travel": [
"2"
],
"retract_before_wipe": [
"70%"
],
"retract_when_changing_layer": [
"1"
],
"retraction_length": [
"5"
],
"retract_length_toolchange": [
"1"
],
"z_hop": [
"0"
],
"retract_restart_extra": [
"0"
],
"retract_restart_extra_toolchange": [
"0"
],
"retraction_speed": [
"60"
],
"single_extruder_multi_material": "1",
"change_filament_gcode": "",
"wipe": [
"1"
],
"default_print_profile": "",
"machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up",
"machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end",
"layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]",
"before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n",
"machine_pause_gcode": "M601"
}

View File

@@ -0,0 +1,30 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.12mm Fine @Afinia H+1(HS)",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_afinia_HS_common",
"layer_height": "0.12",
"bottom_shell_layers": "5",
"elefant_foot_compensation": "0.15",
"top_shell_layers": "5",
"top_shell_thickness": "0.6",
"bridge_flow": "1",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "105",
"outer_wall_speed": "150",
"inner_wall_speed": "200",
"sparse_infill_speed": "200",
"internal_solid_infill_speed": "200",
"gap_infill_speed": "150",
"overhang_1_4_speed": "60",
"overhang_2_4_speed": "30",
"overhang_3_4_speed": "10",
"support_threshold_angle": "20",
"support_top_z_distance": "0.12",
"support_bottom_z_distance": "0.12",
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle"
]
}

View File

@@ -0,0 +1,30 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.16mm Optimal @Afinia H+1(HS)",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_afinia_HS_common",
"layer_height": "0.16",
"elefant_foot_compensation": "0.15",
"bottom_shell_layers": "4",
"top_shell_layers": "6",
"top_shell_thickness": "1.0",
"bridge_flow": "1",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "105",
"outer_wall_speed": "150",
"inner_wall_speed": "200",
"sparse_infill_speed": "200",
"internal_solid_infill_speed": "200",
"gap_infill_speed": "150",
"overhang_1_4_speed": "60",
"overhang_2_4_speed": "30",
"overhang_3_4_speed": "10",
"support_threshold_angle": "25",
"support_top_z_distance": "0.16",
"support_bottom_z_distance": "0.16",
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "0.18mm Fine @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.18_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP021",
"instantiation": "true",
"description": "It has a smaller layer height and results in smoother surface and higher printing quality.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,22 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.20mm Standard @Afinia H+1(HS)",
"from": "system",
"inherits": "fdm_process_afinia_HS_common",
"instantiation": "true",
"elefant_foot_compensation": "0.15",
"top_shell_thickness": "1.0",
"bridge_flow": "1",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "105",
"outer_wall_speed": "150",
"inner_wall_speed": "200",
"sparse_infill_speed": "200",
"internal_solid_infill_speed": "200",
"gap_infill_speed": "150",
"top_shell_layers": "5",
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle"
]
}

View File

@@ -0,0 +1,25 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.24mm Draft @Afinia H+1(HS)",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_afinia_HS_common",
"layer_height": "0.24",
"elefant_foot_compensation": "0.15",
"top_surface_line_width": "0.45",
"top_shell_thickness": "1.0",
"bridge_flow": "1",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "105",
"outer_wall_speed": "150",
"inner_wall_speed": "200",
"sparse_infill_speed": "200",
"internal_solid_infill_speed": "200",
"gap_infill_speed": "150",
"support_threshold_angle": "35",
"top_shell_layers": "4",
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "0.24mm Standard @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.24_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP022",
"instantiation": "true",
"description": "It has a balanced layer height for good quality and reasonable printing time.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,25 @@
{
"type": "process",
"setting_id": "GP004",
"name": "0.28mm Extra Draft @Afinia H+1(HS)",
"from": "system",
"instantiation": "true",
"inherits": "fdm_process_afinia_HS_common",
"layer_height": "0.28",
"elefant_foot_compensation": "0.15",
"top_surface_line_width": "0.45",
"top_shell_thickness": "1.0",
"bridge_flow": "1",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "105",
"outer_wall_speed": "200",
"inner_wall_speed": "200",
"sparse_infill_speed": "200",
"internal_solid_infill_speed": "200",
"gap_infill_speed": "200",
"support_threshold_angle": "40",
"top_shell_layers": "4",
"compatible_printers": [
"Afinia H+1(HS) 0.4 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "0.30mm Standard @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.30_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP023",
"instantiation": "true",
"description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,17 @@
{
"type": "process",
"name": "0.30mm Strength @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.30_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP024",
"instantiation": "true",
"description": "It has a big layer height with optimized settings for stronger parts.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"sparse_infill_density": "25%",
"wall_loops": "3",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "0.36mm Draft @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.36_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP025",
"instantiation": "true",
"description": "It has a bigger layer height for faster printing but with more visible layer lines.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "0.42mm Extra Draft @Afinia H+1(HS) 0.6 nozzle",
"inherits": "fdm_process_afinia_0.42_nozzle_0.6_HS",
"from": "system",
"setting_id": "GP026",
"instantiation": "true",
"description": "It has the biggest layer height for fastest printing but with very visible layer lines.",
"elefant_foot_compensation": "0.15",
"smooth_coefficient": "150",
"overhang_totally_speed": "50",
"compatible_printers": [
"Afinia H+1(HS) 0.6 nozzle"
]
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.18_nozzle_0.6",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.18",
"initial_layer_print_height": "0.18",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "120",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.18_nozzle_0.6_HS",
"inherits": "fdm_process_afinia_HS_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.18",
"initial_layer_print_height": "0.18",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "120",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.24_nozzle_0.6",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.24",
"initial_layer_print_height": "0.24",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "130",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.24_nozzle_0.6_HS",
"inherits": "fdm_process_afinia_HS_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.24",
"initial_layer_print_height": "0.24",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "130",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.30_nozzle_0.6",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.3",
"initial_layer_print_height": "0.3",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "150",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.30_nozzle_0.6_HS",
"inherits": "fdm_process_afinia_HS_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.3",
"initial_layer_print_height": "0.3",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "150",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.36_nozzle_0.6",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.36",
"initial_layer_print_height": "0.36",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "140",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.36_nozzle_0.6_HS",
"inherits": "fdm_process_afinia_HS_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.36",
"initial_layer_print_height": "0.36",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "140",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.42_nozzle_0.6",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.42",
"initial_layer_print_height": "0.42",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "130",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,26 @@
{
"type": "process",
"name": "fdm_process_afinia_0.42_nozzle_0.6_HS",
"inherits": "fdm_process_afinia_HS_common",
"from": "system",
"instantiation": "false",
"layer_height": "0.42",
"initial_layer_print_height": "0.42",
"bridge_flow": "1",
"line_width": "0.62",
"outer_wall_line_width": "0.62",
"ironing_inset": "0.31",
"initial_layer_line_width": "0.62",
"sparse_infill_line_width": "0.62",
"inner_wall_line_width": "0.62",
"internal_solid_infill_line_width": "0.62",
"support_line_width": "0.62",
"top_surface_line_width": "0.62",
"initial_layer_speed": "35",
"initial_layer_infill_speed": "55",
"sparse_infill_speed": "100",
"top_surface_speed": "130",
"bridge_speed": "30",
"overhang_3_4_speed": "15",
"tree_support_tip_diameter": "1.2"
}

View File

@@ -0,0 +1,15 @@
{
"type": "process",
"name": "fdm_process_afinia_HS_common",
"inherits": "fdm_process_afinia_common",
"from": "system",
"instantiation": "false",
"default_acceleration": "4000",
"travel_acceleration": "4000",
"outer_wall_acceleration": "2500",
"inner_wall_acceleration": "3000",
"initial_layer_acceleration": "500",
"top_surface_acceleration": "2000",
"travel_speed": "200",
"compatible_printers": []
}

View File

@@ -0,0 +1,79 @@
{
"type": "process",
"name": "fdm_process_afinia_common",
"inherits": "fdm_process_common",
"from": "system",
"instantiation": "false",
"max_travel_detour_distance": "0",
"bottom_surface_pattern": "monotonic",
"bottom_shell_layers": "3",
"bottom_shell_thickness": "0",
"bridge_speed": "50",
"brim_object_gap": "0.1",
"compatible_printers_condition": "",
"draft_shield": "disabled",
"elefant_foot_compensation": "0",
"enable_arc_fitting": "1",
"default_acceleration": "6000",
"travel_acceleration": "6000",
"outer_wall_acceleration": "3000",
"inner_wall_acceleration": "5000",
"top_surface_acceleration": "2000",
"initial_layer_acceleration": "500",
"line_width": "0.42",
"internal_bridge_support_thickness": "0.8",
"initial_layer_line_width": "0.5",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "90",
"outer_wall_speed": "120",
"inner_wall_speed": "160",
"gap_infill_speed": "50",
"sparse_infill_speed": "250",
"ironing_flow": "10%",
"ironing_spacing": "0.15",
"ironing_speed": "30",
"ironing_type": "no ironing",
"layer_height": "0.2",
"reduce_infill_retraction": "1",
"filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}.gcode",
"detect_overhang_wall": "1",
"overhang_1_4_speed": "0",
"overhang_2_4_speed": "50",
"overhang_3_4_speed": "30",
"overhang_4_4_speed": "10",
"only_one_wall_top": "1",
"seam_position": "aligned",
"skirt_height": "1",
"skirt_loops": "0",
"minimum_sparse_infill_area": "15",
"internal_solid_infill_line_width": "0.42",
"internal_solid_infill_speed": "180",
"resolution": "0.012",
"support_type": "normal(auto)",
"support_style": "default",
"support_top_z_distance": "0.2",
"support_bottom_z_distance": "0.2",
"support_interface_bottom_layers": "2",
"support_interface_spacing": "0.5",
"support_expansion": "0",
"support_base_pattern_spacing": "2.5",
"support_speed": "200",
"support_interface_speed": "80",
"support_threshold_angle": "30",
"support_object_xy_distance": "0.35",
"tree_support_branch_diameter": "2",
"tree_support_branch_angle": "45",
"tree_support_wall_count": "0",
"top_surface_pattern": "monotonicline",
"top_surface_speed": "200",
"top_shell_layers": "3",
"top_shell_thickness": "0.8",
"travel_speed": "500",
"enable_prime_tower": "1",
"wipe_tower_no_sparse_layers": "0",
"prime_tower_width": "35",
"wall_generator": "classic",
"exclude_object": "1",
"wall_infill_order": "outer wall/inner wall/infill",
"compatible_printers": []
}

View File

@@ -0,0 +1,72 @@
{
"type": "process",
"name": "fdm_process_common",
"from": "system",
"instantiation": "false",
"adaptive_layer_height": "0",
"reduce_crossing_wall": "0",
"bridge_flow": "0.95",
"bridge_speed": "50",
"brim_width": "5",
"print_sequence": "by layer",
"default_acceleration": "10000",
"bridge_no_support": "0",
"elefant_foot_compensation": "0.1",
"outer_wall_line_width": "0.42",
"outer_wall_speed": "120",
"inner_wall_speed": "160",
"line_width": "0.45",
"infill_direction": "45",
"sparse_infill_density": "15%",
"sparse_infill_pattern": "crosshatch",
"initial_layer_line_width": "0.42",
"initial_layer_print_height": "0.2",
"initial_layer_speed": "50",
"initial_layer_infill_speed": "90",
"gap_infill_speed": "50",
"infill_combination": "0",
"sparse_infill_line_width": "0.45",
"infill_wall_overlap": "15%",
"sparse_infill_speed": "200",
"interface_shells": "0",
"detect_overhang_wall": "0",
"reduce_infill_retraction": "0",
"filename_format": "{input_filename_base}.gcode",
"wall_loops": "2",
"inner_wall_line_width": "0.45",
"print_settings_id": "",
"raft_layers": "0",
"seam_position": "nearest",
"skirt_distance": "2",
"skirt_height": "2",
"minimum_sparse_infill_area": "0",
"internal_solid_infill_line_width": "0.45",
"internal_solid_infill_speed": "180",
"spiral_mode": "0",
"standby_temperature_delta": "-5",
"enable_support": "0",
"support_filament": "0",
"support_line_width": "0.42",
"support_interface_filament": "0",
"support_on_build_plate_only": "0",
"support_top_z_distance": "0.15",
"support_interface_loop_pattern": "0",
"support_interface_top_layers": "2",
"support_interface_spacing": "0",
"support_interface_speed": "80",
"support_interface_pattern": "auto",
"support_base_pattern": "default",
"support_base_pattern_spacing": "2",
"support_speed": "200",
"support_threshold_angle": "40",
"support_object_xy_distance": "0.5",
"detect_thin_wall": "0",
"top_surface_line_width": "0.42",
"top_surface_speed": "120",
"travel_speed": "400",
"enable_prime_tower": "0",
"prime_tower_width": "60",
"xy_hole_compensation": "0",
"xy_contour_compensation": "0",
"compatible_printers": []
}

View File

@@ -0,0 +1,390 @@
{
"name": "Anker",
"version": "02.03.01.10",
"force_update": "0",
"description": "Anker configurations",
"machine_model_list": [
{
"name": "Anker M5",
"sub_path": "machine/Anker M5.json"
},
{
"name": "Anker M5 All-Metal Hot End",
"sub_path": "machine/Anker M5 All-Metal Hot End.json"
},
{
"name": "Anker M5C",
"sub_path": "machine/Anker M5C.json"
}
],
"process_list": [
{
"name": "fdm_process_common",
"sub_path": "process/fdm_process_common.json"
},
{
"name": "fdm_process_anker_common",
"sub_path": "process/fdm_process_anker_common.json"
},
{
"name": "fdm_process_anker_common_0_2",
"sub_path": "process/fdm_process_anker_common_0_2.json"
},
{
"name": "fdm_process_anker_common_0_25",
"sub_path": "process/fdm_process_anker_common_0_25.json"
},
{
"name": "fdm_process_anker_common_0_6",
"sub_path": "process/fdm_process_anker_common_0_6.json"
},
{
"name": "0.05mm Ultradetail @Anker",
"sub_path": "process/0.05mm Ultradetail @Anker.json"
},
{
"name": "0.10mm Detail @Anker",
"sub_path": "process/0.10mm Detail @Anker.json"
},
{
"name": "0.15mm Optimal @Anker",
"sub_path": "process/0.15mm Optimal @Anker.json"
},
{
"name": "0.20mm Standard @Anker",
"sub_path": "process/0.20mm Standard @Anker.json"
},
{
"name": "0.25mm Draft @Anker",
"sub_path": "process/0.25mm Draft @Anker.json"
},
{
"name": "0.30mm Superdraft @Anker",
"sub_path": "process/0.30mm Superdraft @Anker.json"
},
{
"name": "fdm_process_anker_fast_common",
"sub_path": "process/fdm_process_anker_fast_common.json"
},
{
"name": "0.05mm Optimal 0.2 nozzle @Anker",
"sub_path": "process/0.05mm Optimal 0.2 nozzle @Anker.json"
},
{
"name": "0.10mm Standard 0.2 nozzle @Anker",
"sub_path": "process/0.10mm Standard 0.2 nozzle @Anker.json"
},
{
"name": "0.15mm Draft 0.2 nozzle @Anker",
"sub_path": "process/0.15mm Draft 0.2 nozzle @Anker.json"
},
{
"name": "0.05mm Optimal 0.25 nozzle @Anker",
"sub_path": "process/0.05mm Optimal 0.25 nozzle @Anker.json"
},
{
"name": "0.10mm Standard 0.25 nozzle @Anker",
"sub_path": "process/0.10mm Standard 0.25 nozzle @Anker.json"
},
{
"name": "0.15mm Draft 0.25 nozzle @Anker",
"sub_path": "process/0.15mm Draft 0.25 nozzle @Anker.json"
},
{
"name": "0.15mm Detail 0.6 nozzle @Anker",
"sub_path": "process/0.15mm Detail 0.6 nozzle @Anker.json"
},
{
"name": "0.20mm Optimal 0.6 nozzle @Anker",
"sub_path": "process/0.20mm Optimal 0.6 nozzle @Anker.json"
},
{
"name": "0.30mm Standard 0.6mm nozzle @Anker",
"sub_path": "process/0.30mm Standard 0.6mm nozzle @Anker.json"
},
{
"name": "0.35mm Draft 0.6mm nozzle @Anker",
"sub_path": "process/0.35mm Draft 0.6mm nozzle @Anker.json"
},
{
"name": "0.40mm Superdraft 0.6mm nozzle @Anker",
"sub_path": "process/0.40mm Superdraft 0.6mm nozzle @Anker.json"
},
{
"name": "0.15mm Fast @Anker",
"sub_path": "process/0.15mm Fast @Anker.json"
},
{
"name": "0.20mm Fast @Anker",
"sub_path": "process/0.20mm Fast @Anker.json"
},
{
"name": "0.25mm Fast @Anker",
"sub_path": "process/0.25mm Fast @Anker.json"
}
],
"filament_list": [
{
"name": "fdm_filament_common",
"sub_path": "filament/fdm_filament_common.json"
},
{
"name": "fdm_filament_abs",
"sub_path": "filament/fdm_filament_abs.json"
},
{
"name": "fdm_filament_asa",
"sub_path": "filament/fdm_filament_asa.json"
},
{
"name": "fdm_filament_pa",
"sub_path": "filament/fdm_filament_pa.json"
},
{
"name": "fdm_filament_pc",
"sub_path": "filament/fdm_filament_pc.json"
},
{
"name": "fdm_filament_pet",
"sub_path": "filament/fdm_filament_pet.json"
},
{
"name": "fdm_filament_pla",
"sub_path": "filament/fdm_filament_pla.json"
},
{
"name": "fdm_filament_pva",
"sub_path": "filament/fdm_filament_pva.json"
},
{
"name": "fdm_filament_tpu",
"sub_path": "filament/fdm_filament_tpu.json"
},
{
"name": "Anker Generic ABS @base",
"sub_path": "filament/Anker Generic ABS @base.json"
},
{
"name": "Anker Generic ASA @base",
"sub_path": "filament/Anker Generic ASA @base.json"
},
{
"name": "Anker Generic PA @base",
"sub_path": "filament/Anker Generic PA @base.json"
},
{
"name": "Anker Generic PA-CF @base",
"sub_path": "filament/Anker Generic PA-CF @base.json"
},
{
"name": "Anker Generic PC @base",
"sub_path": "filament/Anker Generic PC @base.json"
},
{
"name": "Anker Generic PETG @base",
"sub_path": "filament/Anker Generic PETG @base.json"
},
{
"name": "Anker Generic PETG-CF @base",
"sub_path": "filament/Anker Generic PETG-CF @base.json"
},
{
"name": "Anker Generic PLA @base",
"sub_path": "filament/Anker Generic PLA @base.json"
},
{
"name": "Anker Generic PLA Silk @base",
"sub_path": "filament/Anker Generic PLA Silk @base.json"
},
{
"name": "Anker Generic PLA+ @base",
"sub_path": "filament/Anker Generic PLA+ @base.json"
},
{
"name": "Anker Generic PLA-CF @base",
"sub_path": "filament/Anker Generic PLA-CF @base.json"
},
{
"name": "Anker Generic PVA @base",
"sub_path": "filament/Anker Generic PVA @base.json"
},
{
"name": "Anker Generic TPU @base",
"sub_path": "filament/Anker Generic TPU @base.json"
},
{
"name": "Anker Generic ABS",
"sub_path": "filament/Anker Generic ABS.json"
},
{
"name": "Anker Generic ABS 0.2 nozzle",
"sub_path": "filament/Anker Generic ABS 0.2 nozzle.json"
},
{
"name": "Anker Generic ABS 0.25 nozzle",
"sub_path": "filament/Anker Generic ABS 0.25 nozzle.json"
},
{
"name": "Anker Generic ASA",
"sub_path": "filament/Anker Generic ASA.json"
},
{
"name": "Anker Generic ASA 0.2 nozzle",
"sub_path": "filament/Anker Generic ASA 0.2 nozzle.json"
},
{
"name": "Anker Generic ASA 0.25 nozzle",
"sub_path": "filament/Anker Generic ASA 0.25 nozzle.json"
},
{
"name": "Anker Generic PA",
"sub_path": "filament/Anker Generic PA.json"
},
{
"name": "Anker Generic PA 0.2 nozzle",
"sub_path": "filament/Anker Generic PA 0.2 nozzle.json"
},
{
"name": "Anker Generic PA 0.25 nozzle",
"sub_path": "filament/Anker Generic PA 0.25 nozzle.json"
},
{
"name": "Anker Generic PA-CF",
"sub_path": "filament/Anker Generic PA-CF.json"
},
{
"name": "Anker Generic PC",
"sub_path": "filament/Anker Generic PC.json"
},
{
"name": "Anker Generic PC 0.2 nozzle",
"sub_path": "filament/Anker Generic PC 0.2 nozzle.json"
},
{
"name": "Anker Generic PC 0.25 nozzle",
"sub_path": "filament/Anker Generic PC 0.25 nozzle.json"
},
{
"name": "Anker Generic PETG",
"sub_path": "filament/Anker Generic PETG.json"
},
{
"name": "Anker Generic PETG 0.2 nozzle",
"sub_path": "filament/Anker Generic PETG 0.2 nozzle.json"
},
{
"name": "Anker Generic PETG 0.25 nozzle",
"sub_path": "filament/Anker Generic PETG 0.25 nozzle.json"
},
{
"name": "Anker Generic PETG-CF",
"sub_path": "filament/Anker Generic PETG-CF.json"
},
{
"name": "Anker Generic PLA",
"sub_path": "filament/Anker Generic PLA.json"
},
{
"name": "Anker Generic PLA 0.2 nozzle",
"sub_path": "filament/Anker Generic PLA 0.2 nozzle.json"
},
{
"name": "Anker Generic PLA 0.25 nozzle",
"sub_path": "filament/Anker Generic PLA 0.25 nozzle.json"
},
{
"name": "Anker Generic PLA Silk",
"sub_path": "filament/Anker Generic PLA Silk.json"
},
{
"name": "Anker Generic PLA Silk 0.2 nozzle",
"sub_path": "filament/Anker Generic PLA Silk 0.2 nozzle.json"
},
{
"name": "Anker Generic PLA Silk 0.25 nozzle",
"sub_path": "filament/Anker Generic PLA Silk 0.25 nozzle.json"
},
{
"name": "Anker Generic PLA+",
"sub_path": "filament/Anker Generic PLA+.json"
},
{
"name": "Anker Generic PLA+ 0.2 nozzle",
"sub_path": "filament/Anker Generic PLA+ 0.2 nozzle.json"
},
{
"name": "Anker Generic PLA+ 0.25 nozzle",
"sub_path": "filament/Anker Generic PLA+ 0.25 nozzle.json"
},
{
"name": "Anker Generic PLA-CF",
"sub_path": "filament/Anker Generic PLA-CF.json"
},
{
"name": "Anker Generic PVA",
"sub_path": "filament/Anker Generic PVA.json"
},
{
"name": "Anker Generic TPU",
"sub_path": "filament/Anker Generic TPU.json"
}
],
"machine_list": [
{
"name": "fdm_machine_common",
"sub_path": "machine/fdm_machine_common.json"
},
{
"name": "fdm_marlin_common",
"sub_path": "machine/fdm_marlin_common.json"
},
{
"name": "Anker M5 0.2 nozzle",
"sub_path": "machine/Anker M5 0.2 nozzle.json"
},
{
"name": "Anker M5 0.25 nozzle",
"sub_path": "machine/Anker M5 0.25 nozzle.json"
},
{
"name": "Anker M5 0.4 nozzle",
"sub_path": "machine/Anker M5 0.4 nozzle.json"
},
{
"name": "Anker M5 0.6 nozzle",
"sub_path": "machine/Anker M5 0.6 nozzle.json"
},
{
"name": "Anker M5 All-Metal 0.2 nozzle",
"sub_path": "machine/Anker M5 All-Metal 0.2 nozzle.json"
},
{
"name": "Anker M5 All-Metal 0.25 nozzle",
"sub_path": "machine/Anker M5 All-Metal 0.25 nozzle.json"
},
{
"name": "Anker M5 All-Metal 0.4 nozzle",
"sub_path": "machine/Anker M5 All-Metal 0.4 nozzle.json"
},
{
"name": "Anker M5 All-Metal 0.6 nozzle",
"sub_path": "machine/Anker M5 All-Metal 0.6 nozzle.json"
},
{
"name": "Anker M5C 0.2 nozzle",
"sub_path": "machine/Anker M5C 0.2 nozzle.json"
},
{
"name": "Anker M5C 0.25 nozzle",
"sub_path": "machine/Anker M5C 0.25 nozzle.json"
},
{
"name": "Anker M5C 0.4 nozzle",
"sub_path": "machine/Anker M5C 0.4 nozzle.json"
},
{
"name": "Anker M5C 0.6 nozzle",
"sub_path": "machine/Anker M5C 0.6 nozzle.json"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ABS 0.2 nozzle",
"inherits": "Anker Generic ABS @base",
"from": "system",
"setting_id": "GFSB99_20",
"instantiation": "true",
"filament_max_volumetric_speed": [
"2"
],
"compatible_printers": [
"Anker M5 0.2 nozzle",
"Anker M5 All-Metal 0.2 nozzle",
"Anker M5C 0.2 nozzle"
]
}

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ABS 0.25 nozzle",
"inherits": "Anker Generic ABS @base",
"from": "system",
"setting_id": "GFSB99_25",
"instantiation": "true",
"filament_max_volumetric_speed": [
"3"
],
"compatible_printers": [
"Anker M5 0.25 nozzle",
"Anker M5 All-Metal 0.25 nozzle",
"Anker M5C 0.25 nozzle"
]
}

View File

@@ -0,0 +1,8 @@
{
"type": "filament",
"name": "Anker Generic ABS @base",
"inherits": "fdm_filament_abs",
"from": "system",
"filament_id": "GFB99",
"instantiation": "false"
}

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ABS",
"inherits": "Anker Generic ABS @base",
"from": "system",
"setting_id": "GFSB99",
"instantiation": "true",
"compatible_printers": [
"Anker M5 0.4 nozzle",
"Anker M5 0.6 nozzle",
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ASA 0.2 nozzle",
"inherits": "Anker Generic ASA @base",
"from": "system",
"setting_id": "GFSB98_20",
"instantiation": "true",
"filament_max_volumetric_speed": [
"2"
],
"compatible_printers": [
"Anker M5 0.2 nozzle",
"Anker M5 All-Metal 0.2 nozzle",
"Anker M5C 0.2 nozzle"
]
}

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ASA 0.25 nozzle",
"inherits": "Anker Generic ASA @base",
"from": "system",
"setting_id": "GFSB98_25",
"instantiation": "true",
"filament_max_volumetric_speed": [
"3"
],
"compatible_printers": [
"Anker M5 0.25 nozzle",
"Anker M5 All-Metal 0.25 nozzle",
"Anker M5C 0.25 nozzle"
]
}

View File

@@ -0,0 +1,8 @@
{
"type": "filament",
"name": "Anker Generic ASA @base",
"inherits": "fdm_filament_asa",
"from": "system",
"filament_id": "GFB98",
"instantiation": "false"
}

View File

@@ -0,0 +1,16 @@
{
"type": "filament",
"name": "Anker Generic ASA",
"inherits": "Anker Generic ASA @base",
"from": "system",
"setting_id": "GFSB98",
"instantiation": "true",
"compatible_printers": [
"Anker M5 0.4 nozzle",
"Anker M5 0.6 nozzle",
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "filament",
"name": "Anker Generic PA 0.2 nozzle",
"inherits": "Anker Generic PA @base",
"from": "system",
"setting_id": "GFSN99_20",
"instantiation": "true",
"filament_max_volumetric_speed": [
"2"
],
"compatible_printers": [
"Anker M5 All-Metal 0.2 nozzle",
"Anker M5C 0.2 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "filament",
"name": "Anker Generic PA 0.25 nozzle",
"inherits": "Anker Generic PA @base",
"from": "system",
"setting_id": "GFSN99_25",
"instantiation": "true",
"filament_max_volumetric_speed": [
"3"
],
"compatible_printers": [
"Anker M5 All-Metal 0.25 nozzle",
"Anker M5C 0.25 nozzle"
]
}

View File

@@ -0,0 +1,8 @@
{
"type": "filament",
"name": "Anker Generic PA @base",
"inherits": "fdm_filament_pa",
"from": "system",
"filament_id": "GFN99",
"instantiation": "false"
}

View File

@@ -0,0 +1,20 @@
{
"type": "filament",
"name": "Anker Generic PA-CF @base",
"inherits": "fdm_filament_pa",
"from": "system",
"filament_id": "GFN98",
"instantiation": "false",
"filament_type": [
"PA-CF"
],
"required_nozzle_HRC": [
"40"
],
"filament_cost": [
"55"
],
"filament_max_volumetric_speed": [
"6"
]
}

View File

@@ -0,0 +1,14 @@
{
"type": "filament",
"name": "Anker Generic PA-CF",
"inherits": "Anker Generic PA-CF @base",
"from": "system",
"setting_id": "GFSN98",
"instantiation": "true",
"compatible_printers": [
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}

View File

@@ -0,0 +1,14 @@
{
"type": "filament",
"name": "Anker Generic PA",
"inherits": "Anker Generic PA @base",
"from": "system",
"setting_id": "GFSN99",
"instantiation": "true",
"compatible_printers": [
"Anker M5 All-Metal 0.4 nozzle",
"Anker M5 All-Metal 0.6 nozzle",
"Anker M5C 0.4 nozzle",
"Anker M5C 0.6 nozzle"
]
}

View File

@@ -0,0 +1,15 @@
{
"type": "filament",
"name": "Anker Generic PC 0.2 nozzle",
"inherits": "Anker Generic PC @base",
"from": "system",
"setting_id": "GFSC99_20",
"instantiation": "true",
"filament_max_volumetric_speed": [
"2"
],
"compatible_printers": [
"Anker M5 All-Metal 0.2 nozzle",
"Anker M5C 0.2 nozzle"
]
}

Some files were not shown because too many files have changed in this diff Show More