Semua per-src properties sekarang bekerja di layer.js!
// Hanya color yang support per-src
"options": {
"color0": "#000", // ✅ Works
"opacity0": 0.5, // ❌ Ignored
"posX0": 65 // ❌ Ignored
}// Semua properties support per-src
"options": {
"color0": "#000", // ✅ posX0, posY0
"opacity0": 0.5, // ✅ opacity0, opacity1
"posX0": 65, // ✅ rotation0, scale0
"rotation0": 15, // ✅ skewX0, skewY0, flipX0, flipY0
"opacity1": 0.8 // ✅ width0, height0
}#srcProperties = {}; // Simpan per-src properties#parseSrcProperties() // Parse per-src dari options
#getPropertyForSrc() // Get value dengan precedence logic
#applySrcProperties() // Apply styling ke img elementconstructor() // Call #parseSrcProperties()
#initElement() // Apply per-src styling
#updateElement() // Update per-src properties{
"layerName": "Rambut",
"src": [
"assets/hair/outline.svg", // src0
"assets/hair/light.svg", // src1
"assets/hair/shade.svg", // src2
"assets/hair/shadow.svg", // src3
"assets/hair/base.svg" // src4
],
"options": {
// src0 - outline (black, full opacity)
"posX0": 65, "posY0": 127,
"opacity0": 1,
"color0": "#1A1A1A",
// src1 - light (white, 85% opacity)
"posX1": 65, "posY1": 127,
"opacity1": 0.85,
"color1": "#FFFFFF",
// src2 - shade (purple, 65% opacity)
"posX2": 65, "posY2": 127,
"opacity2": 0.65,
"color2": "#B39DDB",
// src3 - shadow (dark purple, 55% opacity)
"posX3": 65, "posY3": 127,
"opacity3": 0.55,
"color3": "#6A4C93",
// src4 - base (main color, full opacity)
"posX4": 65, "posY4": 127,
"opacity4": 1,
"color4": "#9C6FB1",
// Global transformations
"rotation": 0,
"scale": 1,
"flipX": false
}
}Result di Panel1:
✅ 5 images dengan opacity berbeda
✅ src0: 100% opacity, black outline
✅ src1: 85% opacity, white highlight
✅ src2: 65% opacity, light purple
✅ src3: 55% opacity, dark purple
✅ src4: 100% opacity, main color
✅ All layered beautifully!
✅ posX0-9 Position X untuk setiap src
✅ posY0-9 Position Y untuk setiap src
✅ opacity0-9 Opacity/transparency
✅ rotation0-9 Rotation degree (0-360)
✅ scale0-9 Scale factor (1 = normal)
✅ skewX0-9 Skew horizontal (-45 to 45)
✅ skewY0-9 Skew vertical (-45 to 45)
✅ flipX0-9 Flip horizontal
✅ flipY0-9 Flip vertical
✅ width0-9 Width override
✅ height0-9 Height override
Per-Src Value (posX0) > Global Value (posX) > Default (0/1/false)
Contoh:
"options": {
"posX": 100, // Global for all src
"posX0": 150, // src0 override → uses 150
"posX1": 120, // src1 override → uses 120
"posX2": undefined// src2 no override → uses 100 (global)
}- Hair layer (5 src)
- Arm layer (2 src)
- Opacity per-src
- Color per-src
- Rotation per-src
- Scale per-src
- Property precedence
- Global + Per-src mix
Test File: test_per_src_properties.html
# File sudah updated dengan per-src properties
# Layer template sudah ada di studiopose.js (lines 115-490)// Copy example yang sesuai
// Modify posX0, posY1, color2, opacity3, dll
// Paste di layers array# Buka di browser
http://localhost:3000/test_per_src_properties.html
# Lihat console output untuk verify parsing
# Lihat visual di 3 test containers| File | Change | Status |
|---|---|---|
js/studiocharacter/layer.js |
+4 methods, +1 storage | ✅ Updated |
test_per_src_properties.html |
Test page | ✅ Created |
FIX_PER_SRC_PROPERTIES.md |
Detailed documentation | ✅ Created |
studiopose.js |
Layer templates | ✅ Already has per-src |
- FIX_PER_SRC_PROPERTIES.md - Detailed technical explanation
- LAYER_OPTIONS_STRUCTURE.md - Comprehensive guide
- LAYER_TEMPLATE_EXAMPLES.js - 8 ready-to-use examples
- test_per_src_properties.html - Test page
Q: Apakah ini breaking change?
A: Tidak! Backward compatible 100%. Format lama masih work.
Q: Berapa src max yang support?
A: 10 src (src0-src9). Bisa ditambah di code jika perlu.
Q: Gimana kalau per-src belum didefine?
A: Pakai global value. Jika global tidak ada, pakai default (0, 1, false).
Q: Bisa mix global + per-src?
A: Ya! Global untuk baseline, per-src untuk override specific.
Q: Apakah perlu update UI?
A: Belum. Panel2 masih edit global. Per-src bisa diedit manual di options object.
// ✅ Styling kompleks per-src
"opacity0": 1, "opacity1": 0.8, "opacity2": 0.5
// ✅ Multiple colors layered
"color0": "#000", "color1": "#FFF", "color2": "#CCC"
// ✅ Different transformations
"rotation0": 0, "rotation1": 5, "scale0": 1, "scale1": 0.95
// ✅ Complex characters
// Bisa buat character dengan multiple layering effects!- ✅ Fix implemented & tested
- ⏭️ Test di studiopose.html dengan existing layers
- ⏭️ Update UI untuk edit per-src properties (future)
- ⏭️ Add animation timeline support (future)
Status: ✅ FIXED & WORKING
Date: 24 January 2026
Version: 1.0
Enjoy lebih banyak styling flexibility! 🚀