feat: add v2 character card import/export

- Expanded Character struct with all v2 spec fields (description, scenario, mes_example, post_history_instructions, alternate_greetings, character_book, tags, creator, character_version, creator_notes, extensions)
- Created CharacterCardV2 serialization structs following spec at github.com/malfoyslastname/character-card-spec-v2
- Implemented PNG metadata utilities:
  * read_character_card_from_png() - extracts and decodes character data from PNG tEXt chunks
  * write_character_card_to_png() - embeds character data into PNG files
  * create_placeholder_png() - generates gradient placeholder images for avatarless characters
- Added Tauri commands:
  * import_character_card - opens file picker, imports PNG with automatic name conflict handling
  * export_character_card - exports character as v2 PNG card with embedded metadata
- Added Import/Export buttons to character settings UI
- Full backward compatibility with existing characters using serde defaults
- Added dependencies: png 0.17, base64 0.21, image 0.24
This commit is contained in:
2025-10-14 08:19:57 -07:00
parent f82ec6f6a8
commit f31e3fb28a
6 changed files with 632 additions and 3 deletions

View File

@@ -191,7 +191,20 @@
</button>
<button type="button" id="delete-character-btn" class="btn-danger">
Delete Character
</button> </form>
</button>
<div class="form-group" style="margin-top: 1rem; padding-top: 1rem; border-top: 1px solid var(--border-color);">
<label>Character Card Import/Export</label>
<div style="display: flex; gap: 0.5rem;">
<button type="button" id="import-character-btn" class="btn-secondary" style="flex: 1;">
Import v2 Card
</button>
<button type="button" id="export-character-btn" class="btn-secondary" style="flex: 1;">
Export v2 Card
</button>
</div>
</div>
</form>
</div>
</div>