Seguridad en ComfyUI-WD14-Tagger: Despliegue Local y Gestión de Modelos
ComfyUI-WD14-Tagger es una extensión para ComfyUI que extrae etiquetas de tipo booru de imágenes. Esta guía cubre aspectos de seguridad durante su implementación local, protección de datos y estrategias de caché de modelos.
Implemnetación en Entorno Local
El despliegue local elimina la necesidad de enviar datos a servidores externos. El proceso de instalación implica:
- Clonar el repositorio: ```
git clone https://gitcode.com/gh_mirrors/co/ComfyUI-WD14-Tagger
- Instalar deepndencias: ```
cd ComfyUI-WD14-Tagger
pip install -r requirements.txt
- Configurar el directorio de modelos. El código gestiona la ruta automáticamente: ```
if "wd14_tagger" in folder_paths.folder_names_and_paths:
ruta_modelos = folder_paths.get_folder_paths("wd14_tagger")[0]
if not os.path.exists(ruta_modelos):
os.makedirs(ruta_modelos)
else:
ruta_modelos = get_ext_dir("models", mkdir=True)
Protección de Datos Durante el Procesamiento
Todas las operaciones se ejecutan localmente. La función principal procesa imágenes sin transmitirlas externamente:
def generar_etiquetas(imagen, modelo, umbral, umbral_personaje, excluir="", cambiar_guion=False, coma_final=False):
datos_imagen = imagen * 255
array_datos = np.array(datos_imagen, dtype=np.uint8)
barra_progreso = comfy.utils.ProgressBar(array_datos.shape[0])
resultados = []
for idx in range(array_datos.shape[0]):
img_pil = Image.fromarray(array_datos[idx])
etiquetas = wait_for_async(lambda: etiquetar(img_pil, modelo, umbral, umbral_personaje, excluir, cambiar_guion, coma_final))
resultados.append(etiquetas)
barra_progreso.update(1)
return {"ui": {"etiquetas": resultados}, "result": (resultados,)}
Para excluir etiquetas específicas, el sistema filtra según parámetros configurables:
exclusiones = [termino.strip() for termino in excluir.lower().split(",")]
etiquetas_filtradas = [t for t in todas_etiquetas if t[0] not in exclusiones]
Estrategias de Caché de Modelos
Los modelos se almacenan localmente para evitar descargas repetidas. La función de descarga gestiona tanto archivos ONNX como CSV:
async def descargar_modelo(nombre_modelo, id_cliente, nodo):
await descargar_a_archivo(
f"{url}model.onnx", os.path.join(ruta_modelos, f"{nombre_modelo}.onnx"), callback_actualizacion, sesion=session)
await descargar_a_archivo(
f"{url}selected_tags.csv", os.path.join(ruta_modelos, f"{nombre_modelo}.csv"), callback_actualizacion, sesion=session)
Para listar modelos almacenados:
def modelos_instalados():
archivos_onnx = [f for f in os.listdir(ruta_modelos) if f.endswith(".onnx")]
modelos_validos = [m for m in archivos_onnx if os.path.exists(os.path.join(ruta_modelos, os.path.splitext(m)[0] + ".csv"))]
return modelos_validos
Se puede configurar un mirror para acelerar descargas mediante la variable de entorno HF_ENDPOINT:
endpoint_hf = os.getenv("HF_ENDPOINT", configuracion_default["HF_ENDPOINT"])