ComfyUI-Advanced-ControlNet
Nós para programar a força do ControlNet em intervalos de tempo e latentes em lote, bem como aplicar pesos personalizados e máscaras de atenção. Os nós ControlNet aqui suportam totalmente amostragem de contexto deslizante, como aquele usado nos nós ComfyUI-AnimateDiff-Evolved. Atualmente suporta ControlNets, T2IAdapters, ControlLoRAs, ControlLLLite, SparseCtrls, SVD-ControlNets e Reference.
Os pesos personalizados permitem a replicação do recurso "Meu prompt é mais importante" da extensão ControlNet sd-webui do Auto1111 por meio de Soft Weights, e o recurso "ControlNet é mais importante" pode ser controlado granularmente alterando o uncond_multiplier nos mesmos Soft Weights.
Os pré-processadores ControlNet estão disponíveis por meio dos nós comfyui_controlnet_aux.
Características
- Programação de timestep e força latente
- Máscaras de atenção
- Replique o recurso "Meu prompt é mais importante" da extensão sd-webui-controlnet via Soft Weights e permita que a suavidade seja ajustada via base_multiplier
- Replicar o recurso "ControlNet é mais importante" da extensão sd-webui-controlnet via uncond_multiplier em Soft Weights
- uncond_multiplier=0.0 fornece resultados idênticos ao recurso auto1111, mas valores entre 0,0 e 1,0 podem ser usados sem problemas para controlar granularmente a configuração.
- Suporte ControlNet, T2IAdapter e ControlLoRA para janelas de contexto deslizantes
- Suporte ControlLLLite
- Suporte SparseCtrl
- Suporte SVD-ControlNet
- ControlNets de difusão de vídeo estável treinados por CiaraRowles : Depth, Lineart
- Suporte de referência
- Suporta os modos
reference_attn
, reference_adain
e refrence_adain+attn
. style_fidelity
e ref_weight
são equivalentes a style_fidelity e control_weight em Auto1111, respectivamente, e a força do Apply ControlNet é o equilíbrio entre o resultado influenciado por ref e o resultado sem referência. Há também um nó Reference ControlNet (Finetune) que permite ajustar style_fidelity, peso e força de attn e adain separadamente.
Índice:
- Explicação de agendamento
- Nós
- Uso (preencherei em breve)
Explicação de agendamento
Os dois conceitos principais para agendamento são Timestep Keyframes e Latent Keyframes .
Os Keyframes Timestep contêm os valores que orientam as configurações de uma controlnet e começam a ter efeito com base em seu start_percent, que corresponde à porcentagem do processo de amostragem. Eles podem conter máscaras para os pontos fortes de cada latente, control_net_weights e latent_keyframes (pontos fortes específicos para cada latente), todos opcionais.
Os quadros-chave latentes determinam a força da rede de controle para latentes específicos - tudo o que eles contêm é o batch_index da latente e a força que a rede de controle deve aplicar a essa latente. Como conceito, os quadros-chave latentes obtêm o mesmo efeito que uma máscara uniforme com o valor de força escolhido.
![imagem_advcn](https://images.downcodes.com/uploads/20241125/img_67449a15e5e1330.png)
Nós
Os nós ControlNet fornecidos aqui são os nós Apply Advanced ControlNet e Load Advanced ControlNet Model (ou diff). Os nós Vanilla ControlNet também são compatíveis e podem ser usados quase de forma intercambiável - a única diferença é que pelo menos um desses nós deve ser usado para que versões avançadas de ControlNets sejam usadas (importante para amostragem de contexto deslizante, como com AnimateDiff-Evolved) .
Chave:
- ? - entradas necessárias
- ? - entradas opcionais
- ? - comece como widgets, pode ser convertido em entradas
- ? - entrada/saída opcional, mas não recomendado para uso a menos que seja necessário
- ? - saída
Aplicar ControlNet avançado
![imagem](https://images.downcodes.com/uploads/20241125/img_67449a15e64df31.png)
Mesma funcionalidade que o nó vanilla Apply Advanced ControlNet (Advanced), exceto com recursos Advanced ControlNet adicionados a ele. Converte automaticamente qualquer ControlNet de carregadores ControlNet em versões avançadas.
Entradas
- ? positivo : condicionamento (positivo).
- ? negativo : condicionamento (negativo).
- ? control_net : controlnet carregado; será convertido para a versão avançada automaticamente por este nó, se for um tipo compatível.
- ? imagem : imagens para guiar as redes de controle - se a rede de controle carregada exigir, elas devem pré-processar imagens. Se for fornecida uma imagem, será usada para todas as latentes. Se forem fornecidas mais imagens, usaremos cada imagem separadamente para cada latente. Se não houver imagens suficientes para atender à contagem latente, as imagens serão repetidas desde o início para corresponder à funcionalidade Vanilla ControlNet.
- ? mask_optional : máscaras de atenção a serem aplicadas em controlnets; basicamente, decide a qual parte da imagem a rede de controle será aplicada (e a força relativa, se a máscara não for binária). Da mesma forma que a entrada de imagem, se você fornecer mais de uma máscara, cada uma poderá ser aplicada a uma latente diferente.
- ? timestep_kf : quadros-chave de timestep para guiar o efeito controlnet ao longo das etapas de amostragem.
- ? latent_kf_override : substituição de quadros-chave latentes, útil se nenhum outro recurso de quadros-chave de intervalo de tempo for necessário. NOTA: este quadro-chave latente será aplicado a TODOS os intervalos de tempo, independentemente de haver outros quadros-chave latentes anexados aos quadros-chave de intervalo de tempo conectados.
- ? weights_override : substituição de pesos, útil se nenhum outro recurso dos quadros-chave de timestep for necessário. NOTA: este peso será aplicado a TODOS os passos de tempo, independentemente de haver outros pesos anexados aos quadros-chave de passo de tempo conectados.
- ? força : força da rede de controle; 1,0 é força total, 0,0 não tem efeito algum.
- ? start_percent : porcentagem da etapa de amostragem na qual o controlnet deve começar a ser aplicado - não importa qual start_percent esteja definido nos quadros-chave do timestep, eles não entrarão em vigor até que este start_percent seja alcançado.
- ? stop_percent : porcentagem da etapa de amostragem na qual o controlnet deve parar de ser aplicado - não importa qual start_percent esteja definido nos quadros-chave do timestep, eles não entrarão em vigor quando esse end_percent for atingido.
Resultados
- ? positivo : condicionamento (positivo) com redes de controle aplicadas
- ? negativo : condicionamento (negativo) com redes de controle aplicadas
Carregar modelo ControlNet avançado
![imagem](https://images.downcodes.com/uploads/20241125/img_67449a15e6ac332.png)
Carrega um modelo ControlNet e o converte em uma versão avançada que suporta todos os recursos deste repositório. Quando usado com o nó Apply Advanced ControlNet , não há razão para usar a entrada timestep_keyframe neste nó - em vez disso, use timestep_kf no nó Apply.
Entradas
- ? timestep_keyframe : entrada opcional e provavelmente desnecessária para que o ControlNet use timestep_keyframes selecionados - não deve ser usado a menos que seja necessário. Útil se este nó não estiver conectado ao nó Apply Advanced ControlNet , mas ainda desejar usar Timestep Keyframe ou usar saídas TK_SHORTCUT de ControlWeights no mesmo cenário. Será substituído pela entrada timestep_kf no nó Apply Advanced ControlNet , se houver uma fornecida lá.
- ? model : modelo para conectar à versão diff do nó. Algumas redes de controle são projetadas para receber o modelo; se você não sabe o que isso faz, provavelmente não deseja usar a versão diff do nó.
Resultados
- ? CONTROL_NET : ControlNet avançado carregado
Quadro-chave de intervalo de tempo
![imagem](https://images.downcodes.com/uploads/20241125/img_67449a15e713833.png)
Agendamento do nó em intervalos de tempo (etapas de amostragem) com base no conjunto start_percent. O encadeamento de quadros-chave de intervalo de tempo permite o agendamento do ControlNet em etapas de amostragem (em termos percentuais), por meio de uma programação de quadro-chave de intervalo de tempo.
Entradas
- ? prev_timestep_kf : usado para encadear quadros-chave de timestep para criar uma programação. A ordem não importa - os quadros-chave do Timestep se classificam automaticamente por start_percent. Qualquer quadro-chave de intervalo de tempo contido em prev_timestep_keyframe que contenha o mesmo start_percent que o quadro-chave de intervalo de tempo será substituído.
- ? cn_weights : pesos a serem aplicados à controlnet enquanto este Timestep Keyframe estiver em vigor. Deve ser compatível com a rede de controle carregada ou gerará um erro explicando quais tipos de peso são compatíveis. Se inherit_missing for True, se nenhum control_net_weight for passado, tentará reutilizar os últimos pesos usados na programação do quadro-chave do timestep. Se o nó Apply Advanced ControlNet tiver um peso_override, o peso_override será usado durante a amostragem em vez de control_net_weight.
- ? latent_keyframe : quadros-chave latentes a serem aplicados à controlnet enquanto este quadro-chave Timestep estiver em vigor. Se inherit_missing for True, se nenhum latent_keyframe for passado, tentará reutilizar os últimos pesos usados na programação do quadro-chave do timestep. Se o nó Apply Advanced ControlNet tiver um latent_kf_override, o latent_lf_override será usado durante a amostragem em vez de latent_keyframe.
- ? mask_optional : máscaras de atenção a serem aplicadas em controlnets; basicamente, decide a qual parte da imagem a rede de controle será aplicada (e a força relativa, se a máscara não for binária). Igual a mask_optional no nó Apply Advanced ControlNet, pode aplicar uma máscara a todas as latentes ou máscaras individuais para cada latente. Se inherit_missing for True, se nenhuma máscara_optional for transmitida, tentará reutilizar a última máscara_optional usada na programação do quadro-chave do intervalo de tempo. NÃO é substituído por mask_optional no nó Apply Advanced ControlNet; serão usados juntos.
- ? start_percent : porcentagem da etapa de amostragem na qual este quadro-chave de intervalo de tempo se qualifica para ser usado. Atua como a 'chave' para o quadro-chave Timestep na programação do quadro-chave Timestep.
- ? força : força da rede de controle; multiplica o controlnet por este valor, basicamente, aplicado junto com a força no nó Apply ControlNet. Se definido como 0,0 não terá nenhum efeito durante a duração do efeito deste Timestep Keyframe e aumentará a velocidade de amostragem ao não realizar nenhum trabalho.
- ? null_latent_kf_strength : força a ser atribuída a latentes que não são contabilizados no passado em latent_keyframes. Não tem efeito se nenhum latent_keyframes for passado ou nenhum batch_indeces não for contabilizado nos latent_keyframes durante a amostragem.
- ? inherit_missing : determina se deve reutilizar valores de Timestep Keyframes anteriores para valores opcionais (control_net_weights, latent_keyframe e mask_option) que não estão incluídos neste TimestepKeyframe. Para herdar apenas entradas específicas, use entradas padrão.
- ? garantido_steps : quando 1 ou superior, mesmo que o start_percent de um quadro-chave de intervalo de tempo à frente deste na programação esteja mais próximo da porcentagem de amostragem atual, esse quadro-chave de intervalo de tempo ainda será usado para a quantidade especificada de etapas antes de passar para o próximo quadro-chave de intervalo de tempo selecionado em o passo seguinte. Quer o quadro-chave Timestep seja usado ou não, suas entradas ainda serão contabilizadas para fins de herança.
Resultados
- ? TIMESTEP_KF : o Timestep Keyframe criado, que pode ser vinculado a outro ou em uma entrada Timestep Keyframe.
Interpolação de quadro-chave de intervalo de tempo
![imagem](https://images.downcodes.com/uploads/20241125/img_67449a15e794634.png)
Permite criar Timestep Keyframe com valores de força interpolados em uma determinada faixa percentual. (O primeiro quadro-chave gerado terá garantido_steps=1, os demais seguintes terão garantido_steps=0).
Entradas
- ? prev_timestep_kf : usado para encadear quadros-chave de timestep para criar uma programação. A ordem não importa - os quadros-chave do Timestep se classificam automaticamente por start_percent. Qualquer quadro-chave de intervalo de tempo contido em prev_timestep_keyframe que contenha o mesmo start_percent que o quadro-chave de intervalo de tempo será substituído.
- ? cn_weights : pesos a serem aplicados à controlnet enquanto este Timestep Keyframe estiver em vigor. Deve ser compatível com a rede de controle carregada ou gerará um erro explicando quais tipos de peso são compatíveis. Se inherit_missing for True, se nenhum control_net_weight for passado, tentará reutilizar os últimos pesos usados na programação do quadro-chave do timestep. Se o nó Apply Advanced ControlNet tiver um peso_override, o peso_override será usado durante a amostragem em vez de control_net_weight.
- ? latent_keyframe : quadros-chave latentes a serem aplicados à controlnet enquanto este quadro-chave Timestep estiver em vigor. Se inherit_missing for True, se nenhum latent_keyframe for passado, tentará reutilizar os últimos pesos usados na programação do quadro-chave do timestep. Se o nó Apply Advanced ControlNet tiver um latent_kf_override, o latent_lf_override será usado durante a amostragem em vez de latent_keyframe.
- ? mask_optional : máscaras de atenção a serem aplicadas em controlnets; basicamente, decide a qual parte da imagem a rede de controle será aplicada (e a força relativa, se a máscara não for binária). Igual a mask_optional no nó Apply Advanced ControlNet, pode aplicar uma máscara a todas as latentes ou máscaras individuais para cada latente. Se inherit_missing for True, se nenhuma máscara_optional for transmitida, tentará reutilizar a última máscara_optional usada na programação do quadro-chave do intervalo de tempo. NÃO é substituído por mask_optional no nó Apply Advanced ControlNet; serão usados juntos.
- ? start_percent : porcentagem da etapa de amostragem na qual o primeiro quadro-chave de intervalo de tempo gerado se qualifica para ser usado.
- ? end_percent : porcentagem da etapa de amostragem na qual o último quadro-chave de timestep gerado se qualifica para ser usado.
- ? Strength_start : força do quadro-chave Timestep no início do intervalo.
- ? Strength_end : força do quadro-chave Timestep no final do intervalo.
- ? interpolação : o método de interpolação.
- ? intervalos : a quantidade de quadros-chave a serem gerados no total - o primeiro terá seu start_percent igual a start_percent, o último terá seu start_percent igual a end_percent.
- ? null_latent_kf_strength : força a ser atribuída a latentes que não são contabilizados no passado em latent_keyframes. Não tem efeito se nenhum latent_keyframes for passado ou nenhum batch_indeces não for contabilizado nos latent_keyframes durante a amostragem.
- ? inherit_missing : determina se deve reutilizar valores de Timestep Keyframes anteriores para valores opcionais (control_net_weights, latent_keyframe e mask_option) que não estão incluídos neste TimestepKeyframe. Para herdar apenas entradas específicas, use entradas padrão.
- ? print_keyframes : se True, imprimirá os Timestep Keyframes gerados por este nó para fins de depuração.
Resultados
- ? TIMESTEP_KF : o Timestep Keyframe criado, que pode ser vinculado a outro ou em uma entrada Timestep Keyframe.
Quadro-chave de intervalo de tempo da lista
![imagem](https://images.downcodes.com/uploads/20241125/img_67449a15e806435.png)
Permite criar Timestep Keyframe por meio de uma lista de pontos flutuantes, como com Batch Value Schedule de nós ComfyUI_FizzNodes. (O primeiro quadro-chave gerado terá garantido_steps=1, os demais seguintes terão garantido_steps=0).
Entradas
- ? prev_timestep_kf : usado para encadear quadros-chave de timestep para criar uma programação. A ordem não importa - os quadros-chave do Timestep se classificam automaticamente por start_percent. Qualquer quadro-chave de intervalo de tempo contido em prev_timestep_keyframe que contenha o mesmo start_percent que o quadro-chave de intervalo de tempo será substituído.
- ? cn_weights : pesos a serem aplicados à controlnet enquanto este Timestep Keyframe estiver em vigor. Deve ser compatível com a rede de controle carregada ou gerará um erro explicando quais tipos de peso são compatíveis. Se inherit_missing for True, se nenhum control_net_weight for passado, tentará reutilizar os últimos pesos usados na programação do quadro-chave do timestep. Se o nó Apply Advanced ControlNet tiver um peso_override, o peso_override será usado durante a amostragem em vez de control_net_weight.
- ? latent_keyframe : quadros-chave latentes a serem aplicados à controlnet enquanto este quadro-chave Timestep estiver em vigor. Se inherit_missing for True, se nenhum latent_keyframe for passado, tentará reutilizar os últimos pesos usados na programação do quadro-chave do timestep. Se o nó Apply Advanced ControlNet tiver um latent_kf_override, o latent_lf_override será usado durante a amostragem em vez de latent_keyframe.
- ? mask_optional : máscaras de atenção a serem aplicadas em controlnets; basicamente, decide a qual parte da imagem a rede de controle será aplicada (e a força relativa, se a máscara não for binária). Igual a mask_optional no nó Apply Advanced ControlNet, pode aplicar uma máscara a todas as latentes ou máscaras individuais para cada latente. Se inherit_missing for True, se nenhuma máscara_optional for transmitida, tentará reutilizar a última máscara_optional usada na programação do quadro-chave do intervalo de tempo. NÃO é substituído por mask_optional no nó Apply Advanced ControlNet; serão usados juntos.
- ? float_strengths : uma lista de floats, que corresponderá à força de cada Timestep Keyframe; o primeiro será atribuído a start_percent, o último será atribuído a end_percent e o restante será distribuído linearmente entre eles.
- ? start_percent : porcentagem da etapa de amostragem na qual o primeiro quadro-chave de intervalo de tempo gerado se qualifica para ser usado.
- ? end_percent : porcentagem da etapa de amostragem na qual o último quadro-chave de timestep gerado se qualifica para ser usado.
- ? null_latent_kf_strength : força a ser atribuída a latentes que não são contabilizados no passado em latent_keyframes. Não tem efeito se nenhum latent_keyframes for passado ou nenhum batch_indeces não for contabilizado nos latent_keyframes durante a amostragem.
- ? inherit_missing : determina se deve reutilizar valores de Timestep Keyframes anteriores para valores opcionais (control_net_weights, latent_keyframe e mask_option) que não estão incluídos neste TimestepKeyframe. Para herdar apenas entradas específicas, use entradas padrão.
- ? print_keyframes : se True, imprimirá os Timestep Keyframes gerados por este nó para fins de depuração.
Resultados
- ? TIMESTEP_KF : o Timestep Keyframe criado, que pode ser vinculado a outro ou em uma entrada Timestep Keyframe.
Quadro-chave latente
![imagem](https://images.downcodes.com/uploads/20241125/img_67449a15e888536.png)
Um quadro-chave latente único seleciona a força de um batch_index específico. Se batch_index não estiver presente durante a amostragem, simplesmente não terá efeito. Pode ser encadeado com qualquer outro nó do tipo Latent Keyframe para criar uma programação de keyframe latente.
Entradas
- ? prev_latent_kf : usado para encadear quadros-chave latentes para criar um agendamento. Se um quadro-chave latente contido em prev_latent_keyframes tiver o mesmo batch_index que este quadro-chave latente, eles terão prioridade sobre o valor deste nó.
- ? batch_index : índice de latente no lote ao qual aplicar a força da rede de controle. Atua como a 'chave' para o quadro-chave latente na programação do quadro-chave latente.
- ? força : força da rede de controle para aplicar à latente correspondente.
Resultados
- ? LATENT_KF : o quadro-chave latente criado, que pode ser vinculado a outro ou a uma entrada de quadro-chave latente.
Grupo de quadros-chave latentes
![imagem](https://images.downcodes.com/uploads/20241125/img_67449a15e8e5937.png)
Permite criar quadros-chave latentes por meio de índices individuais ou intervalos no estilo python.
Entradas
- ? prev_latent_kf : usado para encadear quadros-chave latentes para criar um agendamento. Se algum quadro-chave latente contido em prev_latent_keyframes tiver o mesmo batch_index que este quadro-chave latente, eles terão prioridade sobre a versão deste nó.
- ? latent_optional : as latentes que devem ser transmitidas para amostragem; obrigatório apenas se desejar usar índices negativos (serão automaticamente convertidos para valores reais).
- ? index_strengths : lista de strings de índices ou intervalos de índices no estilo python para atribuir forças. Se latent_optional for passado, pode conter índices negativos ou intervalos que contenham números negativos, estilo python. Os diferentes índices devem ser separados por vírgula. Latentes individuais podem ser especificadas por
batch_index=strength
, como 0=0.9
. Os intervalos podem ser especificados por start_index_inclusive:end_index_exclusive=strength
, como 0:8=strength
. Índices negativos são possíveis quando latents_optional tem uma entrada, com uma string como 0,-4=0.25
. - ? print_keyframes : se True, imprimirá os Keyframes Latentes gerados por este nó para fins de depuração.
Resultados
- ? LATENT_KF : o quadro-chave latente criado, que pode ser vinculado a outro ou a uma entrada de quadro-chave latente.
Interpolação de quadro-chave latente
![imagem](https://images.downcodes.com/uploads/20241125/img_67449a15e94ba38.png)
Permite criar Keyframes Latentes com valores interpolados em um intervalo.
Entradas
- ? prev_latent_kf : usado para encadear quadros-chave latentes para criar um agendamento. Se algum quadro-chave latente contido em prev_latent_keyframes tiver o mesmo batch_index que este quadro-chave latente, eles terão prioridade sobre a versão deste nó.
- ? batch_index_from : iniciando batch_index do intervalo, incluído.
- ? batch_index_to : final do batch_index do intervalo, excluído (intervalo no estilo python).
- ? Strength_from : força inicial da interpolação.
- ? Strength_to : força final da interpolação.
- ? interpolação : o método de interpolação.
- ? print_keyframes : se True, imprimirá os Keyframes Latentes gerados por este nó para fins de depuração.
Resultados
- ? LATENT_KF : o quadro-chave latente criado, que pode ser vinculado a outro ou a uma entrada de quadro-chave latente.
Quadro-chave latente da lista
![imagem](https://images.downcodes.com/uploads/20241125/img_67449a15e9ae339.png)
Permite criar quadros-chave latentes por meio de uma lista de pontos flutuantes, como com Batch Value Schedule de nós ComfyUI_FizzNodes.
Entradas
- ? prev_latent_kf : usado para encadear quadros-chave latentes para criar uma programação. Se algum quadro-chave latente contido em prev_latent_keyframes tiver o mesmo batch_index que este quadro-chave latente, eles terão prioridade sobre a versão deste nó.
- ? float_strengths : uma lista de floats, que corresponderá à força de cada Keyframe Latente; o batch_index é o índice de cada valor flutuante na lista.
- ? print_keyframes : se True, imprimirá os Keyframes Latentes gerados por este nó para fins de depuração.
Resultados
- ? LATENT_KF : o quadro-chave latente criado, que pode ser vinculado a outro ou a uma entrada de quadro-chave latente.
Existem mais nós para documentar e mostrar o uso - adicionaremos isso em breve! PENDÊNCIA