[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71Q10CTWPAZ97SFHS048T56":3,"skill-same:01M71Q10CTWPAZ97SFHS048T56":182},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":14,"repositoryHtmlUrl":54,"repositoryHomepageUrl":55,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M71Q10CTWPAZ97SFHS048T56","tao-train-ocrnet",null,"OCRNet for scene text recognition. Recognizes text content from cropped text-region images and supports CTC and attention-based decoders. Use when training, evaluating, exporting, pruning, quantizing, retraining, or running inference for a TAO OCRNet model. Trigger phrases include \"train OCRNet\", \"scene text recognition\", \"OCR cropped text\", \"CTC \u002F attention text decoder\".","pattanation\u002FNorvik","pattanation","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F235419268?v=4","01M71M5THHYYB15ME8R2E4FCZG","Patta","01M71M5TJM1NDM992M8PDKYR2K",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"train","tao train ocrnet","tao","read","text","toolkit","Bash","when","use","container","trigger","docker","training","for","model","NVIDIA","attention","ocr","running","images","2026-11-10 13:02:02",false,"---\nname: tao-train-ocrnet\ndescription: OCRNet for scene text recognition. Recognizes text content from cropped text-region images and supports CTC\n  and attention-based decoders. Use when training, evaluating, exporting, pruning, quantizing, retraining, or running\n  inference for a TAO OCRNet model. Trigger phrases include \"train OCRNet\", \"scene text recognition\", \"OCR cropped text\",\n  \"CTC \u002F attention text decoder\".\nlicense: Apache-2.0\ncompatibility: Requires docker + nvidia-container-toolkit.\nmetadata:\n  version: \"0.1.0\"\n  author: NVIDIA Corporation\nallowed-tools: Read Bash\ntags:\n- text\n- recognition\n---\n\n# OCRNet\n\nOCRNet for scene text recognition. Recognizes text content from cropped text region images. Supports CTC and attention-based decoders.\n\nSet train.pretrained_model_path for pretrained OCR weights.\n\nFor TAO Deploy TensorRT actions (`gen_trt_engine`, TensorRT `evaluate`, and TensorRT `inference`), read `references\u002Ftao-deploy-ocrnet.md` first. Deploy spec templates live in this skill's `references\u002F` folder with the `spec_template_deploy_*.yaml` prefix.\n\n## Dataclass Schemas\n\nGenerated TAO Core schemas are packaged in `schemas\u002F\u003Caction>.schema.json`, with `schemas\u002Fmanifest.json` listing available actions. Each generated schema also emits `references\u002Fspec_template_\u003Caction>.yaml` from the schema top-level `default` field. AutoML enablement is declared at the model layer in `references\u002Fskill_info.yaml` via `automl_enabled`. Runnable AutoML still requires `schemas\u002Ftrain.schema.json` and `references\u002Fspec_template_train.yaml` to exist and parse. Use the packaged train schema for `automl_default_parameters`, `automl_disabled_parameters`, defaults, min\u002Fmax bounds, enums, option weights, math conditions, dependencies, and popular parameters. Do not expect `~\u002Ftao-core` at runtime; maintainers regenerate schemas\u002Ftemplates before packaging the skill bank.\n\n## Train Action Policy\n\nThis model is AutoML-enabled at the model layer. Before handling any train-stage request, read `references\u002Fskill_info.yaml` and resolve the run override from either an explicit `automl_policy` value or the user's workflow request. Use `automl_policy: on` by default and only expose `on` \u002F `off` in new launch prompts. Treat phrases like \"turn off AutoML\", \"disable AutoML\", \"no HPO\", or \"plain training\" as `automl_policy: off` for this run only. When `automl_policy: on`, `automl_enabled: true`, and both `schemas\u002Ftrain.schema.json` and `references\u002Fspec_template_train.yaml` are packaged, route the train action through `tao-skill-bank:tao-run-automl` by default with this model's `skill_dir`. Preserve workflow\u002Fapplication overrides for datasets, specs, output directories, GPU\u002Fplatform settings, parent checkpoints, and `automl_policy`. Use direct model training only when `automl_policy: off` or the packaged train schema\u002Ftemplate is missing; in the missing-schema case, report that AutoML is enabled but not runnable for this model until schemas are generated.\n\nNon-train actions such as `evaluate`, `inference`, `export`, and deploy flows stay in this model skill. The per-run `automl_policy` override does not change model metadata.\n\n## Training Requirements\n\n- **Dataset type:** ocrnet\n- **Formats:** default\n- **Monitoring metric:** val_acc_1\n\n### Per-Action Dataset Requirements\n\n| Action | Spec Key | Source | Files | List? |\n|---|---|---|---|---|\n| dataset_convert | dataset_convert.input_img_dir | train_datasets or eval_dataset | extracted folder containing cropped text images | No |\n| dataset_convert | dataset_convert.gt_file | train_datasets or eval_dataset | train\u002Fgt_new.txt or test\u002Fgt_new.txt | No |\n| evaluate | dataset.character_list_file | eval_dataset | character_list | No |\n| evaluate | evaluate.test_dataset_dir | eval_dataset | extracted test image folder | No |\n| evaluate | evaluate.test_dataset_gt_file | eval_dataset | test\u002Fgt_new.txt | No |\n| evaluate | evaluate.checkpoint | parent train\u002FAutoML job | best_accuracy.pth or exact requested epoch checkpoint | No |\n| export | dataset.character_list_file | eval_dataset | character_list | No |\n| export | export.checkpoint | parent train\u002FAutoML job | best_accuracy.pth or exact requested epoch checkpoint | No |\n| deploy\u002Fgen_trt_engine | gen_trt_engine.tensorrt.calibration.cal_image_dir | calibration_dataset | extracted calibration image folder for INT8 calibration | Yes |\n| deploy\u002Fgen_trt_engine | gen_trt_engine.onnx_file | parent export job | exported .onnx artifact | No |\n| deploy\u002Fgen_trt_engine | dataset.character_list_file | eval_dataset | character_list | No |\n| inference | dataset.character_list_file | eval_dataset | character_list | No |\n| inference | inference.inference_dataset_dir | inference_dataset | extracted inference image folder | No |\n| inference | inference.checkpoint | parent train\u002FAutoML job | best_accuracy.pth or exact requested epoch checkpoint | No |\n| prune | dataset.character_list_file | eval_dataset | character_list | No |\n| prune | prune.checkpoint | parent train\u002FAutoML job | best_accuracy.pth or exact requested epoch checkpoint | No |\n| quantize | dataset.train_dataset_dir | dataset_convert train job | LMDB folder containing data.mdb and lock.mdb | Yes |\n| quantize | dataset.val_dataset_dir | dataset_convert eval job | LMDB folder containing data.mdb and lock.mdb | No |\n| quantize | dataset.character_list_file | eval_dataset | character_list | No |\n| quantize | dataset.quant_calibration_dataset.images_dir | train_datasets | extracted calibration image folder | No |\n| quantize | quantize.model_path | parent train\u002FAutoML job | checkpoint selected by resolver | No |\n| retrain | dataset.train_dataset_dir | dataset_convert train job | LMDB folder containing data.mdb and lock.mdb | Yes |\n| retrain | dataset.val_dataset_dir | dataset_convert eval job | LMDB folder containing data.mdb and lock.mdb | No |\n| retrain | dataset.character_list_file | eval_dataset | character_list | No |\n| retrain | model.pruned_graph_path | parent prune job | pruned .pth artifact | No |\n| train | dataset.train_dataset_dir | dataset_convert train job | LMDB folder containing data.mdb and lock.mdb | Yes |\n| train | dataset.train_gt_file | train_datasets | train\u002Fgt_new.txt when using raw folders instead of LMDB | No |\n| train | dataset.val_dataset_dir | dataset_convert eval job | LMDB folder containing data.mdb and lock.mdb | No |\n| train | dataset.val_gt_file | eval_dataset | test\u002Fgt_new.txt when using raw folders instead of LMDB | No |\n| train | dataset.character_list_file | eval_dataset | character_list | No |\n\n### Checkpoint Selection\n\nOCRNet training writes both `best_accuracy.pth` and epoch-step checkpoints such as `model_epoch_000_step_00003.pth`. Use the SDK\u002Fmodel checkpoint resolver through the `spec_params` mappings in `references\u002Fskill_info.yaml`; do not guess by sorting for the newest `.pth`.\n\n- Use `best_accuracy.pth` for best-checkpoint `evaluate`, `inference`, `export`, and `prune` requests.\n- Use the exact requested `model_epoch_*_step_*.pth` for epoch\u002Fstep-specific actions.\n- Use `train.resume_training_checkpoint_path` only for resume training, and use `model.pruned_graph_path` for retrain from a prune output. OCRNet does not expose a separate `ocrnet retrain` CLI subtask in the PyT image; the model-skill `retrain` action routes through `ocrnet train -e` with the pruned graph path set.\n- OCRNet `quantize` loads the model through PyTorch. For trusted checkpoints created by the same local run, set `TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD=1` if PyTorch 2.6+ rejects the checkpoint as a weights-only load.\n\n### Typical Spec Overrides\n\nData source overrides are **mandatory for every action**. Run `dataset_convert` separately for train and validation splits, then pass the LMDB folders that directly contain `data.mdb` and `lock.mdb` into train, quantize, and retrain. Tarballs from remote storage must be extracted before they are used as image directories.\n\n```python\nTRAIN_IMAGES = \"\u003Cextracted train image folder>\"\nTRAIN_GT = \"\u003Ctrain gt_new.txt>\"\nEVAL_IMAGES = \"\u003Cextracted eval image folder>\"\nEVAL_GT = \"\u003Ceval gt_new.txt>\"\nTRAIN_LMDB = \"\u003Ctrain dataset_convert results_dir>\"\nEVAL_LMDB = \"\u003Ceval dataset_convert results_dir>\"\nCHAR_LIST = \"\u003Ccharacter_list>\"\n```\n\n**dataset_convert (run once per split):**\n```python\n{\n    \"dataset_convert.input_img_dir\": TRAIN_IMAGES,\n    \"dataset_convert.gt_file\": TRAIN_GT,\n}\n```\n\n**train (mandatory data sources):**\n```python\n{\n    \"train.num_epochs\": 30,\n    \"train.checkpoint_interval\": 10,\n    \"train.validation_interval\": 10,\n    \"train.num_gpus\": 1,\n    \"dataset.batch_size\": 16,\n    \"dataset.train_dataset_dir\": [TRAIN_LMDB],\n    \"dataset.val_dataset_dir\": EVAL_LMDB,\n    \"dataset.train_gt_file\": \"\",\n    \"dataset.val_gt_file\": \"\",\n    \"dataset.character_list_file\": CHAR_LIST,\n}\n```\n\n**deploy\u002Fgen_trt_engine (mandatory data sources):**\n```python\n{\n    \"gen_trt_engine.onnx_file\": \"\u003Cselected export ONNX>\",\n    \"gen_trt_engine.trt_engine\": \"\u003Coutput engine path>\",\n    \"gen_trt_engine.tensorrt.calibration.cal_cache_file\": \"\u003Coutput calibration cache path>\",\n    \"gen_trt_engine.tensorrt.data_type\": \"fp16\",\n    \"gen_trt_engine.tensorrt.calibration.cal_image_dir\": [TRAIN_IMAGES],\n    \"dataset.character_list_file\": CHAR_LIST,\n}\n```\n\n**evaluate (mandatory data sources):**\n```python\n{\n    \"evaluate.checkpoint\": \"\u003Cselected train\u002FAutoML checkpoint>\",\n    \"dataset.character_list_file\": CHAR_LIST,\n    \"evaluate.test_dataset_dir\": EVAL_IMAGES,\n    \"evaluate.test_dataset_gt_file\": EVAL_GT,\n}\n```\n\n**export (mandatory data sources):**\n```python\n{\n    \"export.checkpoint\": \"\u003Cselected train\u002FAutoML checkpoint>\",\n    \"export.onnx_file\": \"\u003Coutput ONNX path>\",\n    \"dataset.character_list_file\": CHAR_LIST,\n}\n```\n\n**inference (mandatory data sources):**\n```python\n{\n    \"inference.checkpoint\": \"\u003Cselected train\u002FAutoML checkpoint>\",\n    \"dataset.character_list_file\": CHAR_LIST,\n    \"inference.inference_dataset_dir\": EVAL_IMAGES,\n}\n```\n\n**prune (mandatory data sources):**\n```python\n{\n    \"prune.checkpoint\": \"\u003Cselected train\u002FAutoML checkpoint>\",\n    \"prune.pruned_file\": \"\u003Coutput pruned PTH path>\",\n    \"dataset.character_list_file\": CHAR_LIST,\n}\n```\n\n**quantize (mandatory data sources):**\n```python\n{\n    \"dataset.train_dataset_dir\": [TRAIN_LMDB],\n    \"dataset.val_dataset_dir\": EVAL_LMDB,\n    \"dataset.character_list_file\": CHAR_LIST,\n    \"dataset.quant_calibration_dataset.images_dir\": TRAIN_IMAGES,\n    \"quantize.model_path\": \"\u003Cselected train\u002FAutoML checkpoint>\",\n}\n```\n\n**retrain (mandatory data sources):**\n```python\n{\n    \"dataset.train_dataset_dir\": [TRAIN_LMDB],\n    \"dataset.val_dataset_dir\": EVAL_LMDB,\n    \"dataset.character_list_file\": CHAR_LIST,\n    \"model.pruned_graph_path\": \"\u003Cselected prune output>\",\n}\n```\n## Eval Dataset\n\nOptional. Test data provided as separate tarball.\n\n## Important Parameters\n\n- **dataset.character_list_file**: Path to character list defining the supported character set. This determines the output vocabulary size.\n- **model.backbone**: Default ResNet.\n- **model.prediction**: Decoder type. CTC or Attn (attention-based).\n- **train.optim.lr**: Learning rate. Default 1.0 (Adadelta optimizer). High default is specific to Adadelta.\n- **dataset.batch_size**: Per-GPU batch size. Default 16.\n\n## Multi-GPU \u002F Multi-Node\n\n**Launch method:** Lightning-managed (single `python` process, Lightning spawns workers).\n\n| Spec Key | Description | Default |\n|----------|-------------|---------|\n| `train.num_gpus` | Number of GPUs | 1 |\n| `train.gpu_ids` | GPU device indices | [0] |\n| `train.distributed_strategy` | Strategy name | `auto` |\n\n- Strategy: `auto` for single-GPU, reads `train.distributed_strategy` from config when multi-GPU\n- No explicit `num_nodes` in train script — single-node oriented\n- Lightweight model, single GPU typically sufficient\n\n## Hardware\n\nMinimum 1 GPU(s), recommended 1 GPU(s). 8GB+ VRAM per GPU. OCR text recognition is lightweight. Single GPU is typically sufficient.\n\n## Error Patterns\n\n**dataset_convert required**: If using raw images + gt files, run dataset_convert first to produce LMDB format.\n\n**dataset_convert output folder**: Direct `ocrnet dataset_convert` writes `data.mdb` and `lock.mdb` directly under `dataset_convert.results_dir`. Use that folder itself for `dataset.train_dataset_dir`, `dataset.val_dataset_dir`, quantize, and retrain inputs. SDK-backed runs may wrap the same LMDB folder inside job artifact directories; resolve the actual folder containing `data.mdb` and `lock.mdb`.\n\n**GT file BOM**: Some text-recognition GT files can start with a UTF-8 BOM on the first filename. If dataset conversion logs a missing path with an invisible prefix before the first image name, strip the BOM from a local copy of the GT file before conversion or evaluation.\n\n**Character list mismatch**: All characters in training data must be present in the character_list file.\n\n**Export\u002Fprune output fields required**: `export.onnx_file` and `prune.pruned_file` must be writable output paths. These are declared in `references\u002Fskill_info.yaml` so SDK-backed model runs can create the paths automatically.\n\n**TensorRT lives in deploy**: The PyT OCRNet CLI exposes `dataset_convert`, `evaluate`, `export`, `inference`, `prune`, `quantize`, and `train`, but not `gen_trt_engine`. Use `references\u002Ftao-deploy-ocrnet.md` and `deploy\u002Fskill_info.yaml` for TensorRT engine generation and TensorRT-backed evaluate\u002Finference.\n\n## Spec Param \u002F Parent Model Inference\n\nModel-specific inference mappings belong in this MD file, not in `config.json`. Generated runners should read this section and apply the mappings with SDK helpers before `create_job()`. This mirrors the old microservices `infer_params.py` flow.\n\nInference mappings from TAO Core `ocrnet.config.json`:\n\n| Action | Spec Field | Inference Function | Meaning |\n|---|---|---|---|\n| dataset_convert | `results_dir` | `output_dir` | current job results directory |\n| evaluate | `encryption_key` | `key` | encryption key |\n| evaluate | `evaluate.checkpoint` | `parent_model` | model file inferred from the parent job results folder |\n| evaluate | `evaluate.trt_engine` | `parent_model` | model file inferred from the parent job results folder |\n| evaluate | `model.pruned_graph_path` | `pruned_model` | parent pruned model |\n| evaluate | `results_dir` | `output_dir` | current job results directory |\n| export | `encryption_key` | `key` | encryption key |\n| export | `export.checkpoint` | `parent_model` | model file inferred from the parent job results folder |\n| export | `export.onnx_file` | `create_onnx_file` | output ONNX path |\n| export | `results_dir` | `output_dir` | current job results directory |\n| deploy\u002Fgen_trt_engine | `encryption_key` | `key` | encryption key |\n| deploy\u002Fgen_trt_engine | `gen_trt_engine.onnx_file` | `parent_model` | ONNX file inferred from the parent export job results folder |\n| deploy\u002Fgen_trt_engine | `gen_trt_engine.tensorrt.calibration.cal_cache_file` | `create_cal_cache` | calibration cache path |\n| deploy\u002Fgen_trt_engine | `gen_trt_engine.trt_engine` | `create_engine_file` | output TensorRT engine path |\n| deploy\u002Fgen_trt_engine | `results_dir` | `output_dir` | current job results directory |\n| inference | `encryption_key` | `key` | encryption key |\n| inference | `inference.checkpoint` | `parent_model` | model file inferred from the parent job results folder |\n| inference | `inference.trt_engine` | `parent_model` | model file inferred from the parent job results folder |\n| inference | `model.pruned_graph_path` | `pruned_model` | parent pruned model |\n| inference | `results_dir` | `output_dir` | current job results directory |\n| prune | `encryption_key` | `key` | encryption key |\n| prune | `prune.checkpoint` | `parent_model` | model file inferred from the parent job results folder |\n| prune | `prune.pruned_file` | `create_pth_file` | output PTH path |\n| prune | `results_dir` | `output_dir` | current job results directory |\n| quantize | `encryption_key` | `key` | encryption key |\n| quantize | `quantize.model_path` | `parent_model` | model file inferred from the parent job results folder |\n| quantize | `results_dir` | `output_dir` | current job results directory |\n| retrain | `encryption_key` | `key` | encryption key |\n| retrain | `model.pruned_graph_path` | `parent_model` | model file inferred from the parent job results folder |\n| retrain | `results_dir` | `output_dir` | current job results directory |\n| train | `encryption_key` | `key` | encryption key |\n| train | `results_dir` | `output_dir` | current job results directory |\n| train | `train.pretrained_model_path` | `ptm_if_no_resume_model` | PTM when no resume checkpoint exists |\n| train | `train.resume_training_checkpoint_path` | `resume_model` | model file inferred from the current job results folder |\n\nFor `parent_model` or `parent_model_folder`, pass the upstream train\u002Fexport\u002FAutoML child job id as `parent_job_id`. The SDK lists the parent result folder, filters checkpoint artifacts, and returns the selected model file or folder. Do not add these mappings back to `config.json` and do not patch generated runner scripts to guess checkpoint paths.\n\n## Deployment\n\n- [tao-deploy-ocrnet](references\u002Ftao-deploy-ocrnet.md)\n","# OCRNet\n\nOCRNet for scene text recognition. Recognizes text content from cropped text region images. Supports CTC and attention-based decoders.\n\nSet train.pretrained_model_path for pretrained OCR weights.\n\nFor TAO Deploy TensorRT actions (`gen_trt_engine`, TensorRT `evaluate`, and TensorRT `inference`), read `references\u002Ftao-deploy-ocrnet.md` first. Deploy spec templates live in this skill's `references\u002F` folder with the `spec_template_deploy_*.yaml` prefix.\n\n## Dataclass Schemas\n\nGenerated TAO Core schemas are packaged in `schemas\u002F\u003Caction>.schema.json`, with `schemas\u002Fmanifest.json` listing available actions. Each generated schema also emits `references\u002Fspec_template_\u003Caction>.yaml` from the schema top-level `default` field. AutoML enablement is declared at the model layer in `references\u002Fskill_info.yaml` via `automl_enabled`. Runnable AutoML still requires `schemas\u002Ftrain.schema.json` and `references\u002Fspec_template_train.yaml` to exist and parse. Use the packaged train schema for `automl_default_parameters`, `automl_disabled_parameters`, defaults, min\u002Fmax bounds, enums, option weights, math conditions, dependencies, and popular parameters. Do not expect `~\u002Ftao-core` at runtime; maintainers regenerate schemas\u002Ftemplates before packaging the skill bank.\n\n## Train Action Policy\n\nThis model is AutoML-enabled at the model layer. Before handling any train-stage request, read `references\u002Fskill_info.yaml` and resolve the run override from either an explicit `automl_policy` value or the user's workflow request. Use `automl_policy: on` by default and only expose `on` \u002F `off` in new launch prompts. Treat phrases like \"turn off AutoML\", \"disable AutoML\", \"no HPO\", or \"plain training\" as `automl_policy: off` for this run only. When `automl_policy: on`, `automl_enabled: true`, and both `schemas\u002Ftrain.schema.json` and `references\u002Fspec_template_train.yaml` are packaged, route the train action through `tao-skill-bank:tao-run-automl` by default with this model's `skill_dir`. Preserve workflow\u002Fapplication overrides for datasets, specs, output directories, GPU\u002Fplatform settings, parent checkpoints, and `automl_policy`. Use direct model training only when `automl_policy: off` or the packaged train schema\u002Ftemplate is missing; in the missing-schema case, report that AutoML is enabled but not runnable for this model until schemas are generated.\n\nNon-train actions such as `evaluate`, `inference`, `export`, and deploy flows stay in this model skill. The per-run `automl_policy` override does not change model metadata.\n\n## Training Requirements\n\n- **Dataset type:** ocrnet\n- **Formats:** default\n- **Monitoring metric:** val_acc_1\n\n### Per-Action Dataset Requirements\n\n| Action | Spec Key | Source | Files | List? |\n|---|---|---|---|---|\n| dataset_convert | dataset_convert.input_img_dir | train_datasets or eval_dataset | extracted folder containing cropped text images | No |\n| dataset_convert | dataset_convert.gt_file | train_datasets or eval_dataset | train\u002Fgt_new.txt or test\u002Fgt_new.txt | No |\n| evaluate | dataset.character_list_file | eval_dataset | character_list | No |\n| evaluate | evaluate.test_dataset_dir | eval_dataset | extracted test image folder | No |\n| evaluate | evaluate.test_dataset_gt_file | eval_dataset | test\u002Fgt_new.txt | No |\n| evaluate | evaluate.checkpoint | parent train\u002FAutoML job | best_accuracy.pth or exact requested epoch checkpoint | No |\n| export | dataset.character_list_file | eval_dataset | character_list | No |\n| export | export.checkpoint | parent train\u002FAutoML job | best_accuracy.pth or exact requested epoch checkpoint | No |\n| deploy\u002Fgen_trt_engine | gen_trt_engine.tensorrt.calibration.cal_image_dir | calibration_dataset | extracted calibration image folder for INT8 calibration | Yes |\n| deploy\u002Fgen_trt_engine | gen_trt_engine.onnx_file | parent export job | exported .onnx artifact | No |\n| deploy\u002Fgen_trt_engine | dataset.character_list_file | eval_dataset | character_list | No |\n| inference | dataset.character_list_file | eval_dataset | character_list | No |\n| inference | inference.inference_dataset_dir | inference_dataset | extracted inference image folder | No |\n| inference | inference.checkpoint | parent train\u002FAutoML job | best_accuracy.pth or exact requested epoch checkpoint | No |\n| prune | dataset.character_list_file | eval_dataset | character_list | No |\n| prune | prune.checkpoint | parent train\u002FAutoML job | best_accuracy.pth or exact requested epoch checkpoint | No |\n| quantize | dataset.train_dataset_dir | dataset_convert train job | LMDB folder containing data.mdb and lock.mdb | Yes |\n| quantize | dataset.val_dataset_dir | dataset_convert eval job | LMDB folder containing data.mdb and lock.mdb | No |\n| quantize | dataset.character_list_file | eval_dataset | character_list | No |\n| quantize | dataset.quant_calibration_dataset.images_dir | train_datasets | extracted calibration image folder | No |\n| quantize | quantize.model_path | parent train\u002FAutoML job | checkpoint selected by resolver | No |\n| retrain | dataset.train_dataset_dir | dataset_convert train job | LMDB folder containing data.mdb and lock.mdb | Yes |\n| retrain | dataset.val_dataset_dir | dataset_convert eval job | LMDB folder containing data.mdb and lock.mdb | No |\n| retrain | dataset.character_list_file | eval_dataset | character_list | No |\n| retrain | model.pruned_graph_path | parent prune job | pruned .pth artifact | No |\n| train | dataset.train_dataset_dir | dataset_convert train job | LMDB folder containing data.mdb and lock.mdb | Yes |\n| train | dataset.train_gt_file | train_datasets | train\u002Fgt_new.txt when using raw folders instead of LMDB | No |\n| train | dataset.val_dataset_dir | dataset_convert eval job | LMDB folder containing data.mdb and lock.mdb | No |\n| train | dataset.val_gt_file | eval_dataset | test\u002Fgt_new.txt when using raw folders instead of LMDB | No |\n| train | dataset.character_list_file | eval_dataset | character_list | No |\n\n### Checkpoint Selection\n\nOCRNet training writes both `best_accuracy.pth` and epoch-step checkpoints such as `model_epoch_000_step_00003.pth`. Use the SDK\u002Fmodel checkpoint resolver through the `spec_params` mappings in `references\u002Fskill_info.yaml`; do not guess by sorting for the newest `.pth`.\n\n- Use `best_accuracy.pth` for best-checkpoint `evaluate`, `inference`, `export`, and `prune` requests.\n- Use the exact requested `model_epoch_*_step_*.pth` for epoch\u002Fstep-specific actions.\n- Use `train.resume_training_checkpoint_path` only for resume training, and use `model.pruned_graph_path` for retrain from a prune output. OCRNet does not expose a separate `ocrnet retrain` CLI subtask in the PyT image; the model-skill `retrain` action routes through `ocrnet train -e` with the pruned graph path set.\n- OCRNet `quantize` loads the model through PyTorch. For trusted checkpoints created by the same local run, set `TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD=1` if PyTorch 2.6+ rejects the checkpoint as a weights-only load.\n\n### Typical Spec Overrides\n\nData source overrides are **mandatory for every action**. Run `dataset_convert` separately for train and validation splits, then pass the LMDB folders that directly contain `data.mdb` and `lock.mdb` into train, quantize, and retrain. Tarballs from remote storage must be extracted before they are used as image directories.\n\n```python\nTRAIN_IMAGES = \"\u003Cextracted train image folder>\"\nTRAIN_GT = \"\u003Ctrain gt_new.txt>\"\nEVAL_IMAGES = \"\u003Cextracted eval image folder>\"\nEVAL_GT = \"\u003Ceval gt_new.txt>\"\nTRAIN_LMDB = \"\u003Ctrain dataset_convert results_dir>\"\nEVAL_LMDB = \"\u003Ceval dataset_convert results_dir>\"\nCHAR_LIST = \"\u003Ccharacter_list>\"\n```\n\n**dataset_convert (run once per split):**\n```python\n{\n    \"dataset_convert.input_img_dir\": TRAIN_IMAGES,\n    \"dataset_convert.gt_file\": TRAIN_GT,\n}\n```\n\n**train (mandatory data sources):**\n```python\n{\n    \"train.num_epochs\": 30,\n    \"train.checkpoint_interval\": 10,\n    \"train.validation_interval\": 10,\n    \"train.num_gpus\": 1,\n    \"dataset.batch_size\": 16,\n    \"dataset.train_dataset_dir\": [TRAIN_LMDB],\n    \"dataset.val_dataset_dir\": EVAL_LMDB,\n    \"dataset.train_gt_file\": \"\",\n    \"dataset.val_gt_file\": \"\",\n    \"dataset.character_list_file\": CHAR_LIST,\n}\n```\n\n**deploy\u002Fgen_trt_engine (mandatory data sources):**\n```python\n{\n    \"gen_trt_engine.onnx_file\": \"\u003Cselected export ONNX>\",\n    \"gen_trt_engine.trt_engine\": \"\u003Coutput engine path>\",\n    \"gen_trt_engine.tensorrt.calibration.cal_cache_file\": \"\u003Coutput calibration cache path>\",\n    \"gen_trt_engine.tensorrt.data_type\": \"fp16\",\n    \"gen_trt_engine.tensorrt.calibration.cal_image_dir\": [TRAIN_IMAGES],\n    \"dataset.character_list_file\": CHAR_LIST,\n}\n```\n\n**evaluate (mandatory data sources):**\n```python\n{\n    \"evaluate.checkpoint\": \"\u003Cselected train\u002FAutoML checkpoint>\",\n    \"dataset.character_list_file\": CHAR_LIST,\n    \"evaluate.test_dataset_dir\": EVAL_IMAGES,\n    \"evaluate.test_dataset_gt_file\": EVAL_GT,\n}\n```\n\n**export (mandatory data sources):**\n```python\n{\n    \"export.checkpoint\": \"\u003Cselected train\u002FAutoML checkpoint>\",\n    \"export.onnx_file\": \"\u003Coutput ONNX path>\",\n    \"dataset.character_list_file\": CHAR_LIST,\n}\n```\n\n**inference (mandatory data sources):**\n```python\n{\n    \"inference.checkpoint\": \"\u003Cselected train\u002FAutoML checkpoint>\",\n    \"dataset.character_list_file\": CHAR_LIST,\n    \"inference.inference_dataset_dir\": EVAL_IMAGES,\n}\n```\n\n**prune (mandatory data sources):**\n```python\n{\n    \"prune.checkpoint\": \"\u003Cselected train\u002FAutoML checkpoint>\",\n    \"prune.pruned_file\": \"\u003Coutput pruned PTH path>\",\n    \"dataset.character_list_file\": CHAR_LIST,\n}\n```\n\n**quantize (mandatory data sources):**\n```python\n{\n    \"dataset.train_dataset_dir\": [TRAIN_LMDB],\n    \"dataset.val_dataset_dir\": EVAL_LMDB,\n    \"dataset.character_list_file\": CHAR_LIST,\n    \"dataset.quant_calibration_dataset.images_dir\": TRAIN_IMAGES,\n    \"quantize.model_path\": \"\u003Cselected train\u002FAutoML checkpoint>\",\n}\n```\n\n**retrain (mandatory data sources):**\n```python\n{\n    \"dataset.train_dataset_dir\": [TRAIN_LMDB],\n    \"dataset.val_dataset_dir\": EVAL_LMDB,\n    \"dataset.character_list_file\": CHAR_LIST,\n    \"model.pruned_graph_path\": \"\u003Cselected prune output>\",\n}\n```\n## Eval Dataset\n\nOptional. Test data provided as separate tarball.\n\n## Important Parameters\n\n- **dataset.character_list_file**: Path to character list defining the supported character set. This determines the output vocabulary size.\n- **model.backbone**: Default ResNet.\n- **model.prediction**: Decoder type. CTC or Attn (attention-based).\n- **train.optim.lr**: Learning rate. Default 1.0 (Adadelta optimizer). High default is specific to Adadelta.\n- **dataset.batch_size**: Per-GPU batch size. Default 16.\n\n## Multi-GPU \u002F Multi-Node\n\n**Launch method:** Lightning-managed (single `python` process, Lightning spawns workers).\n\n| Spec Key | Description | Default |\n|----------|-------------|---------|\n| `train.num_gpus` | Number of GPUs | 1 |\n| `train.gpu_ids` | GPU device indices | [0] |\n| `train.distributed_strategy` | Strategy name | `auto` |\n\n- Strategy: `auto` for single-GPU, reads `train.distributed_strategy` from config when multi-GPU\n- No explicit `num_nodes` in train script — single-node oriented\n- Lightweight model, single GPU typically sufficient\n\n## Hardware\n\nMinimum 1 GPU(s), recommended 1 GPU(s). 8GB+ VRAM per GPU. OCR text recognition is lightweight. Single GPU is typically sufficient.\n\n## Error Patterns\n\n**dataset_convert required**: If using raw images + gt files, run dataset_convert first to produce LMDB format.\n\n**dataset_convert output folder**: Direct `ocrnet dataset_convert` writes `data.mdb` and `lock.mdb` directly under `dataset_convert.results_dir`. Use that folder itself for `dataset.train_dataset_dir`, `dataset.val_dataset_dir`, quantize, and retrain inputs. SDK-backed runs may wrap the same LMDB folder inside job artifact directories; resolve the actual folder containing `data.mdb` and `lock.mdb`.\n\n**GT file BOM**: Some text-recognition GT files can start with a UTF-8 BOM on the first filename. If dataset conversion logs a missing path with an invisible prefix before the first image name, strip the BOM from a local copy of the GT file before conversion or evaluation.\n\n**Character list mismatch**: All characters in training data must be present in the character_list file.\n\n**Export\u002Fprune output fields required**: `export.onnx_file` and `prune.pruned_file` must be writable output paths. These are declared in `references\u002Fskill_info.yaml` so SDK-backed model runs can create the paths automatically.\n\n**TensorRT lives in deploy**: The PyT OCRNet CLI exposes `dataset_convert`, `evaluate`, `export`, `inference`, `prune`, `quantize`, and `train`, but not `gen_trt_engine`. Use `references\u002Ftao-deploy-ocrnet.md` and `deploy\u002Fskill_info.yaml` for TensorRT engine generation and TensorRT-backed evaluate\u002Finference.\n\n## Spec Param \u002F Parent Model Inference\n\nModel-specific inference mappings belong in this MD file, not in `config.json`. Generated runners should read this section and apply the mappings with SDK helpers before `create_job()`. This mirrors the old microservices `infer_params.py` flow.\n\nInference mappings from TAO Core `ocrnet.config.json`:\n\n| Action | Spec Field | Inference Function | Meaning |\n|---|---|---|---|\n| dataset_convert | `results_dir` | `output_dir` | current job results directory |\n| evaluate | `encryption_key` | `key` | encryption key |\n| evaluate | `evaluate.checkpoint` | `parent_model` | model file inferred from the parent job results folder |\n| evaluate | `evaluate.trt_engine` | `parent_model` | model file inferred from the parent job results folder |\n| evaluate | `model.pruned_graph_path` | `pruned_model` | parent pruned model |\n| evaluate | `results_dir` | `output_dir` | current job results directory |\n| export | `encryption_key` | `key` | encryption key |\n| export | `export.checkpoint` | `parent_model` | model file inferred from the parent job results folder |\n| export | `export.onnx_file` | `create_onnx_file` | output ONNX path |\n| export | `results_dir` | `output_dir` | current job results directory |\n| deploy\u002Fgen_trt_engine | `encryption_key` | `key` | encryption key |\n| deploy\u002Fgen_trt_engine | `gen_trt_engine.onnx_file` | `parent_model` | ONNX file inferred from the parent export job results folder |\n| deploy\u002Fgen_trt_engine | `gen_trt_engine.tensorrt.calibration.cal_cache_file` | `create_cal_cache` | calibration cache path |\n| deploy\u002Fgen_trt_engine | `gen_trt_engine.trt_engine` | `create_engine_file` | output TensorRT engine path |\n| deploy\u002Fgen_trt_engine | `results_dir` | `output_dir` | current job results directory |\n| inference | `encryption_key` | `key` | encryption key |\n| inference | `inference.checkpoint` | `parent_model` | model file inferred from the parent job results folder |\n| inference | `inference.trt_engine` | `parent_model` | model file inferred from the parent job results folder |\n| inference | `model.pruned_graph_path` | `pruned_model` | parent pruned model |\n| inference | `results_dir` | `output_dir` | current job results directory |\n| prune | `encryption_key` | `key` | encryption key |\n| prune | `prune.checkpoint` | `parent_model` | model file inferred from the parent job results folder |\n| prune | `prune.pruned_file` | `create_pth_file` | output PTH path |\n| prune | `results_dir` | `output_dir` | current job results directory |\n| quantize | `encryption_key` | `key` | encryption key |\n| quantize | `quantize.model_path` | `parent_model` | model file inferred from the parent job results folder |\n| quantize | `results_dir` | `output_dir` | current job results directory |\n| retrain | `encryption_key` | `key` | encryption key |\n| retrain | `model.pruned_graph_path` | `parent_model` | model file inferred from the parent job results folder |\n| retrain | `results_dir` | `output_dir` | current job results directory |\n| train | `encryption_key` | `key` | encryption key |\n| train | `results_dir` | `output_dir` | current job results directory |\n| train | `train.pretrained_model_path` | `ptm_if_no_resume_model` | PTM when no resume checkpoint exists |\n| train | `train.resume_training_checkpoint_path` | `resume_model` | model file inferred from the current job results folder |\n\nFor `parent_model` or `parent_model_folder`, pass the upstream train\u002Fexport\u002FAutoML child job id as `parent_job_id`. The SDK lists the parent result folder, filters checkpoint artifacts, and returns the selected model file or folder. Do not add these mappings back to `config.json` and do not patch generated runner scripts to guess checkpoint paths.\n\n## Deployment\n\n- [tao-deploy-ocrnet](references\u002Ftao-deploy-ocrnet.md)\n",{"name":5,"tags":44,"license":15,"metadata":46,"description":7,"allowed-tools":49,"compatibility":50},[23,45],"recognition",{"author":47,"version":48},"NVIDIA Corporation","0.1.0","Read Bash","Requires docker + nvidia-container-toolkit.","claude\u002Finstall-gsd-build-foQdV","d86cd127f527124b5fd0fd0bc679a4d79b7d01d7",".agents\u002Fskills\u002Ftao-train-ocrnet","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik","https:\u002F\u002Fnorvik-orpin.vercel.app","https:\u002F\u002Fgithub.com\u002Fpattanation","2026-07-17 11:17:04",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add pattanation\u002FNorvik --skill tao-train-ocrnet",{"tool":64,"command":65},"bunx","bunx skills add pattanation\u002FNorvik --skill tao-train-ocrnet",{"tool":67,"command":68},"pnpm","pnpm dlx skills add pattanation\u002FNorvik --skill tao-train-ocrnet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002FSKILL.md",true,[72,78,82,86,90,94,98,102,106,110,114,118,121,124,128,132,136,140,144,148,152,156,160,164,168,172,176],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"BENCHMARK.md","REFERENCE","参考文档",4040,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002FBENCHMARK.md",{"path":79,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":80,"sourceHtmlUrl":81},"evals\u002Fevals.json",762,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fevals\u002Fevals.json",{"path":83,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":84,"sourceHtmlUrl":85},"references\u002Fskill_info.yaml",8357,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Fskill_info.yaml",{"path":87,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":88,"sourceHtmlUrl":89},"references\u002Fspec_template_dataset_convert.yaml",1817,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Fspec_template_dataset_convert.yaml",{"path":91,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Fspec_template_deploy_experiment.yaml",2950,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Fspec_template_deploy_experiment.yaml",{"path":95,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fspec_template_evaluate.yaml",1960,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Fspec_template_evaluate.yaml",{"path":99,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":100,"sourceHtmlUrl":101},"references\u002Fspec_template_export.yaml",1818,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Fspec_template_export.yaml",{"path":103,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":104,"sourceHtmlUrl":105},"references\u002Fspec_template_gen_trt_engine.yaml",2141,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Fspec_template_gen_trt_engine.yaml",{"path":107,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":108,"sourceHtmlUrl":109},"references\u002Fspec_template_inference.yaml",1939,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Fspec_template_inference.yaml",{"path":111,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":112,"sourceHtmlUrl":113},"references\u002Fspec_template_prune.yaml",1912,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Fspec_template_prune.yaml",{"path":115,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":116,"sourceHtmlUrl":117},"references\u002Fspec_template_quantize.yaml",1746,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Fspec_template_quantize.yaml",{"path":119,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":116,"sourceHtmlUrl":120},"references\u002Fspec_template_retrain.yaml","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Fspec_template_retrain.yaml",{"path":122,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":116,"sourceHtmlUrl":123},"references\u002Fspec_template_train.yaml","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Fspec_template_train.yaml",{"path":125,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":126,"sourceHtmlUrl":127},"references\u002Ftao-deploy-ocrnet.md",5452,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Ftao-deploy-ocrnet.md",{"path":129,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":130,"sourceHtmlUrl":131},"references\u002Ftao-deploy-ocrnet.skill_info.yaml",4085,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Freferences\u002Ftao-deploy-ocrnet.skill_info.yaml",{"path":133,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":134,"sourceHtmlUrl":135},"schemas\u002Fdataset_convert.schema.json",29632,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fschemas\u002Fdataset_convert.schema.json",{"path":137,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":138,"sourceHtmlUrl":139},"schemas\u002Fevaluate.schema.json",32095,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fschemas\u002Fevaluate.schema.json",{"path":141,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":142,"sourceHtmlUrl":143},"schemas\u002Fexport.schema.json",29707,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fschemas\u002Fexport.schema.json",{"path":145,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":146,"sourceHtmlUrl":147},"schemas\u002Fgen_trt_engine.schema.json",37154,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fschemas\u002Fgen_trt_engine.schema.json",{"path":149,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":150,"sourceHtmlUrl":151},"schemas\u002Finference.schema.json",31868,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fschemas\u002Finference.schema.json",{"path":153,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":154,"sourceHtmlUrl":155},"schemas\u002Fmanifest.json",20327,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fschemas\u002Fmanifest.json",{"path":157,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":158,"sourceHtmlUrl":159},"schemas\u002Fprune.schema.json",31670,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fschemas\u002Fprune.schema.json",{"path":161,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":162,"sourceHtmlUrl":163},"schemas\u002Fquantize.schema.json",28711,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fschemas\u002Fquantize.schema.json",{"path":165,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":166,"sourceHtmlUrl":167},"schemas\u002Fretrain.schema.json",28709,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fschemas\u002Fretrain.schema.json",{"path":169,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":170,"sourceHtmlUrl":171},"schemas\u002Ftrain.schema.json",28705,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fschemas\u002Ftrain.schema.json",{"path":173,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":174,"sourceHtmlUrl":175},"skill-card.md",3770,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fskill-card.md",{"path":177,"resourceType":178,"resourceTypeDesc":179,"sizeBytes":180,"sourceHtmlUrl":181},"skill.oms.sig","OTHER","其他",10309,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Ftao-train-ocrnet\u002Fskill.oms.sig",[183,214,239,263,285,300],{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":187,"sourceHtmlUrl":188,"categories":189,"keywords":198,"publishedAt":39},"01M71QDV4DM8T19HEHWATEF1K4","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FSKILL.md",[190,195],{"categoryNo":191,"categoryName":192,"taxonomyType":193,"taxonomyTypeDesc":194},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":196,"categoryName":197,"taxonomyType":193,"taxonomyTypeDesc":194},"01JBSEEDCAT000000000000009","前端开发",[199,200,201,32,202,203,204,205,24,206,207,208,209,210,211,212,213],"webapp","testing","webapp testing","applications","local","frontend","debugging","logs","browser","with","playwright","web","behavior","ui","screenshots",{"skillNo":215,"name":216,"nameZh":6,"description":217,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":218,"sourceHtmlUrl":219,"categories":220,"keywords":222,"publishedAt":39},"01M71QDH2GGMXGA9105C9W1N7B","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fweb-artifacts-builder\u002FSKILL.md",[221],{"categoryNo":196,"categoryName":197,"taxonomyType":193,"taxonomyTypeDesc":194},[223,224,225,210,226,227,228,32,229,230,204,231,27,232,233,234,235,236,237,238],"builder","artifacts builder","artifacts","web artifacts builder","single-file","css","Tailwind","ui components","single","file","components","react","multi","state","routing","state management",{"skillNo":240,"name":241,"nameZh":6,"description":242,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":243,"licenseFileUrl":244,"sourceHtmlUrl":245,"categories":246,"keywords":248,"publishedAt":39},"01M71QD9T2XC3EWMQNN9ACNWQ1","vueuse-functions","Apply VueUse composables where appropriate to build concise, maintainable Vue.js \u002F Nuxt features.","MIT","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvueuse-functions\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvueuse-functions\u002FSKILL.md",[247],{"categoryNo":196,"categoryName":197,"taxonomyType":193,"taxonomyTypeDesc":194},[249,250,251,252,253,254,255,256,257,258,259,260,261,262],"functions","vueuse","vueuse functions","project","nuxt","apply","github","concise","build","https","features","vue","js","composables",{"skillNo":264,"name":265,"nameZh":6,"description":266,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":243,"licenseFileUrl":267,"sourceHtmlUrl":268,"categories":269,"keywords":272,"publishedAt":39},"01M71QD51HWSGYMCMB7RW7PGK8","vue-testing-best-practices","Use for Vue.js testing. Covers Vitest, Vue Test Utils, component testing, mocking, testing patterns, and Playwright for E2E testing.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-testing-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-testing-best-practices\u002FSKILL.md",[270,271],{"categoryNo":191,"categoryName":192,"taxonomyType":193,"taxonomyTypeDesc":194},{"categoryNo":196,"categoryName":197,"taxonomyType":193,"taxonomyTypeDesc":194},[273,200,274,260,275,209,276,277,278,255,279,32,280,281,282,27,283,261,284],"vue testing best practices","testing best practices","best practices","test","testing patterns","component","vitest","mocking","e2e","utils","patterns","e2e testing",{"skillNo":286,"name":287,"nameZh":6,"description":288,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":243,"licenseFileUrl":289,"sourceHtmlUrl":290,"categories":291,"keywords":293,"publishedAt":39},"01M71QD358H2DJ9THJRBP77T3T","vue-router-best-practices","Vue Router 4 patterns, navigation guards, route params, and route-component lifecycle interactions.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-router-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-router-best-practices\u002FSKILL.md",[292],{"categoryNo":196,"categoryName":197,"taxonomyType":193,"taxonomyTypeDesc":194},[294,260,295,275,296,278,297,255,283,298,299],"router","vue router best practices","route","guards","navigation","lifecycle",{"skillNo":301,"name":302,"nameZh":6,"description":303,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":243,"licenseFileUrl":304,"sourceHtmlUrl":305,"categories":306,"keywords":308,"publishedAt":39},"01M71QCYPNWDE2MQZ1TF3ED5S4","vue-best-practices","MUST be used for Vue.js tasks. Strongly recommends Composition API with `\u003Cscript setup>` and TypeScript as the standard approach. Covers Vue 3, SSR, Volar, vue-tsc. Load for any Vue, .vue files, Vue Router, Pinia, or Vite with Vue work. ALWAYS use Composition API unless the project explicitly requires Options API.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-best-practices\u002FSKILL.md",[307],{"categoryNo":196,"categoryName":197,"taxonomyType":193,"taxonomyTypeDesc":194},[309,260,275,310,252,311,312,313,294,314,315,316,317,318,319,32,320,27,321,322],"vue best practices","Composition","files","tasks","api","pinia","work","options","ssr","typescript","as","vite","load","standard"]