Add per-channel hybrid audio spread spectrum and env feature toggles
Spread spectrum v2: independent per-channel embedding with round-robin bit distribution, preserving spatial stereo/surround mix. Adaptive chip tiers (256/512/1024) trade capacity for lossy codec robustness. LFE channel skipped for 5.1+ layouts. v2 header (20B) with backward- compatible v0 decode fallback. Environment toggles (STEGASOO_AUDIO, STEGASOO_VIDEO) gate audio/video features for minimal builds (e.g. Raspberry Pi image-only). Values: auto (default, detect deps), 1/true (force on), 0/false (force off). Web UI fixes: accordion defaults to step 1 on load, chevron arrow styling, required attribute toggling for audio carrier type switch, "Images & Mode" renamed to "Reference, Carrier, Mode". Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -95,7 +95,16 @@ const Stegasoo = {
|
||||
if (!isPayloadZone && !isQrZone) {
|
||||
input.addEventListener('change', function() {
|
||||
if (this.files && this.files[0]) {
|
||||
Stegasoo.showImagePreview(this.files[0], preview, label, zone);
|
||||
const file = this.files[0];
|
||||
if (file.type.startsWith('image/') && preview) {
|
||||
Stegasoo.showImagePreview(file, preview, label, zone);
|
||||
} else if (file.type.startsWith('audio/') || !file.type.startsWith('image/')) {
|
||||
// Audio or non-image files: show file info instead of image preview
|
||||
Stegasoo.showAudioFileInfo(file, zone);
|
||||
if (label) {
|
||||
label.classList.add('d-none');
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -153,7 +162,21 @@ const Stegasoo = {
|
||||
};
|
||||
reader.readAsDataURL(file);
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Format audio file info for display in drop zones (v4.3.0)
|
||||
*/
|
||||
showAudioFileInfo(file, zone) {
|
||||
const filenameEl = zone.querySelector('.pixel-data-filename span, .scan-data-filename span');
|
||||
const sizeEl = zone.querySelector('.pixel-data-value, .scan-data-value');
|
||||
if (filenameEl) filenameEl.textContent = file.name;
|
||||
if (sizeEl) {
|
||||
const kb = file.size / 1024;
|
||||
sizeEl.textContent = kb >= 1024 ? (kb / 1024).toFixed(1) + ' MB' : kb.toFixed(1) + ' KB';
|
||||
}
|
||||
zone.classList.add('has-file');
|
||||
},
|
||||
|
||||
// ========================================================================
|
||||
// REFERENCE PHOTO SCAN ANIMATION
|
||||
// ========================================================================
|
||||
@@ -1036,6 +1059,10 @@ const Stegasoo = {
|
||||
'saving': 'Saving image...',
|
||||
'finalizing': 'Finalizing...',
|
||||
'complete': 'Complete!',
|
||||
// Audio encode phases (v4.3.0)
|
||||
'audio_transcoding': 'Transcoding audio...',
|
||||
'audio_embedding': 'Embedding in audio...',
|
||||
'spread_embedding': 'Spread spectrum embedding...',
|
||||
};
|
||||
return phases[phase] || phase;
|
||||
},
|
||||
@@ -1252,6 +1279,10 @@ const Stegasoo = {
|
||||
'verifying': 'Verifying...',
|
||||
'finalizing': 'Finalizing...',
|
||||
'complete': 'Complete!',
|
||||
// Audio decode phases (v4.3.0)
|
||||
'audio_transcoding': 'Transcoding audio...',
|
||||
'audio_extracting': 'Extracting from audio...',
|
||||
'spread_extracting': 'Spread spectrum extracting...',
|
||||
};
|
||||
return phases[phase] || phase;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user