Install the CLI globally:
npm install
npm linkInitialize the CLI configuration:
ecli initThe CLI supports multiple environments (e.g., development, production) with different API endpoints.
# List all environments (* indicates current)
ecli env list
# Add a new environment
ecli env add <name> <apiUrl>
# Switch to a different environment
ecli env switch <name>
# Remove an environment (cannot remove current)
ecli env remove <name>Components are the building blocks of your application. Each component has its configuration files in the Components/ directory.
# Create a new component
ecli component new <component_name>
# Update component details
ecli component update <component_name>
# Remove a component
ecli component remove <component_name>
# Get component details
ecli component get <component_name>
-f, --form # Get form configuration
-i, --input # Get inputs configuration
-w, --workflow # Get workflow configuration
-c, --credits # Get credits script
# Apply component changes to server
ecli component apply <component_name>
-v, --verbose # Print submitted data
# Apply all changed components
ecli component apply-changed
-f, --force # Force apply all components
-d, --dry-run # Show what would be applied
# Toggle component visibility
ecli component display <component_name>Form configurations are stored in Components/_form_confs/ and can be managed with these commands:
# Get form configuration(s)
ecli form-config get [fileName]
# Create/Update form configuration
ecli form-config apply <fileName>
# Delete form configuration
ecli form-config delete <fileName>
-s, --server-only # Only delete from server, keep local fileComponents can be of three types:
basic: Simple components with minimal configurationcomfy_workflow: Components that integrate with ComfyUI workflowsfetch_api: Components that interact with external APIs
Components/
└── component_name/
├── form.json # UI configuration
├── inputs.json # Input mapping
├── workflow.json # Workflow definition (comfy_workflow only)
├── test.json # Test configuration
├── credits.js # Credits calculation
├── api.json # API configuration (fetch_api only)
└── body.json # Request body template (fetch_api only)
The form.json file defines the component's UI structure:
{
"main": [
{
"id": "fieldId",
"name": "Field Name",
"type": "field_type",
"display": true,
"default": "default_value",
"conf_file": "optional_config.json",
"constraints": {
"min": 0,
"max": 100,
"step": 1
}
}
],
"advanced": []
}select: Dropdown menu with options from conf_fileprompt_editor: Text area for promptsaspect_ratio: Aspect ratio selectorslider: Numeric input with rangeimage_loader: Image upload field
Common configuration files in _form_confs/:
aspect_ratio.json: Predefined aspect ratiossamplers.json: Available sampling methodsschedulers.json: Scheduler configurationssd_models.json: Stable Diffusion models
This documents outlines how to write the forms.js JSON file for describing Component's UI.
The configuration JSON follows this primary structure:
name: The name of the configuration (e.g.,"Text to Image").fields: An object containing grouped fields, commonly organized as"main"and"advanced". Each group contains an array of field objects.
Each field object has several potential properties:
id: A unique identifier for the field.name: Display name of the field.type: Specifies the component type, such asselect,prompt_editor,aspect_ratio,slider, orimage_loader.conf_file: (Optional) Specifies a configuration file (usually JSON) that contains additional options or settings for the component.display: Boolean that indicates whether the field should be visible to the user.default: (Optional) The field's default value, where applicable.constraints: (Optional) An object that defines minimum, maximum, and step values for components likeslider.
The select component provides a dropdown menu for users to choose from a list of predefined options.
{
"id": "model",
"name": "Model",
"type": "select",
"conf_file": "sd_models.json",
"display": true
}conf_file: Refers to an external JSON file (e.g., sd_models.json) that defines the available options.Usage: Primarily for selecting from a list of static options, such as models, samplers, or schedulers.
The prompt_editor component provides a textarea for users to enter text-based prompts.
{
"id": "prompt",
"name": "Prompt",
"type": "prompt_editor",
"display": true
}Usage: Primarily for text prompts that will guide the model's generation, as in fields for "Prompt" and "Negative Prompt".
The aspect_ratio component provides predefined aspect ratio options, usually loaded from a configuration file.
{
"id": "aspect_ratio",
"name": "Aspect Ratio",
"type": "aspect_ratio",
"conf_file": "aspect_ratio.json",
"display": true
}conf_file: Specifies a JSON file (e.g.,aspect_ratio.json) that defines the possible aspect ratio options.
Usage: Useful for choosing specific image dimensions, such as 16:9, 4:3, etc.
The slider component provides a range slider for numerical input.
{
"id": "steps",
"name": "Steps",
"type": "slider",
"default": 20,
"constraints": {
"min": 1,
"max": 60,
"step": 20
},
"display": true
}default: Sets the default starting value for the slider.constraints: Defines the minimum, maximum, and step values for the slider.
Usage: Best for parameters like "Steps" or "CFG" where a numeric value within a range is needed.
The image_loader component provides an interface for users to upload or select an image.
{
"name": "Select Image",
"id": "image",
"type": "image_loader",
"display": true
}Usage: Primarily for allowing users to load images into the application.
Clone the repo, cd into the directory, and run the following command:
cd ~
git clone https://github.com/stakeordie/emprops_component_library.git
cd emprops_component_library/server_scripts
./basic.sh && source ~/.bashrc
eval "docker buildx build $(sed 's/^/--build-arg /' ../global/.env) --builder cloud-emprops-comfy-servers --platform linux/amd64 -t emprops/comfy-basic:v1 --output type=cacheonly --push ."