Drive the drop-target border radius from --image-drop-radius, enlarge the
overlay radius, and widen the composer editor padding.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a VisualAnnotationPanel letting users mark regions on an image (brush,
circle, rectangle, cross) with per-mark edit instructions, composited into
an annotation guide image. The new "visual-annotation" node action sends
the unmarked source plus the annotated guide to the image model, editing
only numbered regions. Server validates the annotation image/instructions
and threads them through the generator task.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add an ImageDropOverlay component and useImageDropTarget hook that let
users drop an image onto the home prompt card or canvas agent composer to
upload it as a reference, with a localized drop overlay.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Track authenticated sessions per device (parsing user-agent for desktop
vs mobile via mileusna/useragent), enforce configurable concurrent device
limits (Auth.DeviceLimits), and surface device status and "remove other
devices" management in the account dialog. Adds device/session context to
the auth module stores and exposes limits through the API.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Track agent history loading in the workspace and render a spinner with a
localized "loading conversation history" message in the assistant feed,
so the empty state no longer flashes before history resolves.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Condense the settings-chip summary to quality, ratio, and image count
(dropping resolution and pixel size), wrap the label in an ellipsized
span, and swap the up/down chevron for a single rotating ChevronDown
across the canvas agent and image generator composers.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Render a CanvasAgentEmptyState in the Agent panel that fetches localized
starter content from the new agent-starters endpoint, with local defaults
as fallback. Clicking a starter focuses the prompt composer (new focus
handle). Includes accompanying UI polish: side-nav cleanup, animated
prompt examples, and canvas panel spacing tweaks.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a brand kit domain model, repository, and dedicated page/route for
managing brand kits, plus a BrandKitSelector used on the home page and
canvas workspace. Home project creation and the workspace can attach a
brand kit to a project, with new i18n strings and a side-nav entry.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Introduce sm/md/lg sizes on the Switch component driven by CSS custom
properties, move switch styling into a dedicated switch.css, and remove
the duplicated overrides from styles.css and ToolbarCustomizeDialog.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Move PSD generation off the server. The image-generation API only
produces raster formats, so drop the PSD request path, the oov/psd
decoder, and the LayeredDocumentGenerator wiring. Layer separation now
returns clean background, foreground, and text_render_data artifacts
into a transparent frame.
Export that frame (or any image node) as PSD from the canvas context
menu: ag-psd assembles layers, rotation/flip, opacity, editable text,
and stroke effects from the current canvas state at download time.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the ratio-baked size presets with a resolution tier (1K/2K/4K) plus
ratio selection and normalized dimensions, send imageQuality/imageCount to
the agent, and add the output_format field to GeneratorTaskInputArgs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Render and manage the separated layers produced by the edit-elements
action as a manual-frame container with attached image and text
children.
- canvasNodeOps: frame container/child helpers, render ordering,
auto-attach nodes to containing frames, and layer reordering
- CanvasWorkspace wires frame-aware selection, drag, resize, hide/lock,
and layer reorder through the new ops
- CanvasPanels: expandable layer tree with rename/reorder
- designGateway.submitGeneratorTask + GeneratorTaskSubmitResponse and
bbox/generator_name artifact metadata in the domain
- ArtboardPreview shows a working state for generating frame layers
- i18n: expandLayer / renameLayer / layerTitlePlaceholder; styles
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Switch the editable selection title from onDoubleClick to onClick so
renaming a node/layer title begins with a single click.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Thread a translate function through friendlyAgentErrorMessage/
friendlyProjectFailureMessage and move the hard-coded zh-CN error copy
into the i18n locale files (with a zh-CN fallback map). Generation
stream failures now report through a toast via showGenerationError in
addition to setError, so the removed inline .panel-error footer is
gone.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Reduce polling pressure on the generator task status endpoint by raising
the client poll interval from 3s to 5s.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Compact the floating composer with an auto-resizing prompt editor and a
scrollable settings popover, add a titled settings panel, and show the
resolved image size in the settings summary. Add the imageCountLabel
string for the count section.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Persist each image-generator node's target resolution in metadata and
surface it in the selection frame and node preview. Place new generators
without overlapping existing ones, keep local draft generators when a
compressed snapshot omits them, and add a dedicated selection-frame
variant plus scale-aware preview styling.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Track image-generator streams in a keyed Map/Set instead of a single ref
so several placeholders can generate at once without cancelling each
other. Generating state is derived from the number of open streams.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Use the user-visible contents (without injected image-mode settings) for the
optimistic agent messages so the settings blob is not echoed in the thread.
Widen the composer settings chip to 150px so longer labels are not clipped.
Also picks up regenerated next-env.d.ts and tsbuildinfo.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Authenticate requests solely from the Authorization: Bearer header on the
server; stop accepting the legacy `token` header and `usertoken` cookie.
The frontend no longer sets auth cookies (only clears legacy ones), omits
credentials on all requests, and drops the redundant `token` header. Project
event SSE now streams over fetch so it can carry the Authorization header,
which EventSource cannot.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add canva/canda-compatible routes for lightweight project open/save and
agent thread history:
- POST /canva/project/queryProject, saveProject
- POST /canva/agent/queryAgentLastThread, agentThreadList
- GET /canda/chat-history, /canda/thread/status
Canvas save now accepts a compressed SHAKKERDATA:// snapshot payload,
preserves connections, and returns a SaveProject response; blank
successful image nodes are backfilled from generated artifacts. Frontend
designGateway adopts the new save/query flow.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Loosen the creative agent guidance so emoji are used only as sparse
category markers rather than forced on every list item, and tighten the
frontend emoji section-break normalization to only split before short
labelled headings.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a useTypewriterText hook that reveals streamed content character by
character and reconciles when the target text changes. Apply it to
markdown content and agent step copy, with a blinking caret while
streaming.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Widen the assistant panel via a shared CSS variable, overlay it below
1180px, and add mobile breakpoints for the topbar, canvas controls,
toolbar, minimap, and bottom-sheet assistant panel. Use dvh units and
safe-area insets for mobile viewports.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Track the assistant feed scroll position and footer height, and show a
floating button to jump back to the newest message when scrolled up.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Move the inline 404 component and its styles out of App.tsx into a
dedicated NotFoundPage module, and localize its copy via i18n keys.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Resolve routes from pathname (and legacy hash), add a notFound route with
a dedicated 404 page, and show a blurred workspace preview for
unauthenticated project visits. Wire up Next.js app-router entry files and
listen for popstate so history navigation updates the route.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add friendlyAgentErrors to map raw agent/image errors to user-facing
copy, and use it for timeline error bubbles and project failure banners.
Redirect home with a toast when a project returns 403/404 instead of
showing a generic error, and render the final agent response inline under
skill progress.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Give the image client a configurable ResponseHeaderTimeout (default 4m,
capped at the overall timeout) so a stalled upstream fails fast, and
retry such timeouts when an idempotency key is set so a slow-but-safe
request can recover instead of terminating. Raise the Next.js API proxy
maxDuration to 1200s to accommodate long generations.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Drop the disabled video/3D model tabs from the composer and home model
picker, reword storyboard/campaign copy away from motion/video toward
static campaign frames, ease the home prompt editor font sizing, and
update the deterministic fallback message to describe image generation
and editing instead of "video not yet supported".
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Render generated artifacts with a native <img> at their true aspect
ratio instead of a background-image fill, and add a hover/focus download
button that fetches the blob (falling back to a direct link) and saves
it with a sanitized, extension-aware filename.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Move the large in-code zh-CN/en-US dictionaries out of i18n.tsx and
import them from locales/*.json, shrinking the module and making
translations easier to edit.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Cycle through localized example prompts with a typing/deleting animation
in the home composer placeholder, start the field empty instead of with
a default prompt, and style the home editor with larger prompt text.
Also rebrand the device-management copy from Lovart to Moteva.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Propagate an optional imageName through the agent content pipeline
(frontend types → API → domain → prompt building) so reference images
render with their name instead of a bare "image" label.
Also switch PromptComposer to submit on plain Enter (Shift+Enter for
newline, IME-safe) and add a submitDisabled guard wired from the canvas
and home composers.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Render reference thumbnails and generated images as background-image spans
instead of <img> so they no longer produce drag ghosts or interfere with
text selection. Open the hover preview after a short delay, dismiss it on
text selection, pointer-down, and drag start, and open the full image via
click instead of an anchor.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a shared visiblePromptText helper and strip reference tokens,
image-generator directives, and model-selection lines from agent thread
summaries and the assistant panel header, so titles show the user's
actual prompt instead of internal directives. Covered by a server test.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the internal single-node clipboard with real clipboard paste:
the prompt composer uploads pasted image files as references, and the
canvas pastes clipboard images as nodes and clipboard text as text
nodes anchored at the pointer, reading from the async clipboard API on
the context-menu paste action.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Skip WebP re-encoding for PNG/AVIF/BMP uploads and any bitmap that
actually contains alpha, tag transparency-capable canvas uploads with
the transparent-image tone, and detect alpha in merged layers so the
composed node keeps a transparent tone.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>