mirror of
https://github.com/vladmandic/sdnext.git
synced 2026-01-27 15:02:48 +03:00
80 lines
2.2 KiB
Python
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
|