fix: normalize pasted image paths and subfolder extraction (Windows-safe, upstream-only)

This commit is contained in:
doubletwisted
2025-08-15 21:45:19 +02:00
parent f91d2d579d
commit 4b513d49c3
2 changed files with 19 additions and 8 deletions
+14 -5
View File
@@ -24,8 +24,17 @@ function convertPathsForPlatform(apiPrompt, targetSeparator) {
if (typeof obj === 'string') {
// Only convert strings that look like file paths
if ((obj.includes('\\') || obj.includes('/')) && isLikelyFilename(obj)) {
// Replace any path separator with the target one
return obj.replace(/[\\\/]/g, targetSeparator);
const trimmed = obj.trim();
const hasDrive = /^[A-Za-z]:\\\\|^[A-Za-z]:\//.test(trimmed);
const isAbsolute = trimmed.startsWith('/') || trimmed.startsWith('\\\\');
const hasProtocol = /^\w+:\/\//.test(trimmed);
// Preserve annotated relative paths (e.g., "pasted/image.png") as forward slashes
if (!hasDrive && !isAbsolute && !hasProtocol) {
return trimmed.replace(/\\/g, '/');
}
// Replace any path separator with the worker's target separator otherwise
return trimmed.replace(/[\\\/]/g, targetSeparator);
}
return obj;
} else if (Array.isArray(obj)) {
@@ -507,9 +516,9 @@ export async function uploadImagesToWorker(extension, workerUrl, images) {
let cleanName = imageData.name;
let subfolder = '';
// Extract subfolder if present
if (cleanName.includes('/')) {
const parts = cleanName.split('/');
// Extract subfolder if present (handle both slash styles)
if (cleanName.includes('/') || cleanName.includes('\\')) {
const parts = cleanName.replace(/\\/g, '/').split('/');
subfolder = parts.slice(0, -1).join('/');
cleanName = parts[parts.length - 1];
}
+5 -3
View File
@@ -105,13 +105,15 @@ export function findImageReferences(extension, apiPrompt) {
if (typeof mediaValue === 'string') {
// Clean special suffixes like [input] or [output]
const cleanValue = mediaValue.replace(/\s*\[\w+\]$/, '').trim();
if (imageExtensions.test(cleanValue)) {
images.set(cleanValue, {
// Normalize to forward slashes so subfolder/filename derivation is consistent on Windows
const normalizedValue = cleanValue.replace(/\\/g, '/');
if (imageExtensions.test(normalizedValue)) {
images.set(normalizedValue, {
nodeId,
nodeType: node.class_type,
inputName: 'image' // Keep as 'image' for compatibility
});
extension.log(`Found media reference: ${cleanValue} in node ${nodeId} (${node.class_type})`, "debug");
extension.log(`Found media reference: ${normalizedValue} in node ${nodeId} (${node.class_type})`, "debug");
}
}
}