Commit Graph
100 Commits
Author SHA1 Message Date
EthanfelandClaude Opus 4.5 94dbbc694f Fix vertical timeline scaling by disabling container width stretch
Vertical graphs now render at natural size instead of stretching to
fill container width, which was making nodes appear giant.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 14:05:01 +01:00
EthanfelandClaude Opus 4.5 2653b5a0ee Make vertical timeline more compact with smaller nodes
Reduces font sizes, padding, spacing, and note truncation length
specifically for vertical (TB) mode to improve usability.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 14:02:28 +01:00
EthanfelandClaude Opus 4.5 56db4080de Add mass update feature to batch processor
Allows propagating field values from one sequence to multiple/all other
sequences. Includes source selector, field multi-select, target checkboxes
with Select All toggle, preview, and history snapshot on apply.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 13:57:34 +01:00
EthanfelandClaude Opus 4.5 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
EthanfelandClaude Opus 4.5 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
EthanfelandClaude Opus 4.5 676160be8c Always show reference path, flf image path, and VACE fields in batch editor
These fields were previously gated behind filename checks ("vace"/"i2v"
in filename), hiding them when the filename didn't match. Since DEFAULTS
includes all these keys, always render them.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:57:15 +01:00
EthanfelandClaude Opus 4.5 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
EthanfelandClaude Opus 4.5 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
EthanfelandClaude Opus 4.5 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
EthanfelandClaude Opus 4.5 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
Ethanfel 268de89f6d Update tab_batch.py 2026-01-06 21:53:38 +01:00
Ethanfel 80b77b0218 Update tab_comfy.py 2026-01-06 09:36:14 +01:00
Ethanfel b19e7b937c Update tab_comfy.py 2026-01-06 01:35:23 +01:00
Ethanfel 316ef0e620 Update tab_comfy.py 2026-01-05 22:54:00 +01:00
Ethanfel 18550005dd Update app.py 2026-01-05 15:21:14 +01:00
Ethanfel 65e19fb7ff Update tab_comfy.py 2026-01-05 14:49:11 +01:00
Ethanfel b25814f756 Update app.py 2026-01-05 12:51:55 +01:00
Ethanfel 2b4221e444 Update tab_batch.py 2026-01-05 12:51:20 +01:00
Ethanfel a5c5410b04 Add tab_raw.py 2026-01-05 12:50:34 +01:00
Ethanfel 213aa254fb width of timeline 2026-01-04 19:10:07 +01:00
Ethanfel f51a0d6fe0 Update tab_timeline_wip.py 2026-01-04 19:06:57 +01:00
Ethanfel d054ff2725 Update tab_batch.py 2026-01-04 17:03:31 +01:00
Ethanfel 7b4b0ff7ee Update tab_timeline_wip.py 2026-01-04 16:41:40 +01:00
Ethanfel d3deb58469 Update tab_timeline.py 2026-01-04 16:41:19 +01:00
Ethanfel a6b88467a8 Update tab_batch.py 2026-01-04 15:26:08 +01:00
Ethanfel f7d7e74cb9 Update tab_batch.py 2026-01-04 12:42:31 +01:00
Ethanfel 9c83dd0017 Delete db_manager.py 2026-01-03 16:24:11 +01:00
Ethanfel bc2035eee5 Update app.py 2026-01-03 16:22:26 +01:00
Ethanfel 2ed1c8a3cd Update app.py 2026-01-03 16:17:22 +01:00
Ethanfel 5f3f8e2076 Update db_manager.py 2026-01-03 16:16:05 +01:00
Ethanfel 29335bd4d5 Update app.py 2026-01-03 16:13:26 +01:00
Ethanfel 5bd67476bc Update app.py 2026-01-03 16:10:05 +01:00
Ethanfel 8fe0e39ecf Update db_manager.py 2026-01-03 16:06:34 +01:00
Ethanfel f74f583e98 Create db_manager.py 2026-01-03 16:01:27 +01:00
Ethanfel 909f2b5f21 Update tab_batch.py 2026-01-03 10:51:52 +01:00
Ethanfel d7f06b7a93 Update tab_timeline_wip.py 2026-01-03 01:26:54 +01:00
Ethanfel 7e4cede82b Update tab_timeline_wip.py 2026-01-03 01:25:46 +01:00
Ethanfel f25e264db9 Update tab_timeline_wip.py 2026-01-03 01:22:24 +01:00
Ethanfel 6eff0f3ad5 Update tab_timeline_wip.py 2026-01-03 01:18:44 +01:00
Ethanfel 4d398afea0 Update tab_timeline_wip.py 2026-01-03 01:14:54 +01:00
Ethanfel 9582103d40 Update tab_timeline_wip.py 2026-01-03 01:11:51 +01:00
Ethanfel 345823747b Update tab_timeline.py 2026-01-03 01:09:57 +01:00
Ethanfel e798d50851 Update tab_timeline_wip.py 2026-01-03 01:06:36 +01:00
Ethanfel 373242b1a0 Update app.py 2026-01-03 01:06:02 +01:00
Ethanfel 068ee9aeed Update tab_timeline.py 2026-01-03 01:00:51 +01:00
Ethanfel ab973c6d58 Update history_tree.py 2026-01-03 01:00:35 +01:00
Ethanfel 7198ccd19b Update utils.py 2026-01-02 20:59:31 +01:00
Ethanfel 3ff4a000c1 Update tab_single.py 2026-01-02 20:56:56 +01:00
Ethanfel 607dd193e4 Update app.py 2026-01-02 20:51:39 +01:00
Ethanfel a172fb5b15 Update tab_comfy.py 2026-01-02 20:50:53 +01:00
Ethanfel 7df798ccd1 Update tab_batch.py 2026-01-02 19:15:21 +01:00
Ethanfel 9045bbe636 Update tab_single.py 2026-01-02 19:15:05 +01:00
Ethanfel 39f24e747c Update app.py 2026-01-02 19:14:48 +01:00
Ethanfel 214e07ba19 Update utils.py 2026-01-02 19:14:33 +01:00
Ethanfel 70686b6b3f Update tab_batch.py 2026-01-02 19:11:53 +01:00
Ethanfel 25f8dd471a Update tab_batch.py 2026-01-02 19:09:30 +01:00
Ethanfel d008ba0efb Update tab_single.py 2026-01-02 19:09:03 +01:00
Ethanfel 54358f5ec5 Update app.py 2026-01-02 19:08:41 +01:00
Ethanfel 05c7b0fa14 Update utils.py 2026-01-02 19:07:14 +01:00
Ethanfel d67efd353f Update utils.py 2026-01-02 18:18:47 +01:00
Ethanfel 8fbc9f402c Update utils.py 2026-01-02 18:16:40 +01:00
Ethanfel 1b6479bbb0 Update tab_comfy.py 2026-01-02 18:16:23 +01:00
Ethanfel 1c14418425 Update tab_comfy.py 2026-01-02 18:12:02 +01:00
Ethanfel f80a9746c7 Update app.py 2026-01-02 18:02:15 +01:00
Ethanfel a5f3806f9a Create tab_comfy.py 2026-01-02 18:00:52 +01:00
Ethanfel a8d4576dda Update README.md 2026-01-02 17:50:16 +01:00
Ethanfel 87615b320f Update README.md 2026-01-02 17:49:37 +01:00
Ethanfel e2ebca0f32 Update README.md 2026-01-02 17:47:20 +01:00
Ethanfel a8e170a336 Update my-Comfyui-Json-Manager.xml 2026-01-02 17:31:35 +01:00
Ethanfel cde768e5f4 Update app.py 2026-01-02 16:17:25 +01:00
Ethanfel 295cbbca52 Create tab_timeline_wip.py 2026-01-02 16:13:42 +01:00
Ethanfel ea2d06289c Update tab_timeline.py 2026-01-02 16:11:29 +01:00
Ethanfel e26448b7ad Update tab_timeline.py 2026-01-02 16:09:49 +01:00
Ethanfel 08955b2e0c Update history_tree.py 2026-01-02 16:09:33 +01:00
Ethanfel 14aabb49ce Update tab_timeline.py 2026-01-02 16:05:43 +01:00
Ethanfel 5b319e6ba7 Update tab_timeline.py 2026-01-02 16:01:09 +01:00
Ethanfel f8b10a3a71 Update tab_timeline.py 2026-01-02 13:39:00 +01:00
Ethanfel 8f4f049fb8 Update history_tree.py 2026-01-02 13:34:50 +01:00
Ethanfel 943f964f9b Update history_tree.py 2026-01-02 13:33:04 +01:00
Ethanfel 244f0f44d7 Update history_tree.py 2026-01-02 13:29:37 +01:00
Ethanfel af174839e8 Update tab_batch.py 2026-01-02 13:26:57 +01:00
Ethanfel e5db5a5b55 Update tab_timeline.py 2026-01-02 13:26:32 +01:00
Ethanfel adccd601a5 Update history_tree.py 2026-01-02 13:25:53 +01:00
Ethanfel ea64726c24 Update tab_timeline.py 2026-01-02 13:22:03 +01:00
Ethanfel cbe2355ef6 Update tab_batch.py 2026-01-02 13:16:17 +01:00
Ethanfel 33d775e751 Update app.py 2026-01-02 13:15:50 +01:00
Ethanfel 88c22d583f Update app.py 2026-01-02 13:13:56 +01:00
Ethanfel fadc1e5c47 Create tab_timeline.py 2026-01-02 13:13:37 +01:00
Ethanfel fe5abd6eb5 Create history_tree.py 2026-01-02 13:13:11 +01:00
Ethanfel 6b4079176d Delete history_tree.py 2026-01-02 01:26:35 +01:00
Ethanfel 5ff9a7f0ff Fix formatting in render_batch_processor call 2026-01-02 01:26:17 +01:00
Ethanfel b89c5448a7 Refactor batch sequence UI and add randomness 2026-01-02 01:25:46 +01:00
Ethanfel a766d7ec98 Refactor single editor UI and logic
Refactor single editor UI and logic for better clarity and functionality. Update button labels, streamline custom parameters handling, and remove unused imports.
2026-01-02 01:25:24 +01:00
Ethanfel 7a439992ff Refactor utils.py by removing old comments
Removed unnecessary comments and cleaned up code.
2026-01-02 01:25:04 +01:00
Ethanfel 33d7321809 Integrate Graphviz for history tree visualization
Added Graphviz integration for history tree visualization and improved comments for clarity.
2026-01-02 01:19:41 +01:00
Ethanfel 726430ba90 Enhance comments for migration logic in load function
Added comments to clarify migration handling in load function.
2026-01-02 01:17:47 +01:00
Ethanfel c1ec676e2e Implement HistoryTree class for version control 2026-01-02 01:16:23 +01:00
Ethanfel 9ba9db55c6 Refactor JSON loader classes for better structure 2026-01-02 01:08:39 +01:00
Ethanfel 39f4e7d96f Refactor sequence management and UI updates
Refactor sequence handling and UI elements in Streamlit app. Update custom parameters section and improve user experience.
2026-01-02 01:02:35 +01:00
Ethanfel ceb9b86425 Refactor LoRA keys and improve custom parameters logic 2026-01-02 01:01:56 +01:00