"""Offline one-request VoxCPM2 worker. Never persists prompt text or logs media.""" import contextlib,json,sys from pathlib import Path def main(): root=Path(sys.argv[1]);request=json.loads(sys.stdin.read());phase='Modell laden' try: # Libraries print progress and occasionally text; discard rather than record it. with open('/dev/null','w') as sink,contextlib.redirect_stdout(sink),contextlib.redirect_stderr(sink): import torch,soundfile as sf from voxcpm import VoxCPM model=VoxCPM.from_pretrained(str(root/'model'),load_denoiser=False,local_files_only=True,optimize=False,device='cuda:0') (root/'phase').write_text('Stimme wird erzeugt');phase='Stimme erzeugen' wave=model.generate(text=request['text'],reference_wav_path=str(root/'reference.wav') if (root/'reference.wav').exists() else None,cfg_value=request['cfg'],inference_timesteps=request['steps'],max_len=2048,normalize=False,denoise=False,seed=request['seed'],retry_badcase_max_times=1) rate=model.tts_model.sample_rate sf.write(root/'result.wav',wave,rate,subtype='PCM_16') result=dict(ok=True,sample_rate=rate,duration=len(wave)/rate) except Exception as exc: oom='outofmemory' in type(exc).__name__.lower() or 'out of memory' in str(exc).lower() result=dict(ok=False,error='GPU-Speicher reicht nicht aus. Andere Deck-Modelle entladen oder andere GPU wählen.' if oom else 'VoxCPM2: '+phase+' fehlgeschlagen ('+type(exc).__name__+'). Laufzeit und Komponenten prüfen.') (root/'result.json').write_text(json.dumps(result)) return 0 if result['ok'] else 1 if __name__=='__main__':sys.exit(main())