seed
This commit is contained in:
@@ -2,6 +2,7 @@ import streamlit as st
|
|||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
|
import random
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
# --- Configuration ---
|
# --- Configuration ---
|
||||||
@@ -14,6 +15,7 @@ st.set_page_config(layout="wide", page_title="AI Settings Manager")
|
|||||||
DEFAULTS = {
|
DEFAULTS = {
|
||||||
"camera": "Camera stand still. Motion starts immediately.",
|
"camera": "Camera stand still. Motion starts immediately.",
|
||||||
"flf": 0,
|
"flf": 0,
|
||||||
|
"seed": 0, # <--- NEW KEY
|
||||||
"frame_to_skip": 81,
|
"frame_to_skip": 81,
|
||||||
"input_a_frames": "",
|
"input_a_frames": "",
|
||||||
"input_b_frames": "",
|
"input_b_frames": "",
|
||||||
@@ -22,7 +24,7 @@ DEFAULTS = {
|
|||||||
"vace schedule": 1,
|
"vace schedule": 1,
|
||||||
"video file path": "",
|
"video file path": "",
|
||||||
"reference image path": "",
|
"reference image path": "",
|
||||||
"flf image path": "", # <--- NEW KEY
|
"flf image path": "",
|
||||||
"current_prompt": "",
|
"current_prompt": "",
|
||||||
"negative": "",
|
"negative": "",
|
||||||
"lora 1 high": "", "lora 1 low": "",
|
"lora 1 high": "", "lora 1 low": "",
|
||||||
@@ -91,7 +93,6 @@ def generate_templates(directory):
|
|||||||
elif "global" in filename:
|
elif "global" in filename:
|
||||||
data.update({"video file path": "", "negative": GLOBAL_NEGATIVE})
|
data.update({"video file path": "", "negative": GLOBAL_NEGATIVE})
|
||||||
elif "i2v" in filename:
|
elif "i2v" in filename:
|
||||||
# Updated I2V Template
|
|
||||||
data.update({"reference image path": "", "flf image path": ""})
|
data.update({"reference image path": "", "flf image path": ""})
|
||||||
save_json(path, data)
|
save_json(path, data)
|
||||||
|
|
||||||
@@ -193,6 +194,7 @@ if selected_file_name:
|
|||||||
st.session_state.last_mtime = mtime
|
st.session_state.last_mtime = mtime
|
||||||
st.session_state.loaded_file = str(file_path)
|
st.session_state.loaded_file = str(file_path)
|
||||||
if 'append_prompt' in st.session_state: del st.session_state.append_prompt
|
if 'append_prompt' in st.session_state: del st.session_state.append_prompt
|
||||||
|
if 'rand_seed' in st.session_state: del st.session_state.rand_seed
|
||||||
st.session_state.edit_history_idx = None
|
st.session_state.edit_history_idx = None
|
||||||
else:
|
else:
|
||||||
data = st.session_state.data_cache
|
data = st.session_state.data_cache
|
||||||
@@ -209,6 +211,24 @@ if selected_file_name:
|
|||||||
|
|
||||||
new_prompt = st.text_area("Current Prompt", value=current_prompt_val, height=150)
|
new_prompt = st.text_area("Current Prompt", value=current_prompt_val, height=150)
|
||||||
new_negative = st.text_area("Negative Prompt", value=data.get("negative", ""), height=100)
|
new_negative = st.text_area("Negative Prompt", value=data.get("negative", ""), height=100)
|
||||||
|
|
||||||
|
# --- SEED SECTION ---
|
||||||
|
col_seed_val, col_seed_btn = st.columns([4, 1])
|
||||||
|
with col_seed_btn:
|
||||||
|
st.write("") # Spacer
|
||||||
|
st.write("")
|
||||||
|
if st.button("🎲 Randomize"):
|
||||||
|
st.session_state.rand_seed = random.randint(0, 999999999999)
|
||||||
|
st.rerun()
|
||||||
|
|
||||||
|
with col_seed_val:
|
||||||
|
# Use randomized value if triggered, otherwise data value
|
||||||
|
seed_val = st.session_state.get('rand_seed', int(data.get("seed", 0)))
|
||||||
|
# IMPORTANT: Sync session state back to None to allow manual edits later if needed,
|
||||||
|
# but usually keeping it in session state until save is fine.
|
||||||
|
new_seed = st.number_input("Seed", value=seed_val, step=1, min_value=0, format="%d")
|
||||||
|
# Update cache immediately so it persists if we change other inputs
|
||||||
|
data["seed"] = new_seed
|
||||||
|
|
||||||
st.subheader("LoRAs")
|
st.subheader("LoRAs")
|
||||||
st.code("<lora::1.0>", language="text")
|
st.code("<lora::1.0>", language="text")
|
||||||
@@ -230,7 +250,6 @@ if selected_file_name:
|
|||||||
elif "global" in fname:
|
elif "global" in fname:
|
||||||
fields += ["video file path"]
|
fields += ["video file path"]
|
||||||
elif "i2v" in fname:
|
elif "i2v" in fname:
|
||||||
# I2V Specific Fields Update
|
|
||||||
fields += ["reference image path", "flf image path"]
|
fields += ["reference image path", "flf image path"]
|
||||||
|
|
||||||
for f in fields:
|
for f in fields:
|
||||||
@@ -249,6 +268,7 @@ if selected_file_name:
|
|||||||
if c_col1.button("Force Overwrite", type="primary"):
|
if c_col1.button("Force Overwrite", type="primary"):
|
||||||
data["current_prompt"] = new_prompt
|
data["current_prompt"] = new_prompt
|
||||||
data["negative"] = new_negative
|
data["negative"] = new_negative
|
||||||
|
data["seed"] = new_seed
|
||||||
data.update(loras)
|
data.update(loras)
|
||||||
data.update(spec_fields)
|
data.update(spec_fields)
|
||||||
st.session_state.last_mtime = save_json(file_path, data)
|
st.session_state.last_mtime = save_json(file_path, data)
|
||||||
@@ -264,6 +284,7 @@ if selected_file_name:
|
|||||||
if st.button("💾 Update File", use_container_width=True):
|
if st.button("💾 Update File", use_container_width=True):
|
||||||
data["current_prompt"] = new_prompt
|
data["current_prompt"] = new_prompt
|
||||||
data["negative"] = new_negative
|
data["negative"] = new_negative
|
||||||
|
data["seed"] = new_seed
|
||||||
data.update(loras)
|
data.update(loras)
|
||||||
data.update(spec_fields)
|
data.update(spec_fields)
|
||||||
st.session_state.last_mtime = save_json(file_path, data)
|
st.session_state.last_mtime = save_json(file_path, data)
|
||||||
@@ -277,6 +298,7 @@ if selected_file_name:
|
|||||||
entry = {
|
entry = {
|
||||||
"prompt": new_prompt,
|
"prompt": new_prompt,
|
||||||
"negative": new_negative,
|
"negative": new_negative,
|
||||||
|
"seed": new_seed,
|
||||||
"note": archive_note if archive_note else f"Snapshot {len(data.get('prompt_history', [])) + 1}",
|
"note": archive_note if archive_note else f"Snapshot {len(data.get('prompt_history', [])) + 1}",
|
||||||
"loras": loras,
|
"loras": loras,
|
||||||
**spec_fields
|
**spec_fields
|
||||||
@@ -294,7 +316,6 @@ if selected_file_name:
|
|||||||
|
|
||||||
st.subheader("Media Preview")
|
st.subheader("Media Preview")
|
||||||
preview_path = None
|
preview_path = None
|
||||||
# Add flf image path to preview logic
|
|
||||||
for k in ["reference path", "video file path", "reference image path", "flf image path"]:
|
for k in ["reference path", "video file path", "reference image path", "flf image path"]:
|
||||||
if spec_fields.get(k):
|
if spec_fields.get(k):
|
||||||
preview_path = spec_fields[k]
|
preview_path = spec_fields[k]
|
||||||
@@ -336,12 +357,18 @@ if selected_file_name:
|
|||||||
with st.expander(f"📝 EDITING: {note_title}", expanded=True):
|
with st.expander(f"📝 EDITING: {note_title}", expanded=True):
|
||||||
st.info("Editing History Entry (In-Place)")
|
st.info("Editing History Entry (In-Place)")
|
||||||
edit_note = st.text_input("Note", value=h.get('note', ''), key=f"edit_note_{idx}")
|
edit_note = st.text_input("Note", value=h.get('note', ''), key=f"edit_note_{idx}")
|
||||||
|
|
||||||
|
# --- ADDED SEED EDITING HERE ---
|
||||||
|
ec_seed1, ec_seed2 = st.columns([1, 3])
|
||||||
|
edit_seed = ec_seed1.number_input("Seed", value=int(h.get('seed', 0)), step=1, key=f"edit_seed_{idx}")
|
||||||
|
|
||||||
edit_prompt = st.text_area("Prompt", value=h.get('prompt', ''), height=150, key=f"edit_prompt_{idx}")
|
edit_prompt = st.text_area("Prompt", value=h.get('prompt', ''), height=150, key=f"edit_prompt_{idx}")
|
||||||
edit_negative = st.text_area("Negative", value=h.get('negative', ''), height=80, key=f"edit_neg_{idx}")
|
edit_negative = st.text_area("Negative", value=h.get('negative', ''), height=80, key=f"edit_neg_{idx}")
|
||||||
|
|
||||||
ec1, ec2 = st.columns([1, 4])
|
ec1, ec2 = st.columns([1, 4])
|
||||||
if ec1.button("💾 Save", key=f"save_edit_{idx}", type="primary"):
|
if ec1.button("💾 Save", key=f"save_edit_{idx}", type="primary"):
|
||||||
h['note'] = edit_note
|
h['note'] = edit_note
|
||||||
|
h['seed'] = edit_seed
|
||||||
h['prompt'] = edit_prompt
|
h['prompt'] = edit_prompt
|
||||||
h['negative'] = edit_negative
|
h['negative'] = edit_negative
|
||||||
st.session_state.last_mtime = save_json(file_path, data)
|
st.session_state.last_mtime = save_json(file_path, data)
|
||||||
@@ -358,11 +385,11 @@ if selected_file_name:
|
|||||||
col_h1, col_h2 = st.columns([3, 1])
|
col_h1, col_h2 = st.columns([3, 1])
|
||||||
|
|
||||||
with col_h1:
|
with col_h1:
|
||||||
st.caption("📝 Prompt")
|
st.caption(f"📝 Prompt (Seed: {h.get('seed', 0)})")
|
||||||
st.text(h.get('prompt', ''))
|
st.text(h.get('prompt', ''))
|
||||||
|
|
||||||
st.caption("🧩 LoRAs & Files")
|
st.caption("🧩 LoRAs & Files")
|
||||||
info_dict = {k:v for k,v in h.items() if k not in ['prompt', 'negative', 'note'] and v}
|
info_dict = {k:v for k,v in h.items() if k not in ['prompt', 'negative', 'note', 'seed'] and v}
|
||||||
if 'loras' in h and isinstance(h['loras'], dict):
|
if 'loras' in h and isinstance(h['loras'], dict):
|
||||||
info_dict.update({k:v for k,v in h['loras'].items() if v})
|
info_dict.update({k:v for k,v in h['loras'].items() if v})
|
||||||
if 'loras' in info_dict: del info_dict['loras']
|
if 'loras' in info_dict: del info_dict['loras']
|
||||||
@@ -375,10 +402,11 @@ if selected_file_name:
|
|||||||
else:
|
else:
|
||||||
data["current_prompt"] = h.get("prompt", "")
|
data["current_prompt"] = h.get("prompt", "")
|
||||||
data["negative"] = h.get("negative", "")
|
data["negative"] = h.get("negative", "")
|
||||||
|
data["seed"] = int(h.get("seed", 0))
|
||||||
if "loras" in h and isinstance(h["loras"], dict):
|
if "loras" in h and isinstance(h["loras"], dict):
|
||||||
data.update(h["loras"])
|
data.update(h["loras"])
|
||||||
for k, v in h.items():
|
for k, v in h.items():
|
||||||
if k not in ["note", "prompt", "loras", "negative"]:
|
if k not in ["note", "prompt", "loras", "negative", "seed"]:
|
||||||
data[k] = v
|
data[k] = v
|
||||||
|
|
||||||
st.session_state.last_mtime = save_json(file_path, data)
|
st.session_state.last_mtime = save_json(file_path, data)
|
||||||
|
|||||||
Reference in New Issue
Block a user