diff --git a/frontend/apps/artcraft-webapp/src/components/topbar/topbar.tsx b/frontend/apps/artcraft-webapp/src/components/topbar/topbar.tsx index 701402e363..b9091faf18 100644 --- a/frontend/apps/artcraft-webapp/src/components/topbar/topbar.tsx +++ b/frontend/apps/artcraft-webapp/src/components/topbar/topbar.tsx @@ -20,8 +20,8 @@ export function TopBar() { const showViewToggle = !isMobile && GALLERY_VIEW_ROUTES.has(pathname); // Playing/still video previews only matter where the feed has videos. const showAutoplayToggle = showViewToggle && pathname === "/create-video"; - // Multi-select + batch download is wired up on the video feed only for now. - const showSelectToggle = showViewToggle && pathname === "/create-video"; + // Multi-select + batch download on the create feeds (image + video). + const showSelectToggle = showViewToggle; return (
diff --git a/frontend/apps/artcraft-webapp/src/lib/download-media-zip.ts b/frontend/apps/artcraft-webapp/src/lib/download-media-zip.ts index 1c729c415a..3ece00884d 100644 --- a/frontend/apps/artcraft-webapp/src/lib/download-media-zip.ts +++ b/frontend/apps/artcraft-webapp/src/lib/download-media-zip.ts @@ -68,7 +68,7 @@ export async function downloadItemsAsZip( if (succeeded > 0) { // Media files are already compressed — STORE skips pointless deflate work. const blob = await zip.generateAsync({ type: "blob", compression: "STORE" }); - saveBlob(blob, `artcraft-videos-${Date.now()}.zip`); + saveBlob(blob, `artcraft-media-${Date.now()}.zip`); } return { succeeded, failed }; diff --git a/frontend/apps/artcraft-webapp/src/pages/create-image/create-image.tsx b/frontend/apps/artcraft-webapp/src/pages/create-image/create-image.tsx index abfbda6f4b..ad33091cb5 100644 --- a/frontend/apps/artcraft-webapp/src/pages/create-image/create-image.tsx +++ b/frontend/apps/artcraft-webapp/src/pages/create-image/create-image.tsx @@ -611,6 +611,7 @@ export default function CreateImage() { description="Generate stunning AI images with ArtCraft" authChecked={authChecked} hasContent={hasContent} + showSelectToggle emptyStateTitle="Create Image" emptyStateSubtitle="Describe anything. See it in seconds." emptyStateCta={ @@ -643,6 +644,8 @@ export default function CreateImage() { onLoadMore={gallery.loadMore} onGalleryItemClick={lightbox.handleGalleryItemClick} enableMakeVideo + selectable + selectionBarBottomOffset={promptHeight + 24} /> } promptBox={ diff --git a/frontend/apps/artcraft/app/src/components/signaled/TopBar/TopBar.tsx b/frontend/apps/artcraft/app/src/components/signaled/TopBar/TopBar.tsx index 9a68995a11..9ff0a48325 100644 --- a/frontend/apps/artcraft/app/src/components/signaled/TopBar/TopBar.tsx +++ b/frontend/apps/artcraft/app/src/components/signaled/TopBar/TopBar.tsx @@ -515,7 +515,8 @@ export const TopBar = ({ pageName }: Props) => {
- {tabStore.activeTabId === "VIDEO" && } + {(tabStore.activeTabId === "IMAGE" || + tabStore.activeTabId === "VIDEO") && } {tabStore.activeTabId === "VIDEO" && } {(tabStore.activeTabId === "IMAGE" || tabStore.activeTabId === "VIDEO" || diff --git a/frontend/apps/artcraft/app/src/pages/PageImage/TextToImage.tsx b/frontend/apps/artcraft/app/src/pages/PageImage/TextToImage.tsx index c645297783..b65c88ab25 100644 --- a/frontend/apps/artcraft/app/src/pages/PageImage/TextToImage.tsx +++ b/frontend/apps/artcraft/app/src/pages/PageImage/TextToImage.tsx @@ -170,6 +170,8 @@ const TextToImage = ({ imageMediaId, imageUrl }: TextToImageProps) => { onLoadMore={gallery.loadMore} onGalleryItemClick={openInLightbox} enableMakeVideo + selectable + selectionBarBottomOffset={promptHeight + 32} /> } promptBox={