Instructions to use Ray1239/clipwright-4b with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use Ray1239/clipwright-4b with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3.5-4B") model = PeftModel.from_pretrained(base_model, "Ray1239/clipwright-4b") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use Ray1239/clipwright-4b with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf Ray1239/clipwright-4b:Q8_0 # Run inference directly in the terminal: llama cli -hf Ray1239/clipwright-4b:Q8_0
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf Ray1239/clipwright-4b:Q8_0 # Run inference directly in the terminal: llama cli -hf Ray1239/clipwright-4b:Q8_0
Build from source code
git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-app # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama serve -hf Ray1239/clipwright-4b:Q8_0 # Run inference directly in the terminal: ./build/bin/llama cli -hf Ray1239/clipwright-4b:Q8_0
Use Docker
docker model run hf.co/Ray1239/clipwright-4b:Q8_0
- Llama new
- LM Studio
- Jan
- vLLM
How to use Ray1239/clipwright-4b with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Ray1239/clipwright-4b" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Ray1239/clipwright-4b", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/Ray1239/clipwright-4b:Q8_0
- Ollama
How to use Ray1239/clipwright-4b with Ollama:
ollama run hf.co/Ray1239/clipwright-4b:Q8_0
- Unsloth Desktop
- Pi
How to use Ray1239/clipwright-4b with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Ray1239/clipwright-4b:Q8_0
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "Ray1239/clipwright-4b:Q8_0" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use Ray1239/clipwright-4b with Docker Model Runner:
docker model run hf.co/Ray1239/clipwright-4b:Q8_0
- Lemonade
How to use Ray1239/clipwright-4b with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull Ray1239/clipwright-4b:Q8_0
Run and chat with the model
lemonade run user.clipwright-4b-Q8_0
List all available models
lemonade list
- Hermes Agent
How to use Ray1239/clipwright-4b with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Ray1239/clipwright-4b:Q8_0
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default Ray1239/clipwright-4b:Q8_0
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use Ray1239/clipwright-4b with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf Ray1239/clipwright-4b:Q8_0
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "Ray1239/clipwright-4b:Q8_0" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
Clipwright 4B (V3)
A 4B model that does media jobs end to end. It runs ffmpeg, ffprobe, ImageMagick, SoX and ExifTool through one
run(cmd, foreach) tool in a sandbox, reads the results, fixes its own mistakes, and replies with the output files.
It also answers questions about files, asks when a request is ambiguous, and says when something can't be done.
LoRA (r32, alpha 64, all linear layers) on Qwen3.5-4B. Trained on 12,095 examples covering 46 kinds of real-world jobs: editing (cuts, overlays, crossfades, picture-in-picture, voiceovers), delivery (platform presets, size limits, subtitles, thumbnails), audio (cleanup, ducking, pauses, sync), repair (VFR, interlacing, aspect ratio, broken files), images, PDFs, metadata and privacy. Every example was executed on real files and its output was checked before it was kept. One epoch on a Colab L4 (6h50m).
Files
| File | Use |
|---|---|
clipwright-4b-Q8_0.gguf |
LoRA merged into the base, Q8_0 (4.6 GB). Run with llama.cpp. |
adapter_model.safetensors + configs |
The PEFT adapter, to load on Qwen/Qwen3.5-4B. |
system_prompt.txt |
The system prompt it was trained with. Use it as is. |
tool.json |
The run tool schema (OpenAI function format). |
Quick start (llama.cpp)
llama-server -hf Ray1239/clipwright-4b:Q8_0 --jinja -c 32768
Send the system prompt and the run tool. The user message should list the input files under Files:, the way it
looked in training:
make a 10 second preview gif of talk.mp4
Files:
- in/talk.mp4 โ video h264 1920x1080 30fps, audio aac stereo 48kHz, 132.1s, 11.8 MB
Then execute each run call yourself with inputs in in/ (read-only) and outputs written to out/. Return the
result as a tool message, as JSON with exit_code, plus stdout or error, and a short summary of the files in
out/. Loop until the model stops calling the tool. Run it in a sandbox: these are real shell commands.
Evaluation
154 hand-written tasks, 2 to 4 per job type, on held-out files the model never saw in training (different voices, sizes, timings and content). Each task is scored by running the model's commands and checking the output: duration, dimensions, codecs, loudness, frames at given times, pitch, silence, sync, metadata, page counts, or the facts in a written answer. 21 deliberately wrong solutions are all rejected by these checks. Greedy decoding, one run per task, up to 15 commands. 95% Wilson intervals are in brackets.
| Job group | This model | V2 0.8B |
|---|---|---|
| Editing | 27/42 | 1/42 |
| Social and delivery | 18/24 | 7/24 |
| Audio | 17/23 | 3/23 |
| Repair | 15/18 | 8/18 |
| Images and PDFs | 16/18 | 6/18 |
| Metadata and privacy | 7/9 | 2/9 |
| Questions about files | 7/10 | 1/10 |
| Mistakes, ambiguity, limits | 8/10 | 4/10 |
| Total | 115/154, 75% [67-81] | 32/154, 21% [15-28] |
The 4B solves 85 tasks V2 fails and fails 2 that V2 solves (paired exact test, p < 1e-21). The Q8_0 GGUF gives the same result as the unmerged adapter on all 16 tasks of a random spot check.
Limitations
- Timing-heavy edits are the weakest: a voiceover placed at a given time (0/4), inserting a clip at a timestamp (1/4), cutting a highlight around a moment (1/3), removing pauses (1/3), finding timestamps (1/3).
- On 15 of 154 tasks it repeated the same failing command three times and was stopped.
- The test files are synthetic, so real footage with odd codecs or damage may do worse.
- Trained on ffmpeg 8 to 9 syntax and ImageMagick 7 (
magick). - It reports what it did, but check important outputs yourself.
- Downloads last month
- 46
8-bit