The profile
profile.local.json sets what a Version links to, what it is called, and which field
each provenance fact is written to. It is plain JSON and hand-editing it is expected.
Top-level keys are the site default. A projects block overrides them per show, so two
graphs in one ComfyUI can publish into two projects that name Versions differently.
{
"default_project": 1180,
"projects": {
"1180": {
"link_type": "Shot",
"link_field": "entity",
"root_name": "{entity}_{sg_task.Task.step.Step.short_name}",
"code_template": "{root_name}_v{version:03d}",
"status": "rev",
"published_files": {
"storage": "primary",
"path_template": "{entity}/{root_name}/{version_name}/{version_name}.%04d{ext}",
"still_path_template": "{entity}/{root_name}/{version_name}{ext}",
"movie_path_template": "{entity}/{root_name}/{version_name}{ext}",
"register_movie": false,
"colour_space": "sRGB"
}
}
}
} Site-wide keys
| key | default | written by |
|---|---|---|
default_project | none, and both nodes then ask | Settings, SG Defaults |
show_all_projects | false, so template, demo and archived shows stay out of the picker | you |
Per project
Each of these is valid at the top level as a site default.
| key | default | written by |
|---|---|---|
link_type | Shot, the type a bare link name means | the inspector |
link_field | entity, the Version field the link is written to | the inspector |
link_types | the types this show's Versions already use, most used first | you |
root_name | {entity}_{sg_task.Task.step.Step.short_name} | Settings, SG Publish Defaults |
code_template | {root_name}_v{version:03d} | Settings, SG Publish Defaults |
code_regex | derived from the version name template | the inspector |
status | none, so the site sets its own | Settings, SG Publish Defaults |
version_number_field | none, so the version number is inside the name | you |
widgets | what src/comfyui_sg/widgets.py declares | you |
provenance | {"mode": "fields"}, the nine fields by their own names | you |
Inside published_files
| key | default | written by |
|---|---|---|
default | false, so Create Published Files starts unticked | Settings, SG Publish Defaults |
storage | none, and the only Local File Storage when the site has exactly one | Settings, Storage |
path_platform | this machine's | Settings, Operating system |
path_template | {entity}/{root_name}/{version_name}/{version_name}.%04d{ext} | Settings, Sequence path, or sequence path on the node |
still_path_template | {entity}/{root_name}/{version_name}{ext} | Settings, Still path, or still path on the node |
movie_path_template | {entity}/{root_name}/{version_name}{ext} | Settings, Movie path, or movie path on the node |
register_movie | false, so a clip beside frames is review only | Settings, Review movie |
path_to_frames | true | Settings, Path to Frames |
path_to_movie | true | Settings, Path to Movie |
colour_space | none, so a publish declares nothing | Settings, Colour space |
Measuring a site
/inspect-site is a procedure an agent follows. The inspector under it is a script in
the sg-groundtruth checkout, and you can run it yourself. Clone that checkout anywhere
except custom_nodes, where ComfyUI would load it as a node pack.
git clone https://github.com/ksallee/sg-groundtruth.git ~/dev/sg-groundtruth <comfy-python> ~/dev/sg-groundtruth/inspect_site.py # list the projects
<comfy-python> ~/dev/sg-groundtruth/inspect_site.py --project 1180 --out <profile> # measure one - Pass
--out. Its default is./profile.local.jsonrelative to the working directory, and the file has to be written to the pathtools/doctor.pyreports. - Read the report before accepting it, starting with the link field.
- The code convention comes with a coverage number saying how much of the show agrees with it.
- Re-running keeps your edits and prints
(yours, kept)beside each value it would have changed.--overwritediscards them.