Commit Graph

31 Commits

Author SHA1 Message Date
6a3b72c035 Remove dead code: unused imports, session state keys, blank lines
- Remove unused `random` import and `KEY_PROMPT_HISTORY` from app.py
- Remove dead session state keys: edit_history_idx, append_prompt, rand_seed
- Clean up extra blank lines in json_loader.py

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 17:40:41 +01:00
387d4d874c Remove Single Editor tab (dead code)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 17:14:09 +01:00
8cc244e8be Add case-insensitive path resolution for Current Path input
Walks each path component and matches against actual directory entries
when an exact match fails on Linux. Widget resyncs to the corrected
canonical path.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:52:48 +01:00
e196ad27f5 Update templates to batch-only and remove single file option
Templates now generate batch_prompt_i2v.json and
batch_prompt_vace_extend.json as batch files. Create New JSON
always creates batch files since single mode is deprecated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 17:04:39 +01:00
bd628b062e Clear stale file selector when navigating to empty folder
Removes leftover file_selector and loaded_file state when the current
directory has no JSON files, preventing stale data from persisting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 17:01:50 +01:00
1abae0de22 Fix path navigator using on_change with deferred sync
The inline check caused mismatches between typed and resolved paths.
Now uses on_change callback that always sets _sync_nav_path flag,
so the widget is synced to the canonical current_dir path on the
next rerun before the widget renders.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 17:00:37 +01:00
64472c7850 Fix nav_path_input write-after-widget error on invalid path
Use _sync_nav_path flag to defer the revert to the next rerun, before
the widget is instantiated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 16:54:52 +01:00
907e7efd68 Fix path navigator by replacing on_change with inline check
The on_change callback had timing issues with Streamlit's session state,
causing user input to be discarded. Now checks the widget value inline
after render and triggers rerun on valid directory change.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 16:53:06 +01:00
0cfe9c9d4b Fix Current Path input reverting on directory change
The nav_path_input was force-overwritten on every rerun, causing
Streamlit to discard user edits before the on_change callback could
process them. Now only syncs on first load or external changes
(favorites). Also resets loaded_file on dir change and reverts
widget on invalid paths.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 16:37:53 +01:00
87ed2f1dfb Merge timeline tabs into single polished tab with adaptive scaling
Combine stable and WIP timeline tabs into one with all features:
view switcher, restore/rename/delete, and data preview panel.
Add adaptive graph spacing based on node count, show full dates
and branch names on node labels, increase label truncation to 25
chars, and drop streamlit-agraph dependency.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 13:10:23 +01:00
e6ef69b126 Fix crash when navigating to a folder with no JSON files
st.radio was called with an empty list when no JSON files existed,
causing Streamlit to error and only render the sidebar.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:59:15 +01:00
8d0e16ac63 Fix missing keys in newly created batch files
Batch creation now seeds one item from DEFAULTS (which includes all
VACE/I2V keys) instead of creating an empty batch_data list.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:54:30 +01:00
a1bda9a979 Fix StreamlitAPIException when jumping to a favorite folder
Set nav_path_input before the widget renders and use on_change callbacks
instead of modifying widget state after instantiation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:52:05 +01:00
b02bf124fb Add atomic writes, magic string constants, unit tests, type hints, and fix navigation
- save_json() now writes to a temp file then uses os.replace() for atomic writes
- Replace hardcoded "batch_data", "history_tree", "prompt_history", "sequence_number"
  strings with constants (KEY_BATCH_DATA, etc.) across all modules
- Add 29 unit tests for history_tree, utils, and json_loader
- Add type hints to public functions in utils.py, json_loader.py, history_tree.py
- Remove ALLOWED_BASE_DIR restriction that blocked navigating outside app CWD
- Fix path text input not updating on navigation by using session state key
- Add unpin button () for removing pinned folders

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:44:31 +01:00
326ae25ab2 Fix critical bugs, security issues, and code quality across all modules
- Replace bare except clauses with specific exceptions (JSONDecodeError, IOError, ValueError, TypeError)
- Add path traversal protection restricting navigation to ALLOWED_BASE_DIR
- Sanitize iframe URLs with scheme validation and html.escape to prevent XSS
- Extract duplicate to_float/to_int to module-level helpers in json_loader.py
- Replace silent modulo wrapping with clamped bounds checking via get_batch_item()
- Remove hardcoded IP 192.168.1.51:5800, default to empty string
- Add try/except around fragile batch history string parsing
- Add JSON schema validation (dict type check) in read_json_data()
- Add Python logging framework, replace print() calls
- Consolidate session state initialization into loop with defaults dict
- Guard streamlit_agraph import with try/except ImportError
- Add backup snapshot before history node deletion
- Add cycle detection in HistoryTree.commit()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 11:47:50 +01:00
18550005dd Update app.py 2026-01-05 15:21:14 +01:00
b25814f756 Update app.py 2026-01-05 12:51:55 +01:00
bc2035eee5 Update app.py 2026-01-03 16:22:26 +01:00
2ed1c8a3cd Update app.py 2026-01-03 16:17:22 +01:00
29335bd4d5 Update app.py 2026-01-03 16:13:26 +01:00
5bd67476bc Update app.py 2026-01-03 16:10:05 +01:00
373242b1a0 Update app.py 2026-01-03 01:06:02 +01:00
607dd193e4 Update app.py 2026-01-02 20:51:39 +01:00
39f24e747c Update app.py 2026-01-02 19:14:48 +01:00
54358f5ec5 Update app.py 2026-01-02 19:08:41 +01:00
f80a9746c7 Update app.py 2026-01-02 18:02:15 +01:00
cde768e5f4 Update app.py 2026-01-02 16:17:25 +01:00
33d775e751 Update app.py 2026-01-02 13:15:50 +01:00
88c22d583f Update app.py 2026-01-02 13:13:56 +01:00
72c481ee7c Add UI reset token to session state
Added a version token to session state for UI refresh control.
2025-12-31 14:59:25 +01:00
8007bf190f Set up Streamlit app with sidebar and file management
Initialize Streamlit app with sidebar for navigation, snippets management, and JSON file handling.
2025-12-31 14:44:31 +01:00