1
0
mirror of https://github.com/vladmandic/sdnext.git synced 2026-01-27 15:02:48 +03:00
Files
sdnext/modules/history.py
vladmandic cc0b0e8e3d cleanup todo
Signed-off-by: vladmandic <mandic00@live.com>
2026-01-19 11:10:05 +01:00

80 lines
2.2 KiB
Python

"""
TODO: apply metadata, preview, load/save
"""
import sys
import datetime
from collections import deque
import torch
from modules import shared, devices
class Item():
def __init__(self, latent, preview=None, info=None, ops=[]):
self.ts = datetime.datetime.now().replace(microsecond=0)
self.name = self.ts.strftime('%Y-%m-%d %H:%M:%S')
self.latent = latent.detach().clone().to(devices.cpu)
self.preview = preview
self.info = info
self.ops = ops.copy()
self.size = sys.getsizeof(self.latent.storage())
class History():
def __init__(self):
self.index = -1
self.latents = deque(maxlen=1024)
@property
def count(self):
return len(self.latents)
@property
def size(self):
s = 0
for item in self.latents:
s += item.size
return s
@property
def list(self):
shared.log.info(f'History: items={self.count}/{shared.opts.latent_history} size={self.size}')
return [item.name for item in self.latents]
@property
def selected(self):
if self.index >= 0 and self.index < self.count:
current_index = self.index
self.index = -1
else:
current_index = 0
item = self.latents[current_index]
shared.log.debug(f'History get: index={current_index} time={item.ts} shape={list(item.latent.shape)} dtype={item.latent.dtype} count={self.count}')
return item.latent.to(devices.device), current_index
def find(self, name):
for i, item in enumerate(self.latents):
if item.name == name:
return i
return -1
def add(self, latent, preview=None, info=None, ops=[]):
shared.state.latent_history += 1
if shared.opts.latent_history == 0:
return
if torch.is_tensor(latent):
item = Item(latent, preview, info, ops)
self.latents.appendleft(item)
if self.count >= shared.opts.latent_history:
self.latents.pop()
def clear(self):
self.latents.clear()
# shared.log.debug(f'History clear: count={self.count}')
def load(self):
pass
def save(self):
pass