psychedelicious
982c266073
tidy: remove extra characters in prompt templates
2024-08-14 12:31:57 +10:00
psychedelicious
5c37391883
fix(ui): do not show [prompt]
in preset preview
2024-08-14 12:29:05 +10:00
psychedelicious
ddeafc6833
fix(ui): minimize layout shift when overlaying preset prompt preview
2024-08-14 12:24:57 +10:00
psychedelicious
41b2d5d013
fix(ui): prompt preview not working preset starts with [prompt]
2024-08-14 12:21:38 +10:00
psychedelicious
29d6f48901
fix(ui): prompt shows thru prompt label text
2024-08-14 12:01:49 +10:00
psychedelicious
d5c9f4e47f
chore(ui): revert framer-motion upgrade
...
`framer-motion` 11 breaks a lot of stuff in profoundly unintuitive ways, holy crap. UI lib rolled back its dep, pulling in latest version of that
2024-08-14 06:12:00 +10:00
psychedelicious
24d73387d8
build(ui): fix chakra deps
...
We had multiple versions of @emotion/react, stemming from an extraneous dependency on @chakra-ui/react. Removed the extraneosu dep
2024-08-14 06:12:00 +10:00
Mary Hipp
e0d3927265
feat: add flag for allowPrivateStylePresets that shows a type field when creating a style preset
2024-08-13 14:08:54 -04:00
Mary Hipp
e5f7c2a9b7
add type safety / validation to form data payloads and allow type to be passed through api
2024-08-13 13:00:31 -04:00
Mary Hipp
b0760710d5
add the rest of default style presets, update image service to return default images correctly by name, add tooltip popover to images in UI
2024-08-13 11:33:15 -04:00
Mary Hipp
764accc921
update config docstring
2024-08-12 15:17:40 -04:00
Mary Hipp
6a01fce9c1
fix payloads for stringified data
2024-08-12 15:16:22 -04:00
Mary Hipp
9c732ac3b1
Merge remote-tracking branch 'origin/main' into maryhipp/style-presets
2024-08-12 14:53:45 -04:00
Mary Hipp
b70891c661
update descriptoin of placeholder in modal
2024-08-12 13:37:04 -04:00
Mary Hipp
4dbf851741
ui: add labels to prompt boxes
2024-08-12 13:33:39 -04:00
Mary Hipp
6c927a9fd4
move mdoal state into nanostore
2024-08-12 12:46:02 -04:00
Mary Hipp
096f001634
ui: add ability to copy template
2024-08-12 12:32:31 -04:00
Mary Hipp
4837e578b2
api: update dir path for style preset images, update payload for create/update formdata
2024-08-12 12:00:14 -04:00
Mary Hipp
1e547ef912
UI more pr feedback
2024-08-12 11:59:25 -04:00
psychedelicious
f6b8970bd1
fix(app): create reference to events task to prevent accidental GC
...
This wasn't a problem, but it's advised in the official docs so I've done it.
2024-08-12 07:49:58 +10:00
psychedelicious
29325a7214
fix(app): use asyncio queue and existing event loop for events
...
Around the time we (I) implemented pydantic events, I noticed a short pause between progress images every 4 or 5 steps when generating with SDXL. It didn't happen with SD1.5, but I did notice that with SD1.5, we'd get 4 or 5 progress events simultaneously. I'd expect one event every ~25ms, matching my it/s with SD1.5. Mysterious!
Digging in, I found an issue is related to our use of a synchronous queue for events. When the event queue is empty, we must call `asyncio.sleep` before checking again. We were sleeping for 100ms.
Said another way, every time we clear the event queue, we have to wait 100ms before another event can be dispatched, even if it is put on the queue immediately after we start waiting. In practice, this means our events get buffered into batches, dispatched once every 100ms.
This explains why I was getting batches of 4 or 5 SD1.5 progress events at once, but not the intermittent SDXL delay.
But this 100ms wait has another effect when the events are put on the queue in intervals that don't perfectly line up with the 100ms wait. This is most noticeable when the time between events is >100ms, and can add up to 100ms delay before the event is dispatched.
For example, say the queue is empty and we start a 100ms wait. Then, immediately after - like 0.01ms later - we push an event on to the queue. We still need to wait another 99.9ms before that event will be dispatched. That's the SDXL delay.
The easy fix is to reduce the sleep to something like 0.01 seconds, but this feels kinda dirty. Can't we just wait on the queue and dispatch every event immediately? Not with the normal synchronous queue - but we can with `asyncio.Queue`.
I switched the events queue to use `asyncio.Queue` (as seen in this commit), which lets us asynchronous wait on the queue in a loop.
Unfortunately, I ran into another issue - events now felt like their timing was inconsistent, but in a different way than with the 100ms sleep. The time between pushing events on the queue and dispatching them was not consistently ~0ms as I'd expect - it was highly variable from ~0ms up to ~100ms.
This is resolved by passing the asyncio loop directly into the events service and using its methods to create the task and interact with the queue. I don't fully understand why this resolved the issue, because either way we are interacting with the same event loop (as shown by `asyncio.get_running_loop()`). I suppose there's some scheduling magic happening.
2024-08-12 07:49:58 +10:00
psychedelicious
8ecf72838d
fix(api): image downloads with correct filename
...
Closes #6730
2024-08-10 09:53:56 -04:00
psychedelicious
c3ab8a6aa8
chore(ui): bump rest of deps
2024-08-10 07:45:23 -04:00
psychedelicious
1931aa3e70
chore(ui): typegen
2024-08-10 07:45:23 -04:00
psychedelicious
d3d8055055
feat(ui): update typegen script
2024-08-10 07:45:23 -04:00
psychedelicious
476b0a0403
chore(ui): bump openapi-typescript
2024-08-10 07:45:23 -04:00
psychedelicious
f66584713c
fix(api): sort OpenAPI schema properties for InvocationOutputMap
...
This makes the schema output deterministic!
2024-08-10 07:45:23 -04:00
psychedelicious
33624fc2fa
fix(api): duplicate operation id for get_image_full
...
There's a FastAPI bug that results in the OpenAPI spec outputting the same operation id for each operation when specifying multiple HTTP methods.
- Discussion: https://github.com/tiangolo/fastapi/discussions/8449
- Pending PR to fix: https://github.com/tiangolo/fastapi/pull/10694
In our case, we have a `get_image_full` endpoint that handles GET and HEAD.
This results in an invalid OpenAPI schema. A workaround is to use two route decorators for the operation handler. This works as expected - HEAD requests get the header, and GET requests get the resource. And the OpenAPI schema is valid.
2024-08-10 07:45:23 -04:00
Mary Hipp
97553a7de2
API/DB updates per PR feedback
2024-08-09 16:27:37 -04:00
Mary Hipp
12ba15bfa9
UI updates per PR feedback
2024-08-09 16:00:13 -04:00
Mary Hipp
09d1e190e7
show warning for maxUpscaleDimension if model tab is disabled
2024-08-09 14:07:55 -04:00
Mary Hipp
8eb5d08499
missed translation
2024-08-08 16:01:16 -04:00
Mary Hipp
9be6acde7d
require name to submit style preset
2024-08-08 15:53:21 -04:00
Mary Hipp
5f83bb0069
update config docstring
2024-08-08 15:20:43 -04:00
Mary Hipp
0cd7cdb52e
remove send2trash
2024-08-08 15:13:36 -04:00
Mary Hipp
1d8b7e2bcf
ruff
2024-08-08 15:08:45 -04:00
Mary Hipp
6461f4758d
lint fix
2024-08-08 15:07:58 -04:00
Mary Hipp
3189ab6863
get dynamic prompts working
2024-08-08 15:07:23 -04:00
Mary Hipp
3f9a674d4b
seed default presets and handle them in UI
2024-08-08 15:02:41 -04:00
Mary Hipp
587f59b25b
focus on prompt textarea when exiting view mode by clicking
2024-08-08 14:38:50 -04:00
Mary Hipp
4952eada87
ruff format
2024-08-08 14:22:40 -04:00
Mary Hipp
581029ebaa
ruff
2024-08-08 14:21:37 -04:00
Mary Hipp
42d68780de
lint
2024-08-08 14:19:33 -04:00
Mary Hipp
28032a2f80
more cleanup
2024-08-08 14:18:05 -04:00
Mary Hipp
e381e021e9
knip lint
2024-08-08 14:00:17 -04:00
Mary Hipp
641af64f93
regnerate schema
2024-08-08 13:58:25 -04:00
Mary Hipp
a7b83c8b5b
Merge remote-tracking branch 'origin/main' into maryhipp/style-presets
2024-08-08 13:56:59 -04:00
Mary Hipp
4cc41e0188
translations and lint fix
2024-08-08 13:56:37 -04:00
Mary Hipp
442fc02429
resize images to 100x100 for style preset images
2024-08-08 12:56:55 -04:00
Mary Hipp
9a4d075074
fix path for style_preset_images, fix png type when converting blobs to files, built view mode components
2024-08-08 12:31:20 -04:00
Sergey Borisov
17ff8196cb
Remove tmp code
2024-08-07 22:06:05 -04:00
Sergey Borisov
68f993998a
Add support for norm layer
2024-08-07 22:06:05 -04:00
Sergey Borisov
7da6120b39
Fix LoKR refactor bug
2024-08-07 22:06:05 -04:00
Kent Keirsey
408a1d6dbb
Merge branch 'main' into depth_anything_v2
2024-08-07 10:45:56 -04:00
Mary Hipp
0b0abfbe8f
clean up image implementation
2024-08-07 10:36:38 -04:00
Mary Hipp
cc96dcf0ed
style preset images
2024-08-07 09:58:27 -04:00
Mary Hipp
2604fd9fde
a whole bunch of stuff
2024-08-06 15:31:13 -04:00
Hosted Weblate
140670d00e
translationBot(ui): update translation files
...
Updated by "Cleanup translation files" hook in Weblate.
translationBot(ui): update translation files
Updated by "Cleanup translation files" hook in Weblate.
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/
Translation: InvokeAI/Web UI
2024-08-06 17:54:47 +10:00
Phrixus2023
70233fae5d
translationBot(ui): update translation (Chinese (Simplified))
...
Currently translated at 98.1% (1296 of 1321 strings)
Co-authored-by: Phrixus2023 <920414016@qq.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/zh_Hans/
Translation: InvokeAI/Web UI
2024-08-06 17:54:47 +10:00
Alexander Eichhorn
6f457a6c4c
translationBot(ui): update translation (German)
...
Currently translated at 65.1% (860 of 1321 strings)
Co-authored-by: Alexander Eichhorn <pfannkuchensack@einfach-doof.de>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/de/
Translation: InvokeAI/Web UI
2024-08-06 17:54:47 +10:00
B N
5c319f5356
translationBot(ui): update translation (German)
...
Currently translated at 64.8% (857 of 1321 strings)
Co-authored-by: B N <berndnieschalk@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/de/
Translation: InvokeAI/Web UI
2024-08-06 17:54:47 +10:00
Riccardo Giovanetti
991a04f090
translationBot(ui): update translation (Italian)
...
Currently translated at 98.6% (1303 of 1321 strings)
translationBot(ui): update translation (Italian)
Currently translated at 98.6% (1302 of 1320 strings)
translationBot(ui): update translation (Italian)
Currently translated at 98.6% (1294 of 1312 strings)
Co-authored-by: Riccardo Giovanetti <riccardo.giovanetti@gmail.com>
Translate-URL: https://hosted.weblate.org/projects/invokeai/web-ui/it/
Translation: InvokeAI/Web UI
2024-08-06 17:54:47 +10:00
psychedelicious
c39fa75113
docs(ui): add comment in useIsTooLargeToUpscale
2024-08-06 11:49:35 +10:00
psychedelicious
f7863e17ce
docs(ui): add docstring for maxUpscaleDimension
2024-08-06 11:49:35 +10:00
psychedelicious
7c526390ed
fix(ui): compare upscaledPixels vs square of max dimension
2024-08-06 11:49:35 +10:00
Mary Hipp
2cff20f87a
update translations, change config value to be dimension instead of total pixels
2024-08-06 11:49:35 +10:00
Mary Hipp
90ec757802
lint
2024-08-06 11:49:35 +10:00
Mary Hipp
4b85dfcefe
(ui): restore optioanl limit on upcsale output resolution
2024-08-06 11:49:35 +10:00
Mary Hipp
21deefdc41
(ui): add image resolution badge to initial upscale image
2024-08-06 11:49:35 +10:00
Mary Hipp
857d74bbfe
wip apply and calculate prompt with interpolation
2024-08-05 19:11:48 -04:00
Mary Hipp
fd7a635777
(ui) the most basic crud ui: view list of presets, create a new preset, edit/delete existing presets
2024-08-05 15:48:23 -04:00
Mary Hipp
af9110e964
fix prompt concat logic
2024-08-05 13:42:28 -04:00
Mary Hipp
a61209206b
remove custom SDXL prompts component
2024-08-05 13:40:46 -04:00
Mary Hipp
e05cc62e5f
add style presets API layer to UI
2024-08-05 13:37:07 -04:00
psychedelicious
98db8f395b
feat(app): clean up DiskImageStorage types
2024-08-04 09:43:20 +10:00
psychedelicious
f465a956a3
feat(ui): remove "images can be restored" messages
2024-08-04 09:43:20 +10:00
psychedelicious
6c4cf58a31
feat(app): delete model_images instead of using send2trash
2024-08-04 09:43:20 +10:00
psychedelicious
08993c0d29
feat(app): delete images instead of using send2trash
...
Closes #6709
2024-08-04 09:43:20 +10:00
blessedcoolant
4f8a4b0f22
Merge branch 'main' into depth_anything_v2
2024-08-03 00:38:57 +05:30
blessedcoolant
a743f3c9b5
fix: implement model to func for depth anything
2024-08-03 00:37:17 +05:30
Mary Hipp
217fe40d99
feat(api): add style_presets router, make sure all CRUD is working, add is_default
2024-08-02 12:29:54 -04:00
Mary Hipp
b76bf50b93
feat(db,api): create new table for style presets, build out record storage service for style presets
2024-08-01 22:20:11 -04:00
Mary Hipp
571ba87e13
fix(ui): include upscale metadata for SDXL multidiffusion
2024-08-01 21:30:42 -04:00
Ryan Dick
981475a624
Merge branch 'main' into ryan/grounded-sam
2024-08-01 20:30:35 +02:00
Ryan Dick
27ac61a4fb
Expose all model options in the GroundingDinoInvocation and the SegmentAnythingInvocation.
2024-08-01 14:23:32 -04:00
Ryan Dick
675ffc2757
Remove BoundingBoxInvocation field name overrides.
2024-08-01 14:05:44 -04:00
Ryan Dick
44b21f10f1
Add a pydantic model_validator to BoundingBoxField to check the validity of the coords.
2024-08-01 14:00:57 -04:00
Ryan Dick
c6d49e8b1f
Shorten SegmentAnythingInvocation and GroundingDinoInvocatino docstrings, since they are used as the invocation descriptions in the UI.
2024-08-01 10:17:42 -04:00
Ryan Dick
e6a512aa86
(minor) Tweak order of mask operations.
2024-08-01 10:12:24 -04:00
Ryan Dick
c3a6a6fb22
Rename SegmentAnythingModelInvocation -> SegmentAnythingInvocation.
2024-08-01 10:00:36 -04:00
Ryan Dick
b9dc3460ba
Rename SegmentAnythingModel -> SegmentAnythingPipeline.
2024-08-01 09:57:47 -04:00
Ryan Dick
63581ec980
(minor) Add None check to fix static type checking error.
2024-08-01 09:51:53 -04:00
blessedcoolant
f5cfdcf32d
feat: Add BoundingBox Primitive Node
2024-08-01 04:09:08 +05:30
chainchompa
e78fb428f0
simplify destination prop handling
2024-07-31 18:06:22 -04:00
chainchompa
31e270e32c
add base prop for destination to direct users to different tabs
2024-07-31 17:20:51 -04:00
Ryan Dick
b5832768dc
Return a MaskOutput from SegmentAnythingModelInvocation. And add a MaskTensorToImageInvocation.
2024-07-31 17:16:14 -04:00
Ryan Dick
5a9173f766
Merge branch 'main' into stalker-modular_lora
2024-07-31 15:13:22 -04:00
Ryan Dick
0bb7ed44f6
Add some docs to OriginalWeightsStorage and fix type hints.
2024-07-31 15:08:24 -04:00
blessedcoolant
332bc9da5b
fix: Update depth anything node default to v2
2024-07-31 23:52:29 +05:30
blessedcoolant
08def3da95
fix: Update canvas depth anything processor default to v2
2024-07-31 23:50:13 +05:30
blessedcoolant
daf899f9c4
fix: Move the manual image resizing out of the depth anything pipeline
2024-07-31 23:38:12 +05:30
blessedcoolant
13fb2d1f49
fix: Add Depth Anything V2 as a new option
...
It is also now the default in the UI replacing Depth Anything V1 small
2024-07-31 23:29:43 +05:30
blessedcoolant
95dde802ea
fix: assert the return depth map to be a PIL image
2024-07-31 23:22:01 +05:30
Ryan Dick
fca119773b
Split invokeai/backend/image_util/segment_anything/ dir into grounding_dino/ and segment_anything/
2024-07-31 12:28:47 -04:00
Ryan Dick
0193267a53
Split GroundedSamInvocation into GroundingDinoInvocation and SegmentAnythingModelInvocation.
2024-07-31 12:20:23 -04:00
blessedcoolant
b4cf78a95d
fix: make DA Pipeline a subclass of RawModel
2024-07-31 21:14:49 +05:30
Ryan Dick
73386826d6
Make GroundingDinoPipeline and SegmentAnythingModel subclasses of RawModel for type checking purposes.
2024-07-31 10:25:34 -04:00
Ryan Dick
9f448fecb7
Move invokeai/backend/grounded_sam -> invokeai/backend/image_util/grounded_sam
2024-07-31 10:00:30 -04:00
Ryan Dick
bcd1483a14
Re-order GroundedSAMInvocation._to_numpy_masks(...) to do slightly more work on the GPU.
2024-07-31 09:51:14 -04:00
Ryan Dick
e206890e25
Use staticmethods rather than inner functions for the Grounding DINO and SAM model loaders.
2024-07-31 09:28:52 -04:00
Ryan Dick
0a7048f650
(minor) Simplify GroundedSAMInvocation._merge_masks(...).
2024-07-31 08:58:51 -04:00
Ryan Dick
e8ecf5e155
(minor) Move apply_polygon_refinement condition up a layer.
2024-07-31 08:50:56 -04:00
Ryan Dick
33e8604b57
Make Grounding DINO DetectionResult a Pydantic model.
2024-07-31 08:47:00 -04:00
Ryan Dick
cec7399366
(minor) Use a new variable name to satisfy type checks.
2024-07-31 08:27:01 -04:00
Ryan Dick
bdae81e429
(minor) Simplify GroundedSAMInvocation._filter_detections()
2024-07-31 08:25:19 -04:00
Ryan Dick
67c32f3d6c
Fix typo: zip(..., strict=True)
2024-07-31 08:15:28 -04:00
blessedcoolant
fa3c0c81b3
Merge branch 'main' into stalker7779/fix_gradient_mask
2024-07-31 06:30:44 +05:30
blessedcoolant
328e58be4c
Merge branch 'main' into stalker7779/new_karras_schedulers
2024-07-31 05:56:13 +05:30
blessedcoolant
18f89ed5ed
fix: Make DepthAnything work with Invoke's Model Management
2024-07-31 03:57:54 +05:30
Ryan Dick
5701c79fab
Prevent Grounding DINO and Segment Anything from being moved to MPS - they don't work on MPS devices.
2024-07-30 23:04:15 +02:00
Ryan Dick
2da9f913f3
Add detection_result.py - was forgotten in a prior commit
2024-07-30 16:04:29 -04:00
Ryan Dick
6b10b59abe
Make GroundedSAMInvocation work with any input image mode (RGB, RGBA, grayscale).
2024-07-30 15:55:57 -04:00
Ryan Dick
918f77bce0
Move some logic from GroundedSAMInvocation to the backend classes.
2024-07-30 15:34:33 -04:00
blessedcoolant
f170697ebe
Merge branch 'main' into depth_anything_v2
2024-07-31 00:53:32 +05:30
blessedcoolant
556c6a1d84
fix: Update DepthAnything to use the transformers implementation
2024-07-31 00:51:55 +05:30
Ryan Dick
aca2a2fa13
Add mask_filter and detection_threshold options to the GroundedSAMInvocation.
2024-07-30 14:22:40 -04:00
Ryan Dick
ff6398f7d8
Add a GroundedSamInvocation for image segmentation from a text prompt (Grounding DINO + Segment Anything Model).
2024-07-30 11:12:26 -04:00
Sergey Borisov
cf996472b9
Suggested changes
...
Co-Authored-By: psychedelicious <4822129+psychedelicious@users.noreply.github.com>
2024-07-30 04:50:56 +03:00
Sergey Borisov
156d14c349
Run api regen
2024-07-30 04:05:21 +03:00
Sergey Borisov
86f705bf48
Optimize weights handling
2024-07-30 03:39:01 +03:00
Sergey Borisov
1fd9631f2d
Comments fix
...
Co-Authored-By: Ryan Dick <14897797+RyanJDick@users.noreply.github.com>
2024-07-30 00:39:50 +03:00
Sergey Borisov
2227a2357f
Suggested changes + simplify weights logic in patching
...
Co-Authored-By: Ryan Dick <14897797+RyanJDick@users.noreply.github.com>
2024-07-30 00:34:37 +03:00
Sergey Borisov
58e7ab157d
Ruff format
2024-07-29 22:59:17 +03:00
Sergey Borisov
8d16fa6a49
Remove dpmpp_3s schedulers as it bugged now
2024-07-29 22:55:45 +03:00
Sergey Borisov
55e810efa3
Add dpmpp_3 schedulers
2024-07-29 22:52:15 +03:00
chainchompa
6525f18610
Merge branch 'main' into chainchompa/board-delete-info
2024-07-29 12:52:36 -04:00
Ryan Dick
693a3eaff5
Merge branch 'main' into stalker-modular_inpaint-2
2024-07-29 10:14:45 -04:00
chainchompa
ffca792d5b
edited copy for deleted boards message
2024-07-29 09:46:08 -04:00
Sergey Borisov
86a92bb6b5
Add more karras schedulers
2024-07-29 15:14:34 +03:00
psychedelicious
171a4e6d80
fix(ui): race condition when deleting a board and resetting selected/auto-add
...
We were checking the selected and auto-add board ids against the query cache to see if they still exist. If not, we reset.
This only works if the query cache is updated by the time we do the check - race condition!
We already have the board id from the query args, so there's no need to check the query cache - just compare the deleted board ID directly.
Previously this file's several listeners were all in a single one and I had adapted/split its logic up a bit wonkily, introducing these problems.
2024-07-29 11:36:03 +10:00
psychedelicious
e3a75a8adf
fix(ui): fix logic to reset selected/auto-add boards when toggling show archived boards
...
The logic was incorrect in two ways:
1. We only ran the logic if we _enable_ showing archived boards. It should be run we we _disable_ showing archived boards.
2. If we couldn't find the selected board in the query cache, we didn't do the reset. This is wrong - if the board isn't in the query cache, we _should_ do the reset. This inverted logic makes more sense before the fix for issue 1.
2024-07-29 11:36:03 +10:00
Sergey Borisov
8500bac3ca
Use logger for warning
2024-07-28 22:51:52 +03:00
Ryan Dick
310719eb4c
Merge branch 'main' into stalker-modular_t2i_adapter
2024-07-28 15:30:00 -04:00
Ryan Dick
c57a7afb87
Merge branch 'main' into stalker7779/modular_seamless
2024-07-28 13:49:43 -04:00
Sergey Borisov
84d028898c
Revert wrong comment copy
2024-07-27 13:20:58 +03:00
Sergey Borisov
ed0174fbc6
Suggested changes
...
Co-Authored-By: Ryan Dick <14897797+RyanJDick@users.noreply.github.com>
2024-07-27 13:18:28 +03:00
Sergey Borisov
9e582563eb
Suggested changes
...
Co-Authored-By: Ryan Dick <14897797+RyanJDick@users.noreply.github.com>
2024-07-27 04:25:15 +03:00
Sergey Borisov
faa88f72bf
Make lora as separate extensions
2024-07-27 02:39:53 +03:00
Sergey Borisov
5b84e117b2
Suggested changes
...
Co-Authored-By: Ryan Dick <14897797+RyanJDick@users.noreply.github.com>
2024-07-26 20:51:12 +03:00
chainchompa
eb257d2d28
update delete board modal to be more descriptive
2024-07-26 13:34:25 -04:00