# Changelog of YouTube Transcript Pro — Videos, Shorts, Playlists & Channels (`huzhihua/youtube-transcript-pro`) Actor

- **URL**: https://apify.com/huzhihua/youtube-transcript-pro/changelog.md
- **Full Actor documentation**: https://apify.com/huzhihua/youtube-transcript-pro.md

## Changelog

### 1.0.8

- Replaced the invalid colon cache-key separator with an underscore so transcript, metadata, and discovery records satisfy Apify KVS key restrictions.
- Added strict Apify-key validation and cross-run cache persistence regressions for transcript, metadata, and discovery entries.

### 1.0.7

- Use one stable `youtube-transcript-pro-cache-v2` named KVS for versioned, expiring transcript, metadata, and discovery cache records; report store availability and hit/miss/write counts.
- Preserve best-effort cache behavior when KVS open/read/write fails, bypass transcript caching for recent/live items and fresh-caption retries, and keep transcript rendering plus successful PPE delivery on cache hits.
- Add Channel-only parent identity fallback, non-network thumbnail fallback, and bounded Direct/Datacenter half-open recovery probes.
- Add shared-store lifecycle, cache isolation/format reuse, failure-path, metadata fallback, and route probe budget regressions.

### 1.0.6

- Fetch and normalize transcripts before optional metadata work, so unsuccessful transcripts skip enrichment requests.
- Keep metadata traffic on direct/datacenter routes, reuse discovery metadata, and treat metadata enrichment as best-effort with at most one full yt-dlp extraction per successful video.
- Add persistent transcript, metadata, and discovery caches with TTLs; cache raw transcript payloads so output formats and clipping are rendered locally while successful Dataset/PPE delivery still occurs on each run.
- Add direct/datacenter half-open recovery and RUN_REPORT request/cache counters, without changing billing events or public inputs.
- Remove `$schema` from the Dataset schema for Apify Cloud compatibility; add cost-path and cache regression tests.

### 1.0.5

- Kept direct/datacenter BOT_CHECK circuit thresholds at two consecutive checks and set the residential threshold to five consecutive checks.
- A successful request on a route resets that route's consecutive BOT_CHECK counter; each video still attempts a residential route at most once per route chain.
- Kept run-scoped concurrency degradation, retry-storm protection, route diagnostics, and pending-queue fail-fast behavior unchanged.
- Added residential threshold, reset, per-video proxy acquisition, and bounded 50-video retry regression tests.

### 1.0.4

- Replaced fixed five-worker processing with shared adaptive concurrency: starts at two, may rise to three after ten successful requests without Bot Check/rate limits, and drops to one for the rest of the run after either signal.
- Added per-route BOT_CHECK circuit breakers after two consecutive checks, route health counters in `RUN_REPORT`, bounded worker start jitter, and retry backoff with jitter.
- Prevented BOT_CHECK from restarting the route chain; each video skips routes that already Bot Checked, and a closed set of allowed routes leaves untouched videos pending in `UNPROCESSED`.
- Kept PPE pushes, successful counters, and checkpoints serialized in the main flow; added regression coverage for circuit behavior, pending videos, residential fallback, retry storms, and billing.

### 1.0.3

- Merge discovery metadata with yt-dlp enrichment without allowing null values to erase known fields; metadata lookup failure no longer removes discovery values from successful transcript rows.
- Mark direct Shorts URLs and channel `/shorts` discovery entries as Shorts, preserving that evidence through metadata enrichment and source merging.
- Process deduplicated videos with bounded concurrency while keeping PPE pushes, charge-result checks, counters, and success checkpoints serialized (replaced by adaptive concurrency in 1.0.4).
- Added metadata, Shorts, concurrency cap, deduplication, charge-zero, and charge-limit regression tests.

### 1.0.2

- Preserve non-null playlist ID, title, and position through duplicate/source merging and final successful dataset output.
- Install Deno 2.9.7 in the Docker image and explicitly set yt-dlp's JavaScript runtime for metadata and discovery calls.
- Correct README failure-output wording and align PPE setup guidance across the README, billing report, and cloud checklist.
- Added playlist metadata and shared yt-dlp runtime configuration regression tests.

### 1.0.1

- Fixed Apify Python SDK 4.1.0 keyword-only PPE push and ChargeResult accounting/checkpoint handling.
- Restricted the default Dataset to successful transcript rows; discovery and transcript failures go to `ERRORS.json` and `RUN_REPORT.json`.
- Added valid Actor input/output/storage/Dockerfile links and rewrote output/dataset schemas, including nullable metadata.
- Added a stable single-video input default/prefill for Store health checks and renamed the local result cap to `maxSuccessfulTranscripts`.
- Enforced direct/datacenter/residential proxy selection and network-failure fallback for both discovery and transcript requests.
- Limited fresh-caption backoff to metadata dated within 48 hours.
- Added orchestration, billing, proxy, discovery, default input, and schema consistency tests.

### 1.0.0

- Initial YouTube transcript Actor package.
