WB 条带灰度定量

SKILL效率
效率 未标注权限 许可证不明确
安装这个技能

Western blot 条带灰度定量,无需 ImageJ 即可离线运行,算法与 ImageJ Measure 命令逐项等价。支持单带、单泳道双带(1+2+1+2)、以及堆叠双框 co-IP 图(上目的 / 下内参)。输出每条带的 Mean、IntDen、Area、背景灰度与净强度 NetIntDen = bgMean x Area - IntDen,并按参考泳道归一化;另可计算各泳道为配平内参所需的上样体积。内置合成测试图生成器,可用已知比值自检验证安装。

一句话选型结论

按资料字段整理

WB 条带灰度定量是效率类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类效率 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_26bbdea0/wb-band-grayscale-quantification
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

效率
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_26bbdea0仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791718131
正文体量8.8 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
整理待办与日程

把零散任务收进清单,排出优先级。

批量处理重复任务

把固定动作做成模板,重复执行。

把流程写成清单

把口头流程整理成可复用的步骤。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在效率场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
WB 条带灰度定量当前 未标注权限 未标注 未标注 未标注 有
Nano PDF 文档 联网访问 ClawHub 市场 424.9 万 OpenClaw 有
自动更新程序 浏览器控制 ClawHub 市场 296.4 万 OpenClaw 有
Gemini 助手 联网访问 ClawHub 市场 254.7 万 OpenClaw 有
word DOCX 文档 联网访问 ClawHub 市场 239.6 万 OpenClaw 有
Excel XLSX 前端 联网访问 ClawHub 市场 227.0 万 OpenClaw 有

SKILL.md 全文

8.8 KB
模型实际读到的说明书原文,来自技能仓库

Western Blot Band Grayscale Quantification

Headless, reproducible densitometry for blot images. The math matches ImageJ's
Measure command exactly (Mean = Σ/N, IntDen = Σ,
NetIntDen = bgMean × Area − IntDen), so numbers can be compared against an
existing ImageJ protocol.

Convention: in a grayscale blot, darker = stronger signal. Therefore
Mean decreases with intensity (it is not the answer), and quantification
uses the background-corrected net density, which increases with intensity:

NetIntDen = bgMean × Area − IntDen          # larger = stronger band

Requirements

Python 3.8+ with numpy and Pillow:

python -m pip install numpy pillow

No ImageJ install is needed. Everything runs headless.

Pick the right script

Layout Script Notes
One band per lane scripts/measure_bands.py most common
1 or 2 bands per lane (1+2+1+2, isoforms, dimer+monomer) scripts/measure_multi_bands.py iterative minimum finder
2+ stacked blot frames in one image (co-IP) scripts/measure_stacked_blots.py auto-detects each frame
Equalize loading across lanes scripts/calc_loading_volume.py consumes the stacked CSV

Quick start

S=scripts                       # this skill's scripts/ directory

# 1. one band per lane  -> <base>.results.csv / .results.txt / .overlay.png
python $S/measure_bands.py blot.png --lanes 4

# 2. multi-band lanes
python $S/measure_multi_bands.py blot.png --lanes 4 --max-bands 2

# 3. co-IP: target frame on top, control frame below
python $S/measure_stacked_blots.py coip.png --lanes 5 \
       --target-name "IP: anti-flag" --control-name "IB: anti-actin"

# 4. how much should each lane be loaded to equalize actin?
python $S/calc_loading_volume.py coip.stacked.csv --ref-lane 1 --ref-vol 5

Every script supports --help, --version, --outdir DIR and --quiet.
Outputs default to sitting next to the input image.

Installation check / regression test

python $S/make_test_image.py --verify

This builds a synthetic 4-lane blot with known relative intensities
[1.00, 2.00, 0.50, 1.50] and checks the pipeline recovers them. The generated
image deliberately reproduces the three layout traps described below, so a pass
is a real check of the read path.

The three layouts

Single-band. Per lane: split the width into N equal lanes, take the row
that is darkest on average across the lane, and measure a densest ± band_half
ROI. That is the whole algorithm.

Multi-band. A lane with two bands defeats a single argmin. The script
instead iteratively takes the darkest remaining row, accepts it if its
prominence exceeds --prominence, then masks ± --min-dist rows around it and
repeats. --min-dist (default 15) is what stops one broad band from being
split into two false "shoulder" minima — raise it if you see doubled bands.

Stacked frames. One image, several perfectly separated blot frames. The
script finds the frames by detecting near-fully-black border rows (requiring
both a high dark fraction of the row and a long continuous dark run, since
a row of wide bands can rival a border's dark fraction), splits each frame into
lanes, and reports target / control normalized to lane 1.

Reading the results

<base>.results.csv (single/multi) carries, per band:
x0,y0,W,H (ROI), Mean, IntDen, Area, Min, Max, BackgroundMean,
NetIntegratedDensity, RelativeExpression (or NormalizedToRef).

The stacked variant adds Ratio_Target_Ctrl and Normalized, and writes
<base>.stacked.csv.

Always look at the generated <base>.overlay.png before reporting
numbers.
It draws every ROI on the original image. A mis-placed ROI is the
single most common failure mode and is obvious at a glance; the numbers alone
will look perfectly plausible.

What can go wrong (and why we handle it)

These are not hypothetical — each one produced a wrong answer on a real image
before being fixed. Full evidence in references/troubleshooting.md.

  1. Palette PNG with transparency. Image.open(p).convert("L") on a PNG
    with a transparency table silently corrupts the array: transparent pixels
    become pure black, and on a real 415×125 composite that was 25,278 of
    51,875 pixels. Everything must be composited onto a white canvas first.
  2. But compositing onto white alone is not enough. The transparent border
    used to become black, and the "skip the pure-black scan border" logic
    depended on that. Turn it white and the black frame rows enter the search
    window — the darkest row then lands on the border instead of the band.
    Both the alpha compositing and a border rule that handles black and
    white margins must be present together.
  3. A flat, dark edge line is darker than the real band. Screenshots leave
    a 1-pixel line behind whose value is often below the darkest band pixel.
    It must never win the argmin. Distinguishing feature, measured on real
    scans: such rows have a spread (p90 − p10) of exactly 0, while genuine
    imaged membrane rows never dropped below ~10.

Verifying a real analysis

  • Check <base>.overlay.png — ROIs on the bands, not on borders or the label.
  • Compare BackgroundMean across lanes: it should be similar. A lane whose
    background is far lower has a border or a region of interest inside it.
  • Sanity-check the span of RelativeExpression. A fold-difference above ~5×
    usually means an ROI is misplaced or a band saturated.
  • State the reference lane explicitly in any reported result.

Parameter reference

Flag Default Meaning
--lanes 4 (auto for stacked) vertical lanes across the frame
--band-half 5 ROI half-height in rows (ROI = 2h+1 rows)
--ref-lane 1 lane normalized to 1.000
--max-bands 2 max bands searched per lane (multi only)
--min-dist 15 min row gap between two accepted bands
--prominence 8.0 min grey-level prominence to accept a band
--bg-top-rows 7 rows used as background (multi only)

Details, derivations and the full rationale for each threshold are in
references/algorithm.md.

Loading-volume normalization

For "all lanes were loaded with 10 µL but actin is uneven — if lane 1 gets
5 µL, what should the rest get?":

NetIntDen ∝ C_i × V_i           V_i = V_ref × (Actin_ref / Actin_i)

The original volume cancels out — the answer depends only on the relative
actin signals. Prefer the recommended protocol (take different sample volumes
but pad every lane to the same final volume with 1× loading buffer), otherwise
lane-to-lane salt/detergent differences distort the bands. Derivation, worked
examples and the caveats you must state are in
references/loading-volume.md.

Files

SKILL.md
scripts/measure_bands.py            single band per lane
scripts/measure_multi_bands.py      one or two bands per lane
scripts/measure_stacked_blots.py    stacked co-IP frames (or single control strip)
scripts/calc_loading_volume.py      loading-volume plan from a stacked CSV
scripts/make_test_image.py          synthetic blot generator + self-check
references/algorithm.md             full algorithm, ImageJ parity, thresholds
references/troubleshooting.md       pitfall library with measured evidence
references/loading-volume.md        loading-volume theory and worked examples

常见问题

5 问
答案由本站依据条目字段整理
WB 条带灰度定量怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_26bbdea0/wb-band-grayscale-quantification。安装方式为未标注。装完刷新技能列表或重开客户端。

WB 条带灰度定量支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

WB 条带灰度定量权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

WB 条带灰度定量收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

WB 条带灰度定量用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。