Cushy Studio is a cross-platform application allowing you to Discover, Run, Create and Share Generative workflows called Apps. It offers a complete suit of tools allowing you explore all of what generative art has to offer, have fun, or automate your work. It builds uppon proven technologies like ComfyUI
, Stable Diffusion
, ffmpeg
, imagemagik
, and many more. It features a professional UI with dockable panes, tabs, and a power-user tools to be efficient Cushy Apps.
Art blooms in bytes, vast,
In Cushy realms, ideas soar,
For all, art awakes.
2023-11-15_01-17-02.mp4
To quote the header :
Cushy Studio is a cross-platform application allowing you to Discover, Run, Create and Share Generative workflows called Apps. It offers a complete suit of tools allowing you explore all of what generative art has to offer, have fun, or automate your work. It builds uppon proven technologies like
ComfyUI
,Stable Diffusion
,ffmpeg
,imagemagik
, and many more. It features a professional UI with dockable panes, tabs, and a power-user tools to be efficient Cushy Apps.
- Cushy Apps are self-contained applications empowering everyone to experience what AI has to offer in art and asset production.
- Anyone can make Cushy apps to solve a particular need: By showing only showing you the right control that make sense for yout task, they are very easy to use. The philosophy behind Cushy apps is to empower you to simply express what you want.
- CushyApps core are powered by battle-tested tools like
ComfyUI
,Konva
,ffmpeg
,imagemagik
, and more. - For more advances users, or companies, Cushy Apps make it simple to automate any creation process, from game asset production, image post-processing, image generation, and even video generation. Developpers, dev citizens, or just advanced users can use the built-in TypeScript SDK to create their own Cushy Apps. streamline production workflow. They come with a nice and simple interface to make it easy to play experiment and play with those workflows.
image 1 - screenshot showcasing the Framed Avatar Maker app
Cushy Apps are
- Easy to run, create, share.
- interactive and real-time by design.
- made to be used by everyone, from non-programmers to advanced users.
CushyStudio comes packaged with core built-in Cushy Apps to get you started right away. But you can also create your own apps, or find more apps in the Cushy Library.
The Cushy Library is a collection of Cushy Apps made by the community. It is a place to share and discover new Cushy Apps. You can download Cushy Apps from the Cushy Library and use them in CushyStudio. You can also publish your own Cushy Apps to the Cushy Library.
image 2 - Built-in App library
while CushyStudio can be used with a simple two pane layout [App Form | App Outputs]
, it also comes packed with feature so you feel right at home for more complex need. It features a powerful dock system to organize your workspace, and a tab system to organize your content. It also comes with a built-in image editor, tools to compre image, etc. For ComfyUI users, it includes the full ComfyUI interface, extended with custom panels to make it easy to find and use your custom nodes.
image 2 - showcase multiple kind of panels to illustrate that CushyStudio comes Battery-inncluded
It doesn't exist yet, but it will be a simple companion web app made to allow you to share with one click any Cushy Apps with anyone, so they can run them even on mobile devices using cloud GPU. If you want your app to go viral, just publish your app, post the link on your preffered social platform, and let anyone use cloud GPUs to run your app. No setup needed, no installation, no hassle. Just one click and you're in.
- 1. Introduction
- 2. Table of contents
- 3. Quickstart Guide
- 4. Features
- 5. Quickstart Guide For Action Creators
- 6. Frequently Asked Questions:
- 7. Theming
-
β Non-technical Card interfaces
- Per use-case UI
- Simple widgets
-
π Fast previews, real-time feedback
- Interactive at its core
- Real-time Apps with continuous generations
-
ποΈ Built-in commodities
Image
andMask
editors- Modular Layout to stay organized and focuses
-
π CushyStudio comes with amakes it easy to build actions
- Pre-configured ecosystem: NO SETUP NEEDED
- Built-in ComfyUI to Action converter
- Graphical Action builder
(soonβ’οΈ)
- A full TypeScript Action SDK + Compiler to go further
-
π§βπ» Powerful fully-type-safe typescript SDK
- A built-in standard library made to quickly build your dream workflow
- Use lambda to get completion only for the node that produces the value needed
- Every single value/enum is typed
-
π§ ComfyUI engine At its core
- All custom nodes are supported
- Custom interface to explore and play with nodes
- Deep integration with ComfyUI Graph
- A well-thought interface to explore and play with nodes
-
πͺ From 0 to 100 in no time
- Modularize, reuse, and grow your toolset
- Share your deck/cards with the world
-
π¦ one-click create your custom
Deck
- one-click open a fully pre-configured
vscode
workspace ready to go - No setup needed: injected globals so you can focus on your card logic
- No dependencies
- one-click open a fully pre-configured
During Beta
, CushyStudio install is done manually with git.
Ensure you have the following installed:
Then, to install CushyStudio, run these commands in a terminal:
git clone https://github.com/rvion/CushyStudio
cd CushyStudio
npm install
You can start CushyStudio in two ways:
- by running
npm start
in a terminal, at the root of you CushyStudio install - by running the
2_run.sh
(mac, linux) or2_run.bat
(window)
you can update CushyStudio in 3 ways:
-
- Using the update button in the top navbar
-
- By running the
1_update.sh
(mac, linux) or1_update.sh
(window)
- By running the
-
- By running in a terminal:
git pull npm install
npm install
to work properly.
If in-app (1) update fails, try to close Cushy and run other update methods (2, 3)
Library
- CushyStudio use a powerful dock system to organize your workspace.
- every panel can be moved around, and even detached from the main window.
the top bar
- Use the
Library
panel to select theCushyStudio/prompt
card. - pick a model and click
run
to see it in action
- Open the
Library
panel to select theCushyStudio/prompt
card.
- Automatically download images in your local outputs folder
- Automatically upload missing files
- powerfull image hashing system to avoid duplicate uploads
- β Quickly switch between various ComfyUI setups
- β Parallelize work across multiple instances
Edit the list of ComfyUI setups in CONFIG.json
or click the HOSTS
button in the top bar to configure your instances.
2023-10-18_21-28-13.mp4
ποΈ CushyStudio is directly compatible with ComfyUI workflow json format and images. Add them to the action folder to quickly use them inside CushyStudio.
you can convert them to actions in cone click t
2023-10-19_00-39-13.mp4
- β Embedded Civitai browser
- β Civitai custom ComfyUI Nodes support
- β Dedicated Civitai input widgets to augment your allow your cards to select CivitAI models directly
Layers, effects, masks, blending modes, ...and more. Always one click away
π In case you have a problem, check the logs and report what you see
- Define your own UI
- Build one or many prompts with custom logic in TypeScript
- Type-safe experience pushed to the MAXIMUM
- Every single value/enum is typed
- A built-in standard library made to quickly build your dream workflow
- Use lambda to get completion only for the node that produces the value needed
Creating Apps is easy. In this section, we will
- understand how CushyStudio works,
- see how to create a custom deck
- see how to edit your cards
- see how to publish your deck on the library
-
On startup, CushyStudio connect to your ComfyUI server(s)
-
CushyStudio then scan you
ComfyUI
install and generates whole TypeScript SDK supporting all your custom nodes, assets, models instaleld, etc. -
All your custom nodes, models, and images will be converted to
enums
,classes
,helpers
, etc, allowing you to create Apps with maximum type safety and completion. you can check the generated SDK atschema/global.d.ts
.- π this file is updated after each ComfyUI connection.
- π It means it will only be created after the first successful connection to your ComfyUI instance
An Action
is a self containing
- a widget definition (
"ui"
function) - an execution logic (
"run"
function)- the
"run"
function will receive the widget value when you click therun
button
- the
Here is a very simple card that print the value you enter
card({
ui: (form) => ({ name: form.str({}) }),
run: (runtime) => runtime.print('Hello World')
})
A Deck
is a folder containing
- a list of Apps
- a list of
assets
- a list of
prefabs
- some
documentation
about how to use those cards - some
metadata
for proper library indexing.
Decks are made to be shared.
- You can download
Decks
from theLibrary
panel - You can publish
Decks
from theLibrary
panel
-
click the
[+ Create Deck]
button at the top of theLibrary
-
enter your
github username
anddeck name
- π your
github username
will be your dedicated namespace in the library - π all your decks will live under the
library/<username>/
folder
- π your
-
click
[OK]
- it will create those files
library/<username>/<deckname>/readme.md
- a readme file to explain what your deck is about
library/<username>/<deckname>/cushy-deck.json
- manifest that list all your cards for better library integration
library/<username>/<deckname>/_prefab.ts
- a file where you can place your prefabs.
- it contains some example prefabs for you to build uppon
- file starts with an
_
so it's not listed in CushyStudio
library/<username>/<deckname>/sample-card-1.ts
- first sample action
library/<username>/<deckname>/sample-action-2.ts
- second sample action
- it will create those files
-
Open the
sample-action-1.ts
card -
click the
[edit]
button to open the card invscode
- π everything is preconfigure to run correctly in vscode and make you productive right away
- π fo this, you need to open the whole CushyStudio folder within vscode
- π (NOT just the action folder, NOR the action file itself)
card('demo1-basic', {
author: 'rvion',
ui: (form) => ({ positive: form.str({ label: 'Positive', default: 'flower' }), }),
run: async (action, form) => {
// build a ComfyUI graph
const graph = action.nodes
const ckpt = graph.CheckpointLoaderSimple({ ckpt_name: 'albedobaseXL_v02.safetensors' })
const seed = action.randomSeed()
const sampler = graph.KSampler({
seed: seed,
steps: 20,
cfg: 14,
sampler_name: 'euler',
scheduler: 'normal',
denoise: 0.8,
model: ckpt,
positive: graph.CLIPTextEncode({ text: form.positive, clip: ckpt }),
negative: graph.CLIPTextEncode({ text: '', clip: ckpt }),
latent_image: graph.EmptyLatentImage({ width: 512, height: 512, batch_size: 1 }),
})
graph.SaveImage({
images: graph.VAEDecode({ samples: sampler, vae: ckpt }),
filename_prefix: 'ComfyUI',
})
// run the graph you built
await action.PROMPT()
},
})
An Card
is a file containing
- An UI definition (widgets, form, styles, default values, tabs, etc...)
- A piece of code that runs your action
- ...And more
The simplest way to modularize your Apps is to build prefabs
.
Prefabs
allow you to re-use parts of your cards in other cards.Prefabs
allow you to re-use parts of your cards multiple times in your cardPrefabs
are functions that can addwidgets
(ui part) orsubgraphs
(execution part).Prefabs
allow you to build complex cards very efficiently.
Best practices:
- Usually, your
Deck
will contain one or manyprefab
files, - you can The main
prefab
used by the built-indeck
here:library/CushyStudio/default/_prefab.ts
:
- π a
ui prefab
is afunction
that takes aformBuilder
and returns aWidget
. - π a
run prefab
is a function that takes aruntime
and modify it'sgraph
or perform other actions. - π a
util prefab
is an helper function that do whatever.
example:
// FILE: `_ui.ts`
import type { FormBuilder } from 'src/controls/FormBuilder'
// π this is a ui prefab you can use in any card you want.
export const ui_startImage = (form: FormBuilder) =>
form.group({
items: () => ({
startImage: form.imageOpt({ group: 'latent' }),
width: form.int({ default: 512, group: 'latent', step: 128, min: 128, max: 4096 }),
height: form.int({ default: 512, group: 'latent', step: 128, min: 128, max: 4096 }),
batchSize: form.int({ default: 1, group: 'latent', min: 1, max: 20 }),
}),
})
To use a prefab
in your card, you can simply import it and use it.
ui prefabs
are made to be used in theui
function of your card.run prefabs
are made to be used in therun
function of your card.run prefabs
are made to be used in therun
function of your card.
// FILE: `card1.ts`
import { ui_startImage } from './_ui'
card({
name: 'card1',
ui: (formBuilder) => {
return {
a: ui_startImage(formBuilder), // π HERE
b: ui_startImage(formBuilder), // π HERE
c: formBuilder.int({ default: 1 }),
}
},
run: async (flow, p) => {
flow.print(`startImage: ${p.a.startImage}`)
flow.print(`startImage: ${p.b.startImage}`)
},
})
The resulting card looks like this:
CushyStudio aims to be accessible to non-programmers, while still being powerful enough for advanced users. You don't need to know typescript to get started, you can just learn what you need along the way.
This section is not a typescript tutorial, but rather a list of points of attention you may need to pay attention when building cards if you're not a typescript develloper.
Be careful to understand those various notations for functions
const fn = () => ({ a: 1 })
// π π
This is equivalent to:
const fn = () => {
return {a: 1}
}
or to
function fn() {
return {a: 1}
}
Publishing your deck/cards is easy!
-
When creating a deck, CushyStudio automatically
- initialize the git repository for you.
- configure remote to point to the GitHub repository with the same name as your deck 1.
-
Create a GitHub repository. (https://github.com/new)
-
Commit your deck files
- you can one-click the
publish
button in your deck entry in the library - or youyou can follow instructions given by Git Hub on the new repository page
- you can one-click the
-
Open an issue asking to add your
Deck
to theLibrary
.
SHOW EXAMPLE
cd library/rvion
git init
Initialized empty Git repository in /Users/loco/dev/CushyStudio/library/rvion/.git/
git add .
git commit -m "first commit"
[master (root-commit) 602fab1] first commit
4 files changed, 146 insertions(+)
create mode 100644 mask-face.ts
create mode 100644 rembg.ts
create mode 100644 replace-part.ts
create mode 100644 test.ts
git remote add origin [email protected]:rvion/cushy-example-deck.git
Then open an issue asking there
In case you want to know more about the CLA, here are some answers to questions you might have: If your questions are not covered, you can take a look at the full FAQ: https://github.com/rvion/CushyStudio/blob/master/docs/FAQ.md
A: Absolutely! I'm committed to keeping CushyStudio 100% open source and free to use as a tool. Create assets, art, games β you name it. It's your creation, and I'm just here to help you make it.
A: For now, CushyStudio is licensed under AGPL as I aim to guide the project towards sustainability. I plan to transition to GPLV3 in the future, once the project achieves a stable foundation. This choice is designed to safeguard the project and its dedicated community. Rest assured, utilizing CushyStudio for asset creation remains unrestricted. My primary intention is to prevent the unauthorized resale or commercialization of CushyStudio as a service.
A: No, and that's a promise. CushyStudio will always be free and open source. While I do have plans to offer complementary services (like cloud GPU services), the core of CushyStudio will remain free for all. Again, I simply wish to prevent unauthorized resale or commercialization of CushyStudio as a service.
Thank you for your understanding and patience in going through this agreement. Together, let's make CushyStudio better for everyone! πͺπ