[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M78XHJZX279Z1MA96STC22JS":3,"skill-same:01M78XHJZX279Z1MA96STC22JS":66},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":26,"commitSha":27,"skillDirectory":28,"forksCount":29,"repositoryHtmlUrl":30,"repositoryHomepageUrl":6,"ownerHtmlUrl":31,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":32,"install":33,"resources":45},"01M78XHJZX279Z1MA96STC22JS","classical-image-ops",null,"Route deterministic, CPU-safe guidance for classical GIMP-ML image operations, drawable-to-array validation, clustering, palette behavior, and result-layer handling.","VectorSpaceLab\u002FAREX-Skill","VectorSpaceLab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F180637102?v=4","01M7538C5WPSJGWF7KHR4EFZ9F","01M7538C6R2GFP53NPXTCZNBRT",351,"MIT","https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Frepositories\u002Frepo-skills\u002Fgimp-ml\u002Fsub-skills\u002Fclassical-image-ops\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: classical-image-ops\ndescription: \"Route deterministic, CPU-safe guidance for classical GIMP-ML image\n  operations, drawable-to-array validation, clustering, palette behavior, and\n  result-layer handling.\"\ndisable-model-invocation: true\nmetadata:\n  disco-role: operating\nlicense: MIT\n---\n\n# Classical image operations\n\nUse this sub-skill for small, non-neural image transformations in GIMP-ML:\ninversion, K-means segmentation, palette behavior, and the NumPy\u002FGIMP layer\nboundary. It is useful both for a novice who needs a safe preflight checklist\nand for an expert diagnosing shape, channel, or result-layer mismatches.\n\n## Scope and boundary\n\n- **In scope:** current drawable\u002Flayer selection, byte-array conversion,\n  image-size checks, RGB\u002FRGBA handling, K-means arguments, palette facts, and\n  result-layer conventions.\n- **CPU-safe helper reasoning:** NumPy array inspection, shape checks, byte-range\n  checks, and pure-array reasoning do not need a model, network, service, or GPU.\n- **Out of scope:** neural plug-ins, training, GIMP installation, remote APIs,\n  model weights, and changes to the live router or service.\n- **GIMP boundary:** the plug-ins use the legacy `gimpfu`\u002FPDB interface. GIMP and\n  Python 2 are unavailable for the verified host, so a live menu invocation,\n  PDB mutation, and pixel-region write are not verified here.\n  Treat those steps as static-only until tested in a compatible GIMP runtime.\n\n## Choose a route\n\n1. **Validate an input first.** For an `.npy` or image file, run the bundled\n   adapted helper; it only reads and reports, and does not write by default.\n   See [the workflow](references\u002Fworkflows.md#array-preflight).\n2. **Invert a selected drawable.** Use the plug-in's `Invert` registration only\n   when in-place mutation and an undo group are acceptable. The source operation\n   calls the PDB invert procedure on the selected layer; it is not a verified\n   `createResultLayer` operation. Preserve this exception rather than claiming\n   that it creates a new layer.\n3. **Segment by color.** Select the source layer, confirm it is image-sized,\n   choose a positive cluster count, and decide whether `(x, y)` is a feature.\n   The K-means route is CPU-oriented but the source does not seed SciPy's\n   initialization, so do not promise reproducible labels without an explicit\n   deterministic wrapper.\n4. **Inspect palette behavior.** The repository's `colorpalette` plug-in loads\n   its bundled palette image, converts OpenCV BGR to RGB, and opens a separate\n   image named `palette`. It does not extract colors from the current drawable.\n5. **Need the exact contract?** Open [API reference](references\u002Fapi-reference.md)\n   before writing an adapter; open [troubleshooting](references\u002Ftroubleshooting.md)\n   when a run produces no layer, errors on shape, or exhausts memory.\n\n## Safe preflight\n\n- Confirm the intended image and active drawable. A drawable is the actual\n  pixel source; the image is the container into which result layers are added.\n- Ensure the selected layer has positive height and width and is the same size\n  as its image. Use GIMP's **Layer -> Layer to Image Size** before K-means when\n  the layer is cropped or offset.\n- For K-means, use RGB or RGBA data. RGBA is reduced to RGB by dropping alpha;\n  grayscale, indexed, two-channel, or unexpected multi-channel input is not a\n  supported K-means shape in the source implementation.\n- Check that `1 \u003C= clusters \u003C= height * width`. Small images cannot support a\n  large K; duplicate colors can also make a requested K ill-conditioned.\n- Estimate memory before flattening: K-means materializes one row per pixel and,\n  with position enabled, adds two feature columns. Reduce image size or K when\n  the array is too large for the available RAM.\n- Keep byte outputs in the inclusive `[0, 255]` range. The shared result helper\n  casts to `uint8`; clipping or validating before that cast avoids silent wrap.\n\n## Result conventions\n\nArray-producing plug-ins conventionally convert the result to `uint8` bytes,\ncreate a layer with the image width and height, write the full pixel region, add\nthe layer at stack position zero, and flush displays. The conventional name is\n`new_output`, but it is not a stable identifier. Verify the actual layer after a\nlive run rather than relying on a name.\n\nThe shared `channelData` pattern reads the entire drawable pixel region and\nreshapes its bytes as `(layer.height, layer.width, region.bpp)`. It preserves an\nalpha channel until the operation explicitly removes it. It does not repair\nlayer offsets or resample data. A result must have a byte layout compatible with\nits destination layer; mismatched dimensions or channel count can fail at the\npixel-region write.\n\n## Determinism and evidence labels\n\nThe array validation and conversion guidance is deterministic and CPU-safe. The\nK-means source calls SciPy `kmeans2` with its default initialization and no seed;\ncluster IDs and borderline assignments may vary. Coordinate features are raw\npixel indices, so enabling position changes the feature space, not just the\nrendering. The color-palette behavior is a static asset-display path, not a\nverified current-layer extraction algorithm.\n\nDo not infer live GIMP behavior from a successful NumPy\u002FPillow check. Do not\nassume CUDA, OpenCV model weights, OpenAI calls, or a running service are needed\nfor these classical routes. For source-derived details and failure handling,\nfollow the linked references.\n\n## Linked materials\n\n- [Workflows](references\u002Fworkflows.md) — novice and expert procedures,\n  array-to-layer contracts, and K-means memory guidance.\n- [API reference](references\u002Fapi-reference.md) — registrations, parameters,\n  helper contracts, supported shapes, and output semantics.\n- [Troubleshooting](references\u002Ftroubleshooting.md) — invalid channels,\n  layer-size mismatch, cluster failures, position-feature surprises, and\n  memory\u002Fshape errors.\n- [Bundled array validator](scripts\u002Fvalidate_image_array.py) — a read-only,\n  adapted helper with `--help`, explicit input, channel, range, dtype, and size\n  checks.\n","# Classical image operations\n\nUse this sub-skill for small, non-neural image transformations in GIMP-ML:\ninversion, K-means segmentation, palette behavior, and the NumPy\u002FGIMP layer\nboundary. It is useful both for a novice who needs a safe preflight checklist\nand for an expert diagnosing shape, channel, or result-layer mismatches.\n\n## Scope and boundary\n\n- **In scope:** current drawable\u002Flayer selection, byte-array conversion,\n  image-size checks, RGB\u002FRGBA handling, K-means arguments, palette facts, and\n  result-layer conventions.\n- **CPU-safe helper reasoning:** NumPy array inspection, shape checks, byte-range\n  checks, and pure-array reasoning do not need a model, network, service, or GPU.\n- **Out of scope:** neural plug-ins, training, GIMP installation, remote APIs,\n  model weights, and changes to the live router or service.\n- **GIMP boundary:** the plug-ins use the legacy `gimpfu`\u002FPDB interface. GIMP and\n  Python 2 are unavailable for the verified host, so a live menu invocation,\n  PDB mutation, and pixel-region write are not verified here.\n  Treat those steps as static-only until tested in a compatible GIMP runtime.\n\n## Choose a route\n\n1. **Validate an input first.** For an `.npy` or image file, run the bundled\n   adapted helper; it only reads and reports, and does not write by default.\n   See [the workflow](references\u002Fworkflows.md#array-preflight).\n2. **Invert a selected drawable.** Use the plug-in's `Invert` registration only\n   when in-place mutation and an undo group are acceptable. The source operation\n   calls the PDB invert procedure on the selected layer; it is not a verified\n   `createResultLayer` operation. Preserve this exception rather than claiming\n   that it creates a new layer.\n3. **Segment by color.** Select the source layer, confirm it is image-sized,\n   choose a positive cluster count, and decide whether `(x, y)` is a feature.\n   The K-means route is CPU-oriented but the source does not seed SciPy's\n   initialization, so do not promise reproducible labels without an explicit\n   deterministic wrapper.\n4. **Inspect palette behavior.** The repository's `colorpalette` plug-in loads\n   its bundled palette image, converts OpenCV BGR to RGB, and opens a separate\n   image named `palette`. It does not extract colors from the current drawable.\n5. **Need the exact contract?** Open [API reference](references\u002Fapi-reference.md)\n   before writing an adapter; open [troubleshooting](references\u002Ftroubleshooting.md)\n   when a run produces no layer, errors on shape, or exhausts memory.\n\n## Safe preflight\n\n- Confirm the intended image and active drawable. A drawable is the actual\n  pixel source; the image is the container into which result layers are added.\n- Ensure the selected layer has positive height and width and is the same size\n  as its image. Use GIMP's **Layer -> Layer to Image Size** before K-means when\n  the layer is cropped or offset.\n- For K-means, use RGB or RGBA data. RGBA is reduced to RGB by dropping alpha;\n  grayscale, indexed, two-channel, or unexpected multi-channel input is not a\n  supported K-means shape in the source implementation.\n- Check that `1 \u003C= clusters \u003C= height * width`. Small images cannot support a\n  large K; duplicate colors can also make a requested K ill-conditioned.\n- Estimate memory before flattening: K-means materializes one row per pixel and,\n  with position enabled, adds two feature columns. Reduce image size or K when\n  the array is too large for the available RAM.\n- Keep byte outputs in the inclusive `[0, 255]` range. The shared result helper\n  casts to `uint8`; clipping or validating before that cast avoids silent wrap.\n\n## Result conventions\n\nArray-producing plug-ins conventionally convert the result to `uint8` bytes,\ncreate a layer with the image width and height, write the full pixel region, add\nthe layer at stack position zero, and flush displays. The conventional name is\n`new_output`, but it is not a stable identifier. Verify the actual layer after a\nlive run rather than relying on a name.\n\nThe shared `channelData` pattern reads the entire drawable pixel region and\nreshapes its bytes as `(layer.height, layer.width, region.bpp)`. It preserves an\nalpha channel until the operation explicitly removes it. It does not repair\nlayer offsets or resample data. A result must have a byte layout compatible with\nits destination layer; mismatched dimensions or channel count can fail at the\npixel-region write.\n\n## Determinism and evidence labels\n\nThe array validation and conversion guidance is deterministic and CPU-safe. The\nK-means source calls SciPy `kmeans2` with its default initialization and no seed;\ncluster IDs and borderline assignments may vary. Coordinate features are raw\npixel indices, so enabling position changes the feature space, not just the\nrendering. The color-palette behavior is a static asset-display path, not a\nverified current-layer extraction algorithm.\n\nDo not infer live GIMP behavior from a successful NumPy\u002FPillow check. Do not\nassume CUDA, OpenCV model weights, OpenAI calls, or a running service are needed\nfor these classical routes. For source-derived details and failure handling,\nfollow the linked references.\n\n## Linked materials\n\n- [Workflows](references\u002Fworkflows.md) — novice and expert procedures,\n  array-to-layer contracts, and K-means memory guidance.\n- [API reference](references\u002Fapi-reference.md) — registrations, parameters,\n  helper contracts, supported shapes, and output semantics.\n- [Troubleshooting](references\u002Ftroubleshooting.md) — invalid channels,\n  layer-size mismatch, cluster failures, position-feature surprises, and\n  memory\u002Fshape errors.\n- [Bundled array validator](scripts\u002Fvalidate_image_array.py) — a read-only,\n  adapted helper with `--help`, explicit input, channel, range, dtype, and size\n  checks.\n",{"name":5,"license":14,"metadata":23,"description":7,"disable-model-invocation":25},{"disco-role":24},"operating",true,"main","ac3fe1afa80fb9a09775ecfb2b6cc3ba850a2db6","skills\u002Frepositories\u002Frepo-skills\u002Fgimp-ml\u002Fsub-skills\u002Fclassical-image-ops",27,"https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill","https:\u002F\u002Fgithub.com\u002FVectorSpaceLab","2026-09-03 10:25:21",{"source":8,"skillName":5,"commands":34,"prompt":44,"zipAvailable":25},[35,38,41],{"tool":36,"command":37},"npx","npx skills add VectorSpaceLab\u002FAREX-Skill --skill classical-image-ops",{"tool":39,"command":40},"bunx","bunx skills add VectorSpaceLab\u002FAREX-Skill --skill classical-image-ops",{"tool":42,"command":43},"pnpm","pnpm dlx skills add VectorSpaceLab\u002FAREX-Skill --skill classical-image-ops","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Frepositories\u002Frepo-skills\u002Fgimp-ml\u002Fsub-skills\u002Fclassical-image-ops\u002FSKILL.md",[46,52,56,60],{"path":47,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":50,"sourceHtmlUrl":51},"references\u002Fapi-reference.md","REFERENCE","参考文档",6214,"https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Frepositories\u002Frepo-skills\u002Fgimp-ml\u002Fsub-skills\u002Fclassical-image-ops\u002Freferences\u002Fapi-reference.md",{"path":53,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":54,"sourceHtmlUrl":55},"references\u002Ftroubleshooting.md",5527,"https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Frepositories\u002Frepo-skills\u002Fgimp-ml\u002Fsub-skills\u002Fclassical-image-ops\u002Freferences\u002Ftroubleshooting.md",{"path":57,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":58,"sourceHtmlUrl":59},"references\u002Fworkflows.md",5985,"https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Frepositories\u002Frepo-skills\u002Fgimp-ml\u002Fsub-skills\u002Fclassical-image-ops\u002Freferences\u002Fworkflows.md",{"path":61,"resourceType":62,"resourceTypeDesc":63,"sizeBytes":64,"sourceHtmlUrl":65},"scripts\u002Fvalidate_image_array.py","SCRIPT","脚本",8711,"https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Frepositories\u002Frepo-skills\u002Fgimp-ml\u002Fsub-skills\u002Fclassical-image-ops\u002Fscripts\u002Fvalidate_image_array.py",[67,75,82,89,96,103],{"skillNo":68,"name":69,"nameZh":6,"description":70,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":18},"01M799NYSH1R3RVAHSM2D88Y84","passnet-triton-opt","Make a single PassNet Triton kernel fast AND numerically faithful: performance model (when a replacement can win at all), block\u002Fgrid\u002Fwarp tuning, autotune policy, launch overhead, and per-op numeric recipes to pass the dtype baseline tolerances. Use when a pass matches and is correct but speedup below expected, or when correctness fails by small numeric margins.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Ftask-oriented\u002FPassNet\u002Fskills\u002Fpassnet-triton-opt\u002FSKILL.md",[],[],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":18},"01M799NS5APEC0N1FZ7XZVW6BN","passnet-solve","END-TO-END playbook for solving one PassNet sample: analyze the computation graphs, decide the optimization strategy (what to fuse, what to replace, what to leave alone), drive the iteration loop, and maximize the sample score. This is the ENTRY skill — invoke it first for any PassNet optimization task; it tells you when to use passnet-pattern-fusion, passnet-triton-opt and passnet-feedback.","https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Ftask-oriented\u002FPassNet\u002Fskills\u002Fpassnet-solve\u002FSKILL.md",[],[],{"skillNo":83,"name":84,"nameZh":6,"description":85,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":18},"01M799NNY9BKSM21V5R7QVTBJX","passnet-skill","PassNet GPU kernel optimization via compiler passes. Design and implement Triton-based optimization passes, create pass files under .\u002Fpass_dir\u002F, self-evaluate with pass_evaluator, and iterate to maximize GPU speedup.","https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Ftask-oriented\u002FPassNet\u002Fskills\u002Fpassnet-skill\u002FSKILL.md",[],[],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":95,"publishedAt":18},"01M799NHH6NP7Z1RK77KGXAN6S","passnet-pattern-fusion","Author PassNet pass files: write patterns that actually MATCH the FX graph, pick fusion regions (which ops to absorb into one Triton kernel), and structure multi-pass submissions with the mandatory shared-dispatch architecture. Use when creating or fixing pattern()\u002Freplacement_args()\u002Freplacement_func() files, when a pass \"failed to match\", or when deciding how to fuse multiple kernels\u002Fops.","https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Ftask-oriented\u002FPassNet\u002Fskills\u002Fpassnet-pattern-fusion\u002FSKILL.md",[],[],{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":18},"01M799ND2J4WNC2PGAZ0A06NDF","passnet-orchestrate","Round\u002Fbatch planning and decision support for PassNet graph optimization. Use for multi-sample triage, worker allocation, eval-budget policy, and post-eval keep\u002Frevert decisions. For solving one concrete sample end to end, use passnet-solve as the entry skill; consult this skill only when you need broader planning or a specific decision gate.","https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Ftask-oriented\u002FPassNet\u002Fskills\u002Fpassnet-orchestrate\u002FSKILL.md",[],[],{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":71,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":18},"01M799N8SBTMY02ZDG2AZF5ZWE","passnet-feedback","Fast, deterministic feedback for PassNet work: pre-flight pattern\u002Fmatch verification WITHOUT burning a GPU evaluation, per-node bottleneck analysis of a sample's graphs, and eval-log parsing into per-variant status + estimated score + failure classification. Use BEFORE every GPU evaluation (check_pattern), at the START of a sample (analyze_graph), and AFTER every evaluation (parse_eval_log).","https:\u002F\u002Fgithub.com\u002FVectorSpaceLab\u002FAREX-Skill\u002Fblob\u002Fmain\u002Fskills\u002Ftask-oriented\u002FPassNet\u002Fskills\u002Fpassnet-feedback\u002FSKILL.md",[],[]]