Conversation
Introduce a lightweight regression testing framework with offline-by-default coverage to reduce feature-change breakage. - Add a new GitHub Actions workflow (`tests.yml`) to run pytest on PRs and pushes to `main` using `uv`. - Document the testing approach in `docs/TESTING.md`, including test layers, principles, and live-test gating. - Update `README.md` with quick-start test commands and explicit opt-in instructions for live provider smoke tests. - Add tests for LLM streaming fallback behavior and guarded live API smoke validation. This establishes deterministic CI checks while keeping real-provider tests optional and local-only.
Add local `.env` auto-loading in `tests/conftest.py` so live-test flags and provider overrides are picked up without manual export steps. Introduce a `--live` pytest option that switches marker selection to `live`, replacing the previous `-o addopts=...` workaround and making live smoke runs simpler and clearer. Update `.env.example`, `README.md`, and `docs/TESTING.md` to document: - explicit opt-in via `FRAMELAB_ENABLE_LIVE_TESTS=1` - optional `TEST_PROVIDER/TEST_MODEL/TEST_BASE_URL/TEST_API_KEY` overrides - the new `uv run pytest --live` command for local live runs
Update `test_analyze_without_media_shows_error` to allow any of several expected validation messages (missing media, API key, or model name) instead of asserting only the missing-media error. This makes the smoke test robust to validation order and differing first-failure paths.
Add offline CI pytest suite and improve testing documentation
Add support for app-level notice badges defined in `config.toml` with a new `[[notices]]` section, and render them centered below the hero content in the UI. Also add notice color normalization with an allowed palette and gray fallback, skip invalid/disabled entries, and support `text`/`label` plus optional `icon` fields. Update the README with configuration examples and behavior notes so users can announce key app updates without changing code.
Update `[[notices]]` entries in `config.toml` to improve user-facing messaging. This revises active notice text/icon/color, adds new disabled news/tip notices, and updates reminders about model prompt compatibility. These changes keep in-app announcements current (Xiaomi/OpenRouter update) and make guidance clearer without enabling all notices by default.
Add configurable hero notices and update messaging in UI
Allow Phase 1 and Phase 2 to run with text-only input by removing the hard requirement to upload reference media. Update uploader labels/captions, spinner text, and transparency preview wording to reflect mixed input modes (text/image/video), and raise documented video support to 30MB in README. This improves UX clarity and enables chat-style use cases without forcing multimodal attachments.
feat(ui): make media uploads optional in both analysis phases
Replace `render_copy_button` with `render_copy_buttons` to show two actions: copying sanitized plain text or raw markdown/as-is content. Update output sections (phase 1/2) to use the new helper, add clearer status messages per action, and adjust layout/height so both buttons render cleanly. This improves UX by letting users choose the copy format they need without losing markdown when desired.
Add options for copying plain text and markdown outputs
Update workflow terminology across UI and documentation from “Initial Analysis/Correction” to “Primary Analysis/Refinement” (including labels like Refinement Notes, Run Refinement, and Refined Analysis). This aligns naming with the current two-phase behavior and makes the refinement loop intent clearer without changing underlying request logic.
Update Streamlit subheaders and thought-process expanders to use Material icon prefixes across Phase 1 and Phase 2 sections. Adjust UI smoke tests to assert the new iconized labels, keeping test expectations aligned with the updated interface and preventing false failures.
Refactor UI terminology and enhance phase headers with icons
Add `en_core_web_sm` as a direct project dependency in `pyproject.toml` using the official wheel URL so the POS model is installed with normal dependency syncs. Update docs and runtime error messages to recommend `uv sync` instead of manual `spacy download` steps, making setup and troubleshooting more reliable and consistent across environments.
fix(deps): bundle spaCy model wheel and sync guidance
* feat(ui): add dialogs to edit phase outputs before reuse Introduce editable dialogs for both Phase 1 and Phase 2 markdown outputs so users can correct or refine generated text without cluttering the main view. - add `PHASE1_EDITED_BY_USER` and `PHASE2_EDITED_BY_USER` state flags - add Submit/Cancel edit dialogs for Phase 1 and Phase 2 outputs - persist submitted edits back into session state output fields - sync edited assistant content into conversation context so downstream refinement uses the updated Phase 1 text - update README to document the new “Edit output” flow and refinement behavior * refactor(ui): extract usage caption builder and compact output actions Extract usage text formatting into `build_usage_caption()` so usage captions can be reused consistently across render paths instead of being tied to a placeholder call. Also reorganize Phase 1 output controls to improve clarity and reduce duplicate UI state: - replace separate usage/copy placeholders with inline columns - show usage caption alongside a compact ✏️ Edit button - append “Edited by user” to the usage caption when applicable - keep copy buttons directly under the output in both restored and streamed states This makes the output area cleaner and keeps usage/edit/copy behavior consistent.
Implement support for uploading one or multiple images/videos in Phase 1 and Phase 2, with per-item media tags (for example `@image1`, `@video1`) that can be edited before send. Update conversation message composition to pair each media item with its adjacent tag text in multi-media mode, while preserving backward-compatible single-media behavior. Also refresh Request Transparency previews, README/CHANGELOG docs, and test coverage to reflect and validate the new tagged multi-media payload flow.
Improve multi-media handling by showing compact thumbnails in the main panel and moving full-size preview + per-item tag editing into a dedicated “Manage media tags” dialog. Persist edited tags using a file signature (name + size + MIME) so tags stay stable when files are added/removed, while new files still get sensible default aliases. Updated README/REFERENCE/CHANGELOG to document the new UX.
Add tagged multi-media uploads and improve tag management
Make the sidebar **System Prompt** textbox the single source of truth for request payloads, matching Initial/Refinement prompt behavior. Switch system preset selection to an explicit **Load** action (instead of implicit override), and set textbox initialization precedence to: config default system preset → selected system preset → `system_prompt.txt`. Also update AGENTS, README, and CHANGELOG to reflect the new UX and precedence rules. This keeps manual edits user-controlled, makes prompt provenance clearer, and aligns prompt handling across all phases.
Add an "Open large editor" action in the sidebar to launch a dedicated System Prompt dialog with apply/cancel controls. The dialog is seeded from the current `system_prompt_text` and applies edits back to session state. Also add a UI smoke test to verify the large editor button initializes `system_prompt_edit_text` from the existing sidebar prompt value, preventing accidental loss of the current prompt when switching editors.
Add `width="large"` to the `Edit System Prompt` Streamlit dialog. This gives more space for long prompt text, reducing wrapping and scrolling while editing.
Set the Phase 1 and Phase 2 Streamlit edit dialogs to use a large width, giving more space for markdown editing and reducing horizontal/vertical scrolling during review.
Enhance System Prompt UI with editable dialog and improved layout
- add `request_logging_enabled` and `request_logs` to session state defaults - refactor streaming calls to build reusable request kwargs for both Responses API and Chat Completions - add attempt-level logging hooks to capture transport, request payload, and response outcome (answer/reasoning/usage/error), including fallbacks - document the new optional session logging feature in README, including JSON download behavior and media base64 omission This improves debugging and transparency across provider/schema mismatches while keeping exported logs smaller and safer to share.
feat: add optional session request logging and JSON export
Document the 2.0.0 release in `CHANGELOG.md`, including text-only mode, multi-media tagging/management UX, output editing, request logging export, configurable notices, and updated test workflow notes. Update `AGENTS.md` to reflect new copy actions (plain text + markdown), session-state keys, optional request logging, and validation checklist items so implementation and QA expectations stay aligned.
- Reworked the README intro to better describe text-only, image, and video workflows, plus streaming and iterative refinement. - Added a new “What You Can Do with FrameLab” section to highlight practical cinematic and creator-focused use cases. - Added a “Build Your Own Prompt System” section documenting editable prompts, custom preset folders, and optional metadata sidecars. - Documented the prompt-first workflow more explicitly in key features. - Updated `pyproject.toml` description to align package metadata with the expanded product scope. This improves onboarding clarity and makes the no-code prompt customization model easier for users to discover and apply.
Condense the README copy to focus on FrameLab’s core value and primary workflow instead of long-form descriptions. - Replaced the verbose intro with a shorter, clearer positioning - Simplified feature documentation into a compact “Why people use FrameLab” section - Highlighted key capabilities (multimodal flow, streaming, editing, copy actions, provider flexibility) for faster scanning and onboarding
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🎉 FrameLab v2.0.0
This is a major workflow and UX upgrade for FrameLab. v2.0 introduces flexible input modes (including text-only), true multi-media handling with editable tagging, richer editing controls, and stronger transparency/testing/documentation support.
✨ Highlights
@imageN/@videoN) is now editable and used in tagged payload composition. (Fix add placeholder information #16)config.toml.--liveand.envloading.🔄 Changes
🛠️ Fixes
en_core_web_smvia dependency wheel and aligning docs arounduv sync. (Fix spacy add download en on uv setup #22)📚 Documentation
Updated:
README.mdAGENTS.mddocs/REFERENCE.mddocs/TESTING.md