|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +# QVAC CLI v0.7.0 Release Notes |
| 4 | + |
| 5 | +📦 **NPM:** https://www.npmjs.com/package/@qvac/cli/v/0.7.0 |
| 6 | + |
| 7 | +This release adds image-to-video generation and audio encoding to the OpenAI-compatible HTTP server. It also fixes token accounting and `finish_reason` reporting across all chat-category routes. |
| 8 | + |
| 9 | +## New Features |
| 10 | + |
| 11 | +### Image-to-video via POST /v1/videos |
| 12 | + |
| 13 | +`POST /v1/videos` now supports img2vid in addition to txt2vid. Supply the reference image as a multipart file field (the form the OpenAI SDK sends for `Uploadable`), as a JSON `{ image_url }` (base64 data URI or HTTP(S) URL up to 100 MB), or as a JSON `{ file_id }` referencing a previously uploaded file. Mode is inferred automatically from the presence of `input_reference`. |
| 14 | + |
| 15 | +```typescript |
| 16 | +import OpenAI, { toFile } from 'openai' |
| 17 | +import fs from 'node:fs' |
| 18 | + |
| 19 | +const client = new OpenAI({ baseURL: 'http://localhost:11434/v1' }) |
| 20 | + |
| 21 | +// img2vid via local file (multipart) |
| 22 | +const job = await client.videos.create({ |
| 23 | + model: 'wan-i2v', |
| 24 | + prompt: 'subject slowly turns and smiles', |
| 25 | + input_reference: await toFile(fs.createReadStream('./frame.png'), 'frame.png'), |
| 26 | +}) |
| 27 | + |
| 28 | +// img2vid via data URI (JSON) |
| 29 | +const job2 = await client.videos.create({ |
| 30 | + model: 'wan-i2v', |
| 31 | + prompt: 'subject slowly turns and smiles', |
| 32 | + input_reference: { image_url: 'data:image/png;base64,...' }, |
| 33 | +}) |
| 34 | +``` |
| 35 | + |
| 36 | +### Audio encoding — mp3, opus, aac, flac |
| 37 | + |
| 38 | +`POST /v1/audio/speech` now supports `response_format: "mp3"`, `"opus"`, `"aac"`, and `"flac"` in addition to `wav` and `pcm`. Encoding is handled by `ffmpeg` on the server's `PATH`; if ffmpeg is absent, these formats return `503 transcode_unavailable`. Use `qvac doctor` to check availability. |
| 39 | + |
| 40 | +Two new discovery endpoints are also available: |
| 41 | + |
| 42 | +``` |
| 43 | +GET /v1/audio/voices → list of configured TTS voices |
| 44 | +GET /v1/audio/models → list of loaded (READY) TTS models |
| 45 | +``` |
| 46 | + |
| 47 | +## Bug Fixes |
| 48 | + |
| 49 | +### Correct finish_reason and token accounting |
| 50 | + |
| 51 | +`finish_reason: "length"` is now returned when generation is truncated by `max_tokens` or `max_completion_tokens` (previously always `"stop"`). The Responses API equivalent is `status: "incomplete"` with `incomplete_details.reason: "max_output_tokens"`. Token counts (`completion_tokens` / `output_tokens`) now consistently use the SDK's `generatedTokens` stats across `/v1/chat/completions`, `/v1/completions`, and `/v1/responses`. |
| 52 | + |
3 | 53 | ## [0.6.0] |
4 | 54 |
|
5 | 55 | Release Date: 2026-06-02 |
|
0 commit comments