Roadmap
Priorities are from top to bottom, but subject to change (based on your needs!), and suggestions/contributions are truly welcomed!!
Features
- Introduce
notification
for plugins (b295e03).
So when users are using plugins, notifications (introductions, hardware requirements, etc.) will be printed.
- Supported specifying
requirements.txt
(3cd9b39).
Previously we support specifying
requirements
in plugins, which is not good because we mayimport
the requirements before the plugin is loaded, which will cause import errors. Now withrequirements.txt
, we can install the requirements at thecli
stage, hence solving the problem.
Currently
carefree-drawboard
🎨 can only run onlocalhost
and cannot be accessed by others
- Support Google Colab (3c40ddc).
- Try to use
tornado
to unify the servers (0d27bbc).
This plan is subject to remove (if I'm not capable of doing it). 🤣
Fortunately I did it. 😄
- Remove the
tornado
proxy and useFastAPI
to serve static files directly 2ba60c9.
Damn I don't know why I introduced an extra proxy layer, maybe because I wanted to learn something new?
- Introduce a queueing system for
WebsocketEndpoint
(RequestQueue
). - Support removing all tasks when corresponding user disconnected.
This is somehow done automatically by the connection checking / exception handling system in
carefree-drawboard
🎨 (it will indeed have a small fraction of overhead, but it can be ignored).
- Deprecate
http
stuffs
They are for fast start ups. Once the socket stuffs are ready, we can remove them.
But don't worry: the interfaces will be exactly the same, and BC will be ensured!
- Support adding tooltip to each plugin (ae5d114).
So users can know what each plugin does better (a single icon might not be enough). 🤣
- Support
PluginGroup
(which is also a plugin), so we can manage plugins better (605eabd).
A common use case is putting all your customized plugins into one
PluginGroup
, so users can enable/disable them in one click/one line of code.
Implement a plugin that can interact with the
meta
of eachNode
.Mainly used for labelling, hence unleash much more possibilities (e.g., allow users to add some key-value pair and validate them in the server, and choose which reaction should be made. Somehow this can serve as the event system in games).
It is also something that lazy guys (like me) will probably like, because we can ignore all UIs now and dump every data to the meta data, read & process them in the server, and response whatever we want.
Once finished, I'll dig out some use cases and put them in Brainstorm.
Finish implementing the
ISocketPlugin
.
Which is the fundamental of many cool plugins (e.g., chat plugin, stable diffusion with callbacks, etc.).
- Support more kinds of
Node
(e.g.AudioNode
,VideoNode
or evenStickerNode
).
Which can make
carefree-drawboard
🎨 more like an 'AI Operation System'.
Support using ratio (e.g.,
0.8
) forw
&h
(cea22f5).Implement CLI which can pack/publish and download/install the images, projects & plugin script files.
- This can make sharing stuffs much easier.
Implement a plugin which can display the generation sequence of a
Node
(260f7c7, 20cf989, 9772184, etc.).- This can help you track your creation history.
Add an endpoint and an internal method which can locate local files. This is helpful when we need to load local data, models, etc.
- I think a special
ISelectField
should be able to achieve this goal. - This is indeed achieved by a special
ISelectField
-ISelectLocalField
(102a887). No internal methods required now, just define anISelectLocalField
and it will update theoptions
in real time based on your file system and send the user-selectedvalue
to you!
- I think a special
Made the positioning of the
follow
plugins more reasonable when the 'followed'Node
is very small.Support more
IFieldDefinition
, e.g.,IBooleanField
,ISelectField
(2cd8c95, 0c28ff3) &IListField
(392c027).
ISelectField
should be already usable, but I haven't tested it yet.
Add sophisticated loading status when tasks are submitted (6899641).
- Should be easy when
ISocketPlugin
is ready.
- Should be easy when
Optimize toast logics (f5c125a).
- Mainly looking for lazy toasting, which only toast when certain seconds have passed.
Make
carefree-drawboard
🎨 production ready.
carefree-drawboard
🎨 is not designed to be production ready out of the box, because Infinite Drawboard is so powerful that it contains many business logics which may vary from project to project. Good news is we already abstracted the core interfaces into a single folder -cfdraw/app/endpoints
, and each logic is implemented in a single file, so your modifications can be organized easily.See Production for more details.
- Add a switch which can show/hide all plugins (516b0f3).
- Support deleting projects (56edbe5).
- Support saving/loading UI settings.
- Support Union of
nodeConstraints
(ecaf5fd). - Support socket-based constraints (i.e., send socket message to the backend to see if we should show the plugin or not) (8dd450b).
This serves as a universal fallback.
- Make backend hosting more reasonable (see Production for context).
Unfortunately I'm not familiar with this so although I'll try to learn it by myself ASAP but maybe leave it to the community is a better choice. 🤣
But maybe using
uvicorn
is enough? 🤔
- Support saving current project periodically (see Auto Save for more details).
- Add versioning to projects.
This is not directly implemented, but the Auto Save might be a better alternative.
- Support direct copy-paste images to the drawboard 🎨.
- Add some low-level methods that can directly control the
Node
s on the drawboard 🎨. - Support dragging the none-follow plugins and save their positions down.
Demos
- Add demo for carefree-creator.
Live Demo is already online!
- Add demo for SAM.
- This may need a special type of component to generate images interactively.
- It is possible to implement the demo with IFieldsPlugin by submitting a segment task to the backend everytime by hand. Just not that fancy.
- Add demo for GPT-ish models.
- This may need a special type of component to stream the outputs of LLMs.
- Again, it is possible to implement the demo with IFieldsPlugin. Just not that fancy.
Documentation
- Introduce the design of the
Floating
&Render
component (the Plugins section and the Design Details section). - Introduce the design of the
Styles
system (will be added to the Design Philosophy page). - Introduce how to define the fine-grained styles in
FieldsPlugin
with the help of theprops
field indefinition
. - Introduce the design of the
Settings
system (e.g.,pluginInfo
is only used in each plugin) (will be added to the Design Philosophy page). - Introduce the code structure.
- Introduce how to support i18n in Features.
- Introduce how to write plugins in other programming languages (the Extensibility section).