Nodes/ComfyUI XS DARE TIES/🧬 XS · DARE TIES Profile
ComfyUI Node

🧬 XS · DARE TIES Profile

DARE TIES Profile, the curve that decides what a child is allowed to touch

By x-stride·Created 4 months ago·Updated 4 months ago· 0
🧬 XS · DARE TIES Profile
    • profile
    profile_name<inline>
    bezier[{"x": 0.0, "y": 1.0}, {"x": 0.5, "y": 1.0}, {"x": 1.0, "y": 1.0}]

    Here's the frustration a profile solves: you merge in a checkpoint because you want its style, and it quietly rewrites the composition too. Or you wanted its poses and it drags along its color grade. A plain merge has no idea which parts of a checkpoint are "style" versus "structure" - but the UNet does. Roughly, its 21 blocks split into 9 input blocks (composition and spatial layout), 3 middle blocks (global coherence, lighting, background), and 9 output blocks (style, color, texture, fine detail). The DARE TIES Profile node turns that layout into a dial you can bend.

    How it works

    A profile is a bezier curve with three control points, sampled at 21 evenly spaced points that map one-to-one onto the UNet blocks, left to right: IN00–IN08, MID00–MID02, OUT00–OUT08. The curve's y-axis is a multiplier on that child's delta at each block. y=1 means the child contributes fully there, y=0 means not at all, y<0 inverts it, and y>1 extrapolates. The sensible operating range is −0.5 to +1.5, which covers every common preset shape: flat, bell, trough, gradient.

    The node itself is two inputs, one output:

    • profile_name - a dropdown of saved profiles, or <inline> to work with just the curve in front of you (inline profiles aren't persisted until you hit Save).
    • bezier - the three control points as JSON, like [{"x": 0.0, "y": 1.0}, {"x": 0.5, "y": 1.0}, {"x": 1.0, "y": 1.0}]. Don't hand-edit this string - the pack ships a small frontend that draws the curve and lets you drag the points, which writes this JSON for you.

    The output is a DARE_TIES_PROFILE: the name, the control points, and the resolved block_weights[21]. Wire it into a stack slot's optional profile_1/2/3 input and it multiplies that child's delta per block during the merge. CLIP merging ignores profiles, so they're purely a UNet-level tool.

    The starter pack is the tutorial

    On first run the pack seeds eight profiles into ComfyUI/user/default/dare_ties_profiles/*.json, and they're worth knowing by name because they're the good presets:

    • transfer_style - a rising curve: child affects OUT blocks (style) while the reference keeps composition. The "graft a look onto a base" move.
    • preserve_style - the inverse: child affects IN blocks (poses, framing) while the reference's style and colors stay.
    • boost_coherence / soft_boost_coherence - a bell over the middle blocks, pushing the child's lighting and scene structure in.
    • keep_coherence / soft_keep_coherence - a trough over MID, keeping the reference's global structure while the child remixes edges and details.
    • flat_full / flat_half - no shaping at all, full or half strength. Equivalent to not using a profile.

    Profiles save and load as JSON from that directory (there's also a GET/POST /dare_ties_profiles/* REST endpoint if you want to manage them programmatically), and a profile can carry a display name and description that show up beneath the curve and in the merge report.

    Install

    ComfyUI Manager → search "ComfyUI XS DARE TIES", or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/x-stride/ComfyUI_XS_DARE_TIES
    

    Restart ComfyUI. No requirements.txt, no downloads - pure Python on ComfyUI's stock deps. Node lives under Advanced → model_merging → dare_ties.

    The practical traps

    • Deleting a profile from disk breaks workflows that reference it - the node raises a "not found" error until you refresh the list or switch to <inline>. Profiles are just files; treat them like checkpoints and back them up.
    • <inline> isn't saved. You'll tweak a gorgeous curve, rebuild the workflow, and it's gone. If you like it, Save it.
    • Don't over-curate your first merge. One profile on one child is plenty to learn what each curve does; eight bespoke curves on eight children and you'll have no idea who did what. The merge report lists which profiles applied, so at least you can be confused efficiently.

    Start from transfer_style if all you wanted was the child's look. That single curve is the difference between "borrowed the style" and "merged into mush."

    Categoryadvanced/model_merging/dare_ties

    Inputs (2)

    NameTypeDefaultDescription
    profile_nameCOMBO<inline>Pick a saved profile or '<inline>' to use only the curve from this node (not persisted until you Save).
    bezierSTRING[{"x": 0.0, "y": 1.0}, {"x": 0.5, "y": 1.0}, {"x": 1.0, "y": 1.0}]Three control points as JSON [{x,y},{x,y},{x,y}]. Edited visually when the frontend loads.

    Outputs (1)

    NameTypeDescription
    profileDARE_TIES_PROFILEProfile dict: name, bezier control points, block_weights[21] for UNet input/middle/output blocks.