ClearText-Video: A Large-Scale Text-Centric Video Dataset Bridging Video Restoration and Scene-Text Enhancement
Organizations: OPPO US AI Center, USA · University of Wisconsin–Madison, USA · University of California San Diego, USA
Abstract
Multimodal Large Language Models (MLLMs) have recently made strong progress in visual--linguistic understanding. However, their performance on text-centric video reasoning remains highly sensitive to input quality. Real-world user-provided videos often contain motion blur, compression artifacts, noise, and low-resolution text, which impair reliable text reading and downstream reasoning. Whether MLLMs can robustly read and reason about real-world scene text under diverse quality conditions remains a fundamental open question. We introduce ClearText-Video (CTVid), a large-scale, scene-text-aware benchmark for studying text-centric video understanding under controlled quality variation. CTVid contains 4,639 real-world text-rich egocentric videos, 550K+ frames, 1.6M human-verified scene-text annotations, and 220K+ spatial/temporal question--answer pairs in Chinese and English. For each high-quality video, CTVid provides content-matched Degraded-Quality and Restored-Quality variants, supporting two task families: Text-Centric Video Restoration and Multi-Quality VideoQA. We evaluate 18 representative restoration methods and 16 state-of-the-art MLLMs on CTVid. The results show that visual enhancement does not guarantee textual fidelity or downstream reasoning gains: blur is more damaging than low resolution, restored videos can alter the textual evidence used by MLLMs, and OCR-only pipelines remain far below direct multimodal reasoning. CTVid exposes the gap between video restoration and text-grounded understanding, providing a rigorous foundation for restoration-aware, quality-robust text-centric video systems.
Figures & tables
| Task | Dataset | Venue | GT Resolution | Caption | Text in Video | Content Language | Videos/Img | Video Source |
| Video Super-Resolution | VideoLQ [ 6 ] | CVPR 2022 | 640 480 | ✗ | ✗ | ✗ | 0.05K/4.9K | Online |
| SPMCS [ 47 ] | ICCV 2017 | 1920 1080 | ✗ | ✗ | ✗ | 0.03K/0.93K | Manual | |
| Vimeo-90k [ 62 ] | IJCV 2019 | 448 256 | ✗ | ✗ | ✗ | 4.28K/0.6M | Online | |
| RealVSR [ 65 ] | ICCV 2021 | 1024 512 | ✗ | ✗ | ✗ | 0.5K/2.5K | Manual | |
| YouHQ [ 75 ] | CVPR 2024 | 1920 1080 | ✗ | ✗ | ✗ | 37K/- | Online | |
| MVSR4 [ 51 ] | CVPRW 2023 | 1920 1080 | ✗ | ✗ | ✗ | 0.2K/2K | Manual |
| Input Type | Methods | PSNR | SSIM | LPIPS | DISTS | CLIPIQA | NIQE | MUSIQ | MANIQA | FID | P det | R det | F1 det | Acc rec | NED rec |
| Image-based | Real-ESRGAN [ 52 ] | 27.85 | 0.8748 | 0.1638 | 0.1032 | 0.4790 | 4.877 | 64.65 | 0.5718 | 35.00 | 89.06 | 57.78 | 70.09 | 34.82 | 53.51 |
| SwinIR [ 28 ] | 28.18 | 0.8788 | 0.1613 | 0.1012 | 0.5029 | 4.877 | 65.73 | 0.5705 | 32.15 | 88.78 | 58.47 | 70.50 | 36.76 | 54.96 | |
| SeeSR [ 57 ] | 27.89 | 0.8529 | 0.1824 | 0.1161 | 0.6471 | 5.121 | 69.92 | 0.6196 | 27.66 | 87.27 | 68.72 | 76.89 | 35.08 | 54.95 | |
| OSEDiff [ 56 ] | 25.67 | 0.8289 | 0.1946 | 0.1151 | 0.6219 | 4.852 | 69.11 | 0.6168 | 32.67 | 87.59 | 66.35 | 75.50 | 34.25 | 54.06 | |
| S3Diff [ 68 ] | 26.05 | 0.8033 | 0.1617 | 0.09611 | 0.5764 | 4.517 | 64.52 | 0.5799 | 29.16 | 86.72 | 69.52 | 77.17 | 38.42 | 58.03 | |
| AdcSR [ 7 ] | 25.84 | 0.8239 | 0.2024 | 0.124 | 0.6448 | 4.941 | 69.82 | 0.6083 | 37.52 | 88.84 | 57.72 | 69.98 | 32.02 | 51.26 |
| Methods | PSNR | SSIM | LPIPS | DISTS | CLIPIQA | NIQE | MUSIQ | MANIQA | FID | P det | R det | F1 det | Acc rec | NED rec |
| MIMO-UNet+ [ 11 ] | 29.26 | 0.8657 | 0.2053 | 0.1393 | 0.3324 | 6.483 | 46.02 | 0.4760 | 47.15 | 88.58 | 65.02 | 74.99 | 51.75 | 69.54 |
| NAFNet [ 8 ] | 28.21 | 0.8716 | 0.2461 | 0.1749 | 0.3487 | 7.614 | 48.35 | 0.4253 | 48.65 | 90.81 | 66.37 | 76.69 | 50.77 | 68.30 |
| Restormer [ 67 ] | 31.38 | 0.8863 | 0.1904 | 0.1349 | 0.3404 | 6.552 | 47.31 | 0.4864 | 41.50 | 88.28 | 67.08 | 76.23 | 54.99 | 71.67 |
| Stripformer(GoPro) [ 49 ] | 31.13 | 0.8832 | 0.1754 | 0.1191 | 0.3348 | 6.386 | 48.65 | 0.4955 | 38.78 | 88.42 | 66.69 | 76.03 | 55.05 | 72.26 |
| Stripformer(RealBlur-J) [ 49 ] | 27.04 | 0.8655 | 0.1837 | 0.1182 | 0.3657 | 6.240 | 54.44 | 0.4922 | 32.36 | 89.18 | 69.99 | 78.43 | 58.93 | 76.51 |
| Stripformer(RealBlur-R) [ 49 ] | 27.36 | 0.8667 | 0.1905 | 0.1166 | 0.3396 | 6.490 | 50.41 | 0.4668 | 33.46 | 89.45 | 69.71 | 78.36 | 58.57 | 75.71 |
| HQ | DQ-Low_res [ 34 ] | DQ-Blur [ 34 ] | RQ-DOVE [ 10 ] | RQ-MIMO [ 11 ] | RQ-S3DIFF [ 68 ] | |||||||||||||||||||
| Model | Acc | OC | UAcc | Abs | Acc | OC | UAcc | Abs | Acc | OC | UAcc | Abs | Acc | OC | UAcc | Abs | Acc | OC | UAcc | Abs | Acc | OC | UAcc | Abs |
| GPT-5.4 [ 38 ] | 60.00 | 15.00 | 55.00 | 0.00 | 53.33 | 10.00 | 58.33 | 6.70 | 56.67 | 8.33 | 60.00 | 18.30 | 48.33 | 15.00 | 55.00 | 3.30 | 55.00 | 10.00 | 58.33 | 6.70 | 53.33 | 13.33 | 53.33 | 0.00 |
| GPT-5.4-mini [ 37 ] | 46.67 | 6.67 | 65.00 | 0.00 | 48.33 | 18.33 | 51.67 | 0.00 | 43.33 | 5.00 | 63.33 | 3.30 | 46.67 | 3.33 | 66.67 | 0.00 | 41.67 | 11.67 | 56.67 | 0.00 | 45.00 | 8.33 | 56.67 | 0.00 |
| Claude-Sonnet-4.6 [ 2 ] | 70.00 | 21.67 | 66.67 | 0.00 | 63.33 | 20.00 | 70.00 | 0.00 | 60.00 | 20.00 | 70.00 | 13.30 | 65.00 | 18.33 | 70.00 | 0.00 | 70.00 | 20.00 | 70.00 | 3.30 | 61.67 | 16.67 | 71.67 | 0.00 |
| Gemini-2.5-pro [ 12 ] | 71.67 | 16.67 | 65.00 | 0.00 | 65.00 | 8.33 | 71.67 | 1.70 | 60.00 | 13.33 | 66.67 | 23.30 | 65.00 | 13.33 | 68.33 | 1.70 | 63.33 | 20.00 | 56.67 | 10.00 | 70.00 | 11.67 | 65.00 | 0.00 |
| Gemini-2.5-flash [ 12 ] | 60.00 | 21.67 | 61.67 | 1.70 | 65.00 | 10.00 | 61.67 | 1.70 | 48.33 | 10.00 | 76.67 | 30.00 | 66.67 | 10.00 | 66.67 | 3.30 | 60.00 | 16.67 | 61.67 | 11.70 | 61.67 | 13.33 | 58.33 | 1.70 |
| Accuracy%( ) | ||||||
| Models | HQ | DQ-Blur [ 34 ] | RQ-MIMO [ 11 ] | RQ-S3DIFF [ 68 ] | RQ-DOVE [ 10 ] | |
| Gemini-2.5-flash [ 12 ] | 51.55 | 51.20 | 52.12 | 51.32 | 53.04 | |
| Gemini-2.5-pro [ 12 ] | 45.83 | 50.00 | 51.39 | 50.00 | 48.61 | |
| GPT-4o-mini [ 36 ] | 50.06 | 50.52 | 50.29 | 50.13 | 49.94 | |
| Claude-Sonnet-4.6 [ 2 ] | 60.02 | 59.45 | 59.34 | 58.88 | 60.37 | |
| Qwen2.5-VL-7B [ 3 ] | 50.86 | 50.06 | 50.40 | 50.29 | 50.63 | |
Appendix figures & tables17 assets
Supplementary material from the paper’s appendix.
Appendix
| Dataset | #QA | #Boxes / Trans. | Spatial QA | Temporal QA | Bilingual/ Multilingual | Dense Frame-Text | Paired HQ/DQ/RQ | Rest. Eval. |
| TextVQA [ 44 ] | 45,336 | OCR tokens #boxes: NA | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| NewsVideoQA [ 19 ] | 8,672 | OCR tokens + subtitles | ✗ | ✓ | ✗ | ✗ | ✗ | ✗ |
| EgoTextVQA [ 76 ] | 7,064 | OCR stats only #boxes: NA | Partial | ✓ | ✗ | ✗ | ✗ | ✗ |
| ViTXT-GQA [ 77 ] | 2,055 | 52,494 boxes 2,227 segments | ✓ | ✓ | ✗ | Partial | ✗ | ✗ |
| M4-ViteVQA [ 73 ] | 25,123 | OCR tokens avg. 56.92/video | Partial | ✓ | ✗ | ✗ | ✗ | ✗ |
| MME-VideoOCR [ 43 ] | 2,000 | NA | ✓ | ✓ | Partial | ✗ | ✗ | ✗ |
| HQ | LR | Blur | DOVE | MIMO | S3Diff | |
| Avg. Acc | 47.73 | 44.59 | 41.69 | 45.21 | 44.02 | 44.79 |
| Avg. HQ | – | -3.14 | -6.05 | -2.52 | -3.72 | -2.95 |
| Qwen3-VL-8B Acc | 50.56 | 45.43 | 44.46 | 47.70 | 46.91 | 46.64 |
| Qwen3-VL-8B HQ | – | -5.13 | -6.10 | -2.86 | -3.65 | -3.92 |
| Input quality | OCR+Qwen2.5-7B | Qwen2.5-VL-7B | ||||
| Acc | UAcc | OC | Acc | UAcc | OC | |
| HQ | 23.3 | 66.0 | 14.6 | 51.21 | 58.69 | 10.89 |
| DQ-Low_res | 22.7 | 66.7 | 13.5 | 40.23 | 61.67 | 3.99 |
| DQ-Blur | 22.3 | 66.6 | 13.7 | 41.72 | 62.66 | 9.19 |
| RQ-DOVE | 22.9 | 64.5 | 17.7 | 46.58 | 59.97 | 10.79 |
| RQ-MIMO | 22.2 | 61.9 | 20.1 | 46.10 | 59.89 | 10.79 |
| System Prompt |
| Fill-in Question Prompt |
| Your task is to answer fill-in questions based on image input. Input Format: An image with {size} and a fill-in question string, e.g., “C____T”. Output Format: A single-line JSON object: {"answer": "<only the missing characters>", "reasoning": "<a brief explanation, 1 sentence max>"} Rules: Only output the missing characters, not the full word. Keep the reasoning short and image-based. Do not infer from common sense or spelling patterns, because the answer may not follow normal spelling. Only answer based on what is actually visible in the image. The blank, represented as “____”, can correspond to any number or type of characters, including letters, digits, Chinese characters, or symbols. Example: Question: What letter is missing in “C__T”? Answer: {"answer": "a", "reasoning": "C-a-T forms CaT as shown in the image."} Respond only with a JSON object. Do not include anything else. |
| Multi-choice Question Prompt |
| You are a vision-language assistant specialized in text recognition. Your task is to answer multiple-choice questions based on image content. Input Format: An image with {size} and a question string with options, e.g., “Which letter is missing in G__FT? Choices: A. A B. B C. I D. H”. Output Format: A single-line JSON object: {"answer": "<only the correct letter(s)>", "reasoning": "<a brief explanation, 1 sentence max>"} Rules: Only output the letter(s) corresponding to the correct option. Do not repeat the full option. Keep the reasoning short and image-based. The answer can contain multiple letters, e.g., “A,C”, if multiple options are correct. Do not infer from common sense or spelling patterns. Only answer based on what is actually visible in the image. Example: Question: Which word(s) is located within the area […]? Choose the correct option. A. Apple B. App C. Able D. Aple Answer: {"answer": "A,B", "reasoning": "I can see both ‘Apple’ and ‘App’ in the bounding box area."} Respond only with a JSON object. Do not include anything else. |
| True-False Question Prompt |
| You are a vision-language assistant specialized in text recognition. Your task is to answer true/false questions based on the content of the image. Input Format: An image with {size} and a true/false question string, e.g., “The word in the image is DOG. True or False?”. Output Format: A single-line JSON object: {"answer": "True" or "False", "reasoning": "<a brief explanation, 1 sentence max>"} Rules: The answer must be strictly “True” or “False”. Keep the reasoning short and image-based. Do not infer from common sense or spelling patterns. Only answer based on what is actually visible in the image. Example: Question: The word in the image is DOG. True or False? Answer: {"answer": "False", "reasoning": "The image shows DoG, not DOG."} Respond only with a JSON object. Do not include anything else. |
| System Prompt |
| You are a helpful assistant that can answer questions about a video. Video context: The original video has {total_frames} frames in total{fps_clause}. Original frame resolution: {original_size}. Frames are resized to {resized_size} before being shown to you. Any coordinates or bounding boxes mentioned in the questions are based on the original resolution {original_size}. You are shown {n_sampled} frames uniformly sampled from this video. The frames are given in chronological order. The k-th frame you see, 1-based, corresponds to original frame index sampled_indices[k-1], where sampled_indices = {sampled_indices_str}. When the question refers to a specific frame index or timestamp, reason about which of your sampled frames is closest to it. You only have access to the listed sampled frames. Answer vocabulary — geometric question types: Each question about a specific target text uses one of the fixed option sets below. Pick the option that best matches what you observe across the sampled frames. Position regions: “center (middle of the frame)”: the central 1/3 of the frame on both the horizontal and vertical axes; “top-left (upper-left area)”: upper half of the frame, left of centre; “top-right (upper-right area)”: upper half of the frame, right of centre; “bottom-left (lower-left area)”: lower half of the frame, left of centre; “bottom-right (lower-right area)”: lower half of the frame, right of centre. Position change amount: “stays in roughly the same place (barely shifts)”: the text barely moves; displacement is negligible; “moves a moderate amount (shifts across part of the frame)”: noticeable shift — text crosses a portion of the frame; “moves a large distance (shifts across much of the frame)”: large displacement — text traverses most of the frame. Overall motion direction: “stays roughly in place”: negligible net displacement throughout; “moves left”: predominantly leftward drift; “moves right”: predominantly rightward drift; “moves up”: predominantly upward drift; “moves down”: predominantly downward drift; “moves diagonally”: significant movement on both horizontal and vertical axes simultaneously; “changes direction partway”: reverses along its dominant axis mid-clip, e.g., moves right then left. Text size level: “small (a minor part of the frame)”: text occupies a small fraction of the frame, roughly ; “medium (a noticeable block of the frame)”: clearly visible, moderate fraction, roughly – ; “large (a major part of the frame)”: covers a substantial portion of the frame, roughly – ; “very large (dominates the frame)”: fills most of the frame, roughly . Scale change: “stays about the same size”: size is roughly constant throughout the clip; “gets larger”: text grows noticeably from the start to the end; “gets smaller”: text shrinks noticeably from the start to the end; “size fluctuates (goes up and down)”: size oscillates non-monotonically during the clip. Edge relation: “fully inside, away from the edges”: text stays well clear of all frame borders throughout; “comes close to an edge”: text approaches a border but does not touch it; “touches or runs off an edge”: text reaches or extends beyond a frame border. Answer the question based on the video. Directly return the answer with no extra text. |