From 3da116aeb22b4f6806c086e010d652017de15a18 Mon Sep 17 00:00:00 2001 From: "Jisung, Ahn" Date: Fri, 30 May 2025 12:21:06 +0900 Subject: [PATCH] =?UTF-8?q?=EB=94=94=EB=B2=84=EA=B7=B8:=20NumberSequenceGe?= =?UTF-8?q?nerator=20=EB=85=B8=EB=93=9C=EC=97=90=20=EB=A1=9C=EA=B9=85=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- number_sequence_generator.py | 50 +++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/number_sequence_generator.py b/number_sequence_generator.py index 602a8ae..d0ebc6f 100644 --- a/number_sequence_generator.py +++ b/number_sequence_generator.py @@ -1,3 +1,17 @@ +import os +import json +import time + +# 로그 파일 경로 설정 +LOG_DIR = os.path.dirname(os.path.abspath(__file__)) +LOG_FILE = os.path.join(LOG_DIR, "sequence_generator_log.txt") + +def log_debug(message): + """디버그 메시지를 로그 파일에 기록""" + timestamp = time.strftime("%Y-%m-%d %H:%M:%S") + with open(LOG_FILE, "a", encoding="utf-8") as f: + f.write(f"[{timestamp}] {message}\n") + class NumberSequenceGenerator: """ Number Sequence Generator Node: Generates a sequence of numbers with specified repetitions. @@ -38,48 +52,82 @@ class NumberSequenceGenerator: # ComfyUI의 상태 저장 메커니즘을 활용하기 위한 플래그 @classmethod def IS_CHANGED(cls, **kwargs): - if kwargs.get("reset", "no") == "yes": + reset = kwargs.get("reset", "no") + log_debug(f"IS_CHANGED 호출됨: reset={reset}, kwargs={kwargs}") + if reset == "yes": + log_debug("IS_CHANGED: 리셋 요청으로 float('nan') 반환") return float("nan") # 항상 변경된 것으로 간주 + log_debug("IS_CHANGED: 상태 유지를 위해 False 반환") return False # 상태 유지 # 각 인스턴스마다 고유한 상태를 유지하기 위한 클래스 변수 state = {} def generate_number(self, start_number, end_number, repeat_count, reset): + log_debug(f"generate_number 호출: start={start_number}, end={end_number}, repeat={repeat_count}, reset={reset}") + log_debug(f"현재 상태 딕셔너리: {json.dumps(NumberSequenceGenerator.state, indent=2)}") + # 범위 검증 - 시작 숫자가 종료 숫자보다 크면 값을 교환 if start_number > end_number: + log_debug(f"범위 교환: {start_number} > {end_number}, 교환 후: {end_number}, {start_number}") start_number, end_number = end_number, start_number # 상태 키 생성 (범위와 반복 횟수로 구성) state_key = f"{start_number}_{end_number}_{repeat_count}" + log_debug(f"상태 키: {state_key}") # 리셋이 요청되었거나 상태가 없는 경우 초기화 if reset == "yes" or state_key not in NumberSequenceGenerator.state: + if reset == "yes": + log_debug(f"리셋 요청으로 상태 초기화") + elif state_key not in NumberSequenceGenerator.state: + log_debug(f"상태 키가 없어 상태 초기화: {state_key}") + NumberSequenceGenerator.state[state_key] = { "current_number": start_number, "current_repeat": 1 } + log_debug(f"초기화된 상태: {NumberSequenceGenerator.state[state_key]}") # 현재 상태 가져오기 current_state = NumberSequenceGenerator.state[state_key] + log_debug(f"현재 상태: {current_state}") # 현재 숫자 저장 result = current_state["current_number"] + log_debug(f"결과 값: {result}") # 반복 횟수 증가 current_state["current_repeat"] += 1 + log_debug(f"반복 횟수 증가: {current_state['current_repeat']}") # 현재 숫자의 반복 횟수가 지정된 반복 횟수에 도달하면 다음 숫자로 이동 if current_state["current_repeat"] > repeat_count: current_state["current_number"] += 1 current_state["current_repeat"] = 1 + log_debug(f"다음 숫자로 이동: {current_state['current_number']}") # 종료 숫자를 넘어가면 시작 숫자로 돌아감 if current_state["current_number"] > end_number: current_state["current_number"] = start_number + log_debug(f"범위 끝에 도달하여 처음으로 돌아감: {start_number}") + + log_debug(f"업데이트된 상태: {NumberSequenceGenerator.state}") + log_debug(f"반환 값: {result}\n{'-'*50}") return (result,) +# 로그 파일 초기화 (모듈 로드 시 한 번만 실행) +if os.path.exists(LOG_FILE): + # 로그 파일이 너무 크면 초기화 + if os.path.getsize(LOG_FILE) > 1024 * 1024: # 1MB 이상이면 초기화 + with open(LOG_FILE, "w", encoding="utf-8") as f: + f.write(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 로그 파일 초기화\n") + +log_debug("\n" + "="*50) +log_debug(f"NumberSequenceGenerator 모듈 로드됨: {time.strftime('%Y-%m-%d %H:%M:%S')}") +log_debug(f"로그 파일 경로: {LOG_FILE}") + NODE_CLASS_MAPPINGS = { "NumberSequenceGenerator": NumberSequenceGenerator }