Skip to main content

Roadmap

note

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 may import the requirements before the plugin is loaded, which will cause import errors. Now with requirements.txt, we can install the requirements at the cli stage, hence solving the problem.

Currently carefree-drawboard 🎨 can only run on localhost and cannot be accessed by others

This plan is subject to remove (if I'm not capable of doing it). 🤣

Fortunately I did it. 😄

  • Remove the tornado proxy and use FastAPI 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 each Node.

    • 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 even StickerNode).

Which can make carefree-drawboard 🎨 more like an 'AI Operation System'.

  • Support using ratio (e.g., 0.8) for w & 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 an ISelectLocalField and it will update the options in real time based on your file system and send the user-selected value to you!
  • 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.
  • 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 Nodes on the drawboard 🎨.
  • Support dragging the none-follow plugins and save their positions down.

Demos

info

Live Demo is already online!

  • Add demo for SAM.
info
  • 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.
info
  • 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 the props field in definition.
  • 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).