Releases: BitMind-AI/bitmind-subnet
Release 4.4.0
Summary
- Fix generator reward logic for sharper penalties when generative miners stop responding to queries
- Improve media format detection with proper ftyp-based MP4 detection and support for additional formats
- Fix file format handling - detect actual format from magic bytes instead of hardcoding extensions/content-types
- Add dynamic escrow address fetching from the API with fallback to defaults
- Add prompt modality tracking to ensure prompts are matched to their intended modality
- Add prompt cache cleanup to delete prompts after use, preventing unbounded cache growth
- Add detailed error responses for generative callback failures so miners can debug issues
- Add webhook stats tracking for miners to monitor success/failure rates per validator
- Add C2PA verification CLI for testing C2PA credentials on local files
- Remove LocalService from registry (since it doesn't produce C2PA-signed content)
Changes
Generator Miner Rewards Fix
- Fixed bug where
include_all=Truewas double-counting already-rewarded media in verification stats - Changed reward eligibility from union to intersection: miners must now have both local verified submissions and benchmark results to receive rewards
- Changed base reward default from
1e-4to0for generators without verified submissions - Increased EMA alpha from
0.2to0.5for more aggressive score decay on inactive miners - Added hard cutoff to zero out scores for generators not active within the liveness window
Media Format Detection (#311)
- Fixed MP4 detection by checking for
ftypat offset 4 instead of hardcoded box sizes - Consolidated all ftyp-based format detection to fix unreachable M4A code path
- Added support for new image formats: HEIC/HEIF, AVIF, GIF, BMP, TIFF
- Added support for new video formats: MOV, 3GP, AVI
- Added support for audio formats: MP3, WAV, FLAC, OGG, M4A
- Added length checks to prevent index errors on short data
- Improved JPEG detection with 3-byte signature
Dynamic Escrow Addresses (#322)
- Added new
get_escrow_addresses()function to fetch escrow addresses from the gas-api to provide the option to punish weight copiers. - Validators now dynamically fetch
video_escrow,image_escrow, andaudio_escrowaddresses - Escrow address eligibility based validators provably running latest SN code.
Prompt Modality Support
- Added
modalitycolumn to prompts table (image,video,audio) - Database migration automatically adds column to existing installations
- Fixed database migration order to prevent "no such column: modality" errors on existing databases
- Prompts are now stored with their intended modality when generated
- Challenge manager selects modality first, then samples matching prompts
Prompt Cache Cleanup
- Fixed
removeparameter in prompt sampling to actually delete prompts instead of just incrementingused_count - Added
min_prompts_threshold(default 100) to prevent running out of prompts - Enabled prompt cleanup in generative challenge manager - prompts are now deleted after use (if enough remain)
Generative Callback Error Responses
- Miners now receive detailed error messages when their submissions are rejected:
400 - Empty binary payloadfor empty uploads400 - Corrupted or unreadable mediafor invalid media files400 - Duplicate content detectedfor perceptual hash matches400 - C2PA verification failed: no C2PA manifestfor missing credentials400 - C2PA verification failed: untrusted issuerfor non-trusted sources
- Previously, all validation failures returned
200 OKsilently, making it impossible for miners to debug issues - Made
c2paa hard dependency - removed conditionalC2PA_AVAILABLEchecks - Cleaned up inline imports, moved all imports to module scope
Miner Webhook Stats Tracking
- Added
WebhookStatsTrackerto track webhook success/failure rates per validator IP - Stats are persisted to
~/.bitmind/webhook_stats.jsonand survive restarts - Automatic behaviors:
- Saves to disk every 60 seconds (debounced to avoid excessive I/O)
- Prints summary to logs every 5 minutes
- Daily rotation at midnight - archives to
webhook_stats_archive/webhook_stats_YYYY-MM-DD.json - Auto-cleanup of archives older than 7 days
- Failure types are categorized:
empty_payload- validator received empty dataconnection_timeout- connection timed outconnection_error- network/connection issueshttp_400,http_401,http_404,http_500- HTTP status codes
- Helper functions available:
print_webhook_stats()- print summary to logsget_webhook_stats_json()- get stats as dictreset_webhook_stats()- clear all stats
LocalService Removed from Service Registry
- LocalService (local Stable Diffusion/AnimateDiff) removed from
SERVICE_MAP - Reason: LocalService doesn't produce C2PA-signed content, which validators now require
- The service class remains in the codebase for potential future use
- Valid services are now:
openai,openrouter,stabilityai, ornone - If no valid service is configured for a modality, requests for that modality will be rejected
- Miners still free to generate whatever
C2PA Verification CLI
- Added
gascli generator verify-c2pa(standalone helper script atneurons/generator/helper/verify_c2pa.py) command for gen miners to test local files for C2PA credentials - Useful for miners to verify their generated content has valid C2PA before sending to validators
- Supports
--verbosefor detailed output and--jsonfor machine-readable output
Release 4.3.0
This release introduces c2pa verification for miner submissions (+ the relevant support on the generative miner side), an upgraded prompt generation pipeline, and fixes for weight normalization in the validator.
Generative Miner Data Verification
New modules in gas/verification/:
-
c2pa_verification.py: Validates C2PA content credentials from miner-submitted media. Checks that content originates from trusted AI generators (OpenAI, Google, Adobe, Microsoft, Stability AI, Midjourney, Anthropic). Content without valid C2PA from trusted issuers is rejected. -
duplicate_detection.py: Implements perceptual hashing (pHash) for images and frame-based hashing for videos. Includes crop-resistant hash segments. Configurable Hamming distance threshold (default: 8) for near-duplicate matching.
Miner Service Configuration
- Added
IMAGE_SERVICEandVIDEO_SERVICEenvironment variables to specify which generation service to use per modality - Valid options:
openai,openrouter,local,none - Setting
nonedisables that modality entirely - Prevents loading unnecessary local models when using API services
- Conditional model loading based on configured services
Prompt Generation Pipeline
- Replaced BLIP-2 with Qwen2.5-VL-3B-Instruct for image annotation
- Optional flash attention support for faster inference
- New modules for model-specific prompt styles (
model_prompt_styles.py) and prompt modifiers (prompt_modifiers.py) - Increased max token output from 20 to 256 for richer descriptions
Challenge Manager Improvements
- Pre-storage validation rejects: duplicate content, content without valid C2PA, corrupted/unreadable media
- Duplicate checks now scoped to same prompt ID to reduce overhead
- Only validated content is stored and eligible for HuggingFace upload
Service Improvements
- C2PA metadata preservation in OpenRouter and OpenAI services
- Option to save generated media locally (
MINER_SAVE_LOCALLY) - Default model changed to nanobanana pro for OpenRouter
Validator Weight Normalization Fix
- Fixed burn rate calculation by excluding special UIDs (burn, image escrow, video escrow) from weight normalization (previously burning more than .7)
- Added null check for empty generator rewards
- Added logging for actual vs target burn rate verification
Dependencies
- Added:
c2pa-python>=0.25.0,imagehash>=4.3.1,qwen-vl-utils>=0.0.14 - Updated:
async-substrate-interface>=1.5.1 - Optional:
flash-attn>=2.7.0(commented, for manual installation)
Breaking Changes
- For now, miners must now produce content with valid C2PA credentials from trusted AI generators.
- Duplicate submissions within the same prompt are rejected
- Until we harden verification of open source model outputs, miners using local generation without C2PA embedding will have submissions rejected
- Current services supported in c2pa checks:
OpenAI
Google
Adobe
Microsoft
Meta
Shutterstock
Canva
Runway
Stability AI
Pika Labs
Reach out to the BitMind team if there are more services you'd like to have supported.
Release 4.2.0
Release 4.1.7
Bugfix: Need to use the union of generator uids present in verification stats and fool rate stats to set weights for new generative miners
Release 4.1.6
Improved generative miner time-to-incentive and score stability.
Release 4.1.4
Burn off, generator rewards on, discriminator WTA split into image and video winners
Release 4.1.3
- Fix for miner type tracking to pick up new generative miners quickly
- Optional external callback port mapping for validator webhook server
- Support for application/octet-stream on validator webhook server
- Fix for bug in generative miner service discovery that lead to OpenRouter being selected as the default even when no API key was supplied
Release 4.1.0
- Generative Miner functionality
- WTA Benchmark for discriminators
Release 4.0.12
Fix for W&B artifact logging, caused by improperly expecting JSON metadata files rather than a metadata dict extracted from the validator's sqlite db.
Release 4.0.11
New Model
WAN2.2 TI2V: https://huggingface.co/Wan-AI/Wan2.2-TI2V-5B-Diffusers
New Datasets
AI Generated videos from various tools: https://huggingface.co/datasets/bitmind/aislop-videos
GPT-4o images: https://huggingface.co/datasets/Yejy53/Echo-4o-Image