{"id":48247,"library":"jsjianyingdraft","title":"jsJianYingDraft","description":"jsJianYingDraft v1.0.0 is a TypeScript port of pyJianYingDraft for programmatically generating JianYing (CapCut) draft files. It provides draft folder lifecycle, track/segment editing, SRT import, effects, keyframes, masks, transitions, and a Windows automation controller. The package ships first-class TypeScript types, dual ESM/CJS builds, Python-compatible snake_case aliases for migration, and metadata presets. It requires Node >= 18 and is maintained by the pyJianYingDraft community with active development.","status":"active","version":"1.0.0","language":"javascript","source_language":"en","source_url":null,"tags":["javascript","typescript"],"install":[{"cmd":"npm install jsjianyingdraft","lang":"bash","label":"npm"},{"cmd":"yarn add jsjianyingdraft","lang":"bash","label":"yarn"},{"cmd":"pnpm add jsjianyingdraft","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"Default import is not available; use named import.","wrong":"import DraftFolder from 'jsjianyingdraft'","symbol":"DraftFolder","correct":"import { DraftFolder } from 'jsjianyingdraft'"},{"note":"If using CommonJS, use require but note the package is ESM-first. Named export.","wrong":"const ScriptFile = require('jsjianyingdraft').ScriptFile","symbol":"ScriptFile","correct":"import { ScriptFile } from 'jsjianyingdraft'"},{"note":"Track_type is a compatibility alias; prefer TrackType. Both work.","wrong":"import { Track_type } from 'jsjianyingdraft'","symbol":"TrackType","correct":"import { TrackType } from 'jsjianyingdraft'"},{"note":"Video_segment is a deprecated alias; use VideoSegment.","wrong":"import { Video_segment } from 'jsjianyingdraft'","symbol":"VideoSegment","correct":"import { VideoSegment } from 'jsjianyingdraft'"},{"note":"trange is a helper for creating timeranges; Timerange is a class, not equivalent.","wrong":"import { Timerange } from 'jsjianyingdraft'","symbol":"trange","correct":"import { trange } from 'jsjianyingdraft'"}],"quickstart":{"code":"import { AudioMaterial, AudioSegment, DraftFolder, TrackType, VideoMaterial, VideoSegment, trange } from 'jsjianyingdraft';\n\nconst folder = new DraftFolder('D:/JianYingDrafts');\nconst script = folder.createDraft('demo', 1920, 1080, { allowReplace: true });\n\nscript.addTrack(TrackType.video).addTrack(TrackType.audio).addTrack(TrackType.text, 'subtitle');\n\nconst video = new VideoMaterial('D:/assets/video.mp4', { duration: 8000000, width: 1920, height: 1080 });\nconst audio = new AudioMaterial('D:/assets/audio.mp3', { duration: 8000000 });\n\nscript.addSegment(new VideoSegment(video, trange('0s', '8s')))\n      .addSegment(new AudioSegment(audio, trange('0s', '8s')))\n      .importSrt('D:/assets/subtitle.srt', 'subtitle')\n      .save();","lang":"typescript","description":"Creates a draft with video/audio track, adds segments, imports subtitle, and saves."},"warnings":[{"fix":"Use PascalCase equivalents (e.g., DraftFolder, VideoSegment).","message":"snake_case aliases (e.g., Draft_folder, Video_segment) are deprecated and will be removed in future versions.","severity":"deprecated","affected_versions":">=1.0.0"},{"fix":"Use new VideoMaterial(path, { duration: ..., width: ..., height: ... }).","message":"Constructor signatures for VideoMaterial and AudioMaterial changed: second parameter is now an options object, not direct duration.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Use trange helper (e.g., trange('0s', '8s')) or multiply seconds by 1_000_000.","message":"Timerange constructor expects microseconds (not milliseconds). A common mistake is passing milliseconds.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Use materialOptions in segment constructors.","message":"material_options field is deprecated in favor of materialOptions.","severity":"deprecated","affected_versions":">=1.0.0"},{"fix":"Ensure a text track with matching name exists before calling importSrt.","message":"importSrt targetTrack parameter must match a previously added text track name (e.g., 'subtitle'), otherwise it throws.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Replace TrackType.from_name('video') with TrackType.video.","message":"Python-style enum from_name method is deprecated; use direct enum values instead.","severity":"deprecated","affected_versions":">=1.0.0"}],"env_vars":null,"search_vec":"'18':60 'activ':69 'alias':51 'autom':33 'build':45 'capcut':14 'case':50 'class':40 'communiti':67 'compat':48 'control':34 'develop':70 'draft':15,19 'dual':43 'edit':23 'effect':26 'esm/cjs':44 'file':16 'first':39 'first-class':38 'folder':20 'generat':12 'import':25 'javascript':71 'jiani':13 'jsjianyingdraft':1,2 'keyfram':27 'lifecycl':21 'maintain':63 'mask':28 'metadata':55 'migrat':53 'node':59 'packag':36 'port':7 'preset':56 'programmat':11 'provid':18 'pyjianyingdraft':9,66 'python':47 'python-compat':46 'requir':58 'ship':37 'snake':49 'srt':24 'track/segment':22 'transit':29 'type':42 'typescript':6,41,72 'v1.0.0':3 'window':32","created_at":"2026-06-07T16:55:38.852743+00:00","updated_at":"2026-06-07T16:55:38.852743+00:00","problems":[{"fix":"Run 'npm install jsjianyingdraft' (ensure Node >= 18).","cause":"Package not installed or import path incorrect.","error":"Error: Cannot find module 'jsjianyingdraft'"},{"fix":"Use 'import { DraftFolder } from 'jsjianyingdraft'' (PascalCase).","cause":"Using deprecated snake_case alias without correct import.","error":"TypeError: Draft_folder is not a constructor"},{"fix":"Import Timerange directly: 'import { Timerange } from 'jsjianyingdraft''.","cause":"Incorrect import or missing import of Timerange class.","error":"TypeError: Timerange is not a constructor"},{"fix":"Verify the folder path and ensure JianYing draft storage directory is correct.","cause":"The specified draft folder path does not exist or is invalid.","error":"Error: Draft folder not found: D:/JianYingDrafts"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":null,"github":null,"docs":null,"changelog":null,"pypi":null,"npm":"jsjianyingdraft","openapi_spec":null,"status_page":null,"smithery":null,"categories":["devops"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}