 
# CSF
Airborne LiDAR filtering method based on Cloth Simulation.
This is the code for the article:
W. Zhang, J. Qi*, P. Wan, H. Wang, D. Xie, X. Wang, and G. Yan, “An Easy-to-Use Airborne LiDAR Data Filtering Method Based on Cloth Simulation,” Remote Sens., vol. 8, no. 6, p. 501, 2016.
(http://www.mdpi.com/2072-4292/8/6/501/htm)
**New feature has been implemented:**
Now, We has wrapped a Python interface for CSF with swig. It is simpler to use now. This new feature can make CSF easier to be embeded into a large project. For example, it can work with Laspy (https://github.com/laspy/laspy). What you do is just read a point cloud into a python 2D list, and pass it to CSF.
The following example shows how to use it with laspy.
```python
# coding: utf-8
import laspy
import CSF
import numpy as np
inFile = laspy.read(r"in.las") # read a las file
points = inFile.points
xyz = np.vstack((inFile.x, inFile.y, inFile.z)).transpose() # extract x, y, z and put into a list
csf = CSF.CSF()
# prameter settings
csf.params.bSloopSmooth = False
csf.params.cloth_resolution = 0.5
# more details about parameter: http://ramm.bnu.edu.cn/projects/CSF/download/
csf.setPointCloud(xyz)
ground = CSF.VecInt() # a list to indicate the index of ground points after calculation
non_ground = CSF.VecInt() # a list to indicate the index of non-ground points after calculation
csf.do_filtering(ground, non_ground) # do actual filtering.
outFile = laspy.LasData(inFile.header)
outFile.points = points[np.array(ground)] # extract ground points, and save it to a las file.
out_file.write(r"out.las")
```
**Reading data from txt file:**
If the lidar data is stored in txt file (x y z for each line), it can also be imported directly.
```python
import CSF
csf = CSF.CSF()
csf.readPointsFromFile('samp52.txt')
csf.params.bSloopSmooth = False
csf.params.cloth_resolution = 0.5
ground = CSF.VecInt() # a list to indicate the index of ground points after calculation
non_ground = CSF.VecInt() # a list to indicate the index of non-ground points after calculation
csf.do_filtering(ground, non_ground) # do actual filtering.
csf.savePoints(ground,"ground.txt")
```
### How to use CSF in Python
Thanks to [@rjanvier](https://github.com/rjanvier)'s contribution. Now we can install CSF from pip as:
```python
pip install cloth-simulation-filter
```
### How to use CSF in Matlab
see more details from file `demo_mex.m` under matlab folder.
### How to use CSF in R
Thanks to the nice work of @Jean-Romain, through the collaboration, the CSF has been made as a R package, the details can be found in the [RCSF repository](https://github.com/Jean-Romain/RCSF). This package can be used easily with the [lidR package](https://github.com/Jean-Romain/lidR):
```r
library(lidR)
las <- readLAS("file.las")
las <- lasground(las, csf())
```
### How to use CSF in C++
Now, CSF is built by CMake, it produces a static library, which can be used by other c++ programs.
#### linux
To build the library, run:
```bash
mkdir build #or other name
cd build
cmake ..
make
sudo make install
```
or if you want to build the library and the demo executable `csfdemo`
```bash
mkdir build #or other name
cd build
cmake -DBUILD_DEMO=ON ..
make
sudo make install
```
#### Windows
You can use CMake GUI to generate visual studio solution file.
### Binary Version
For binary release version, it can be downloaded at: http://ramm.bnu.edu.cn/projects/CSF/download/
Note: This code has been changed a lot since the publication of the corresponding paper. A lot of optimizations have been made. We are still working on it, and wish it could be better.
### Cloudcompare Pulgin
At last, if you are interested in Cloudcompare, there is a good news. our method has been implemented as a Cloudcompare plugin, you can refer to : https://github.com/cloudcompare/trunk
### Related project
A tool named `CSFTools` has been recently released, it is based on CSF, and provides dem/chm generation, normalization. Please refer to: https://github.com/jianboqi/CSFTools
### License
CSF is maintained and developed by Jianbo QI. It is now released under Apache 2.0.
Raw data
{
"_id": null,
"home_page": "http://ramm.bnu.edu.cn/projects/CSF/",
"name": "cloth-simulation-filter",
"maintainer": "Jianbo Qi",
"docs_url": null,
"requires_python": null,
"maintainer_email": "jianboqi@126.com",
"keywords": "LiDAR DTM DSM Classification",
"author": "Jianbo Qi",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/70/a5/d1f38ded4370a36ac3492d7fe96dfa615cf201fa37926de4485041e87ef7/cloth_simulation_filter-1.1.7.tar.gz",
"platform": null,
"description": " \n# CSF\nAirborne LiDAR filtering method based on Cloth Simulation.\nThis is the code for the article:\n\nW. Zhang, J. Qi*, P. Wan, H. Wang, D. Xie, X. Wang, and G. Yan, \u201cAn Easy-to-Use Airborne LiDAR Data Filtering Method Based on Cloth Simulation,\u201d Remote Sens., vol. 8, no. 6, p. 501, 2016.\n(http://www.mdpi.com/2072-4292/8/6/501/htm)\n\n\n**New feature has been implemented:**\n\nNow, We has wrapped a Python interface for CSF with swig. It is simpler to use now. This new feature can make CSF easier to be embeded into a large project. For example, it can work with Laspy (https://github.com/laspy/laspy). What you do is just read a point cloud into a python 2D list, and pass it to CSF.\nThe following example shows how to use it with laspy.\n```python\n# coding: utf-8\nimport laspy\nimport CSF\nimport numpy as np\n\ninFile = laspy.read(r\"in.las\") # read a las file\npoints = inFile.points\nxyz = np.vstack((inFile.x, inFile.y, inFile.z)).transpose() # extract x, y, z and put into a list\n\ncsf = CSF.CSF()\n\n# prameter settings\ncsf.params.bSloopSmooth = False\ncsf.params.cloth_resolution = 0.5\n# more details about parameter: http://ramm.bnu.edu.cn/projects/CSF/download/\n\ncsf.setPointCloud(xyz)\nground = CSF.VecInt() # a list to indicate the index of ground points after calculation\nnon_ground = CSF.VecInt() # a list to indicate the index of non-ground points after calculation\ncsf.do_filtering(ground, non_ground) # do actual filtering.\n\noutFile = laspy.LasData(inFile.header)\noutFile.points = points[np.array(ground)] # extract ground points, and save it to a las file.\nout_file.write(r\"out.las\")\n```\n\n**Reading data from txt file:**\n\nIf the lidar data is stored in txt file (x y z for each line), it can also be imported directly.\n\n```python\nimport CSF\n\ncsf = CSF.CSF()\ncsf.readPointsFromFile('samp52.txt')\n\ncsf.params.bSloopSmooth = False\ncsf.params.cloth_resolution = 0.5\n\nground = CSF.VecInt() # a list to indicate the index of ground points after calculation\nnon_ground = CSF.VecInt() # a list to indicate the index of non-ground points after calculation\ncsf.do_filtering(ground, non_ground) # do actual filtering.\ncsf.savePoints(ground,\"ground.txt\")\n```\n\n### How to use CSF in Python\nThanks to [@rjanvier](https://github.com/rjanvier)'s contribution. Now we can install CSF from pip as:\n```python\npip install cloth-simulation-filter\n```\n\n### How to use CSF in Matlab\nsee more details from file `demo_mex.m` under matlab folder.\n\n### How to use CSF in R\n\nThanks to the nice work of @Jean-Romain, through the collaboration, the CSF has been made as a R package, the details can be found in the [RCSF repository](https://github.com/Jean-Romain/RCSF). This package can be used easily with the [lidR package](https://github.com/Jean-Romain/lidR):\n\n```r\nlibrary(lidR)\nlas <- readLAS(\"file.las\")\nlas <- lasground(las, csf())\n```\n\n### How to use CSF in C++\nNow, CSF is built by CMake, it produces a static library, which can be used by other c++ programs.\n#### linux\nTo build the library, run:\n```bash\nmkdir build #or other name\ncd build\ncmake ..\nmake\nsudo make install\n```\nor if you want to build the library and the demo executable `csfdemo`\n\n```bash\nmkdir build #or other name\ncd build\ncmake -DBUILD_DEMO=ON ..\nmake\nsudo make install\n\n```\n\n#### Windows\nYou can use CMake GUI to generate visual studio solution file.\n\n### Binary Version\nFor binary release version, it can be downloaded at: http://ramm.bnu.edu.cn/projects/CSF/download/\n\nNote: This code has been changed a lot since the publication of the corresponding paper. A lot of optimizations have been made. We are still working on it, and wish it could be better.\n\n### Cloudcompare Pulgin\nAt last, if you are interested in Cloudcompare, there is a good news. our method has been implemented as a Cloudcompare plugin, you can refer to : https://github.com/cloudcompare/trunk\n\n### Related project\nA tool named `CSFTools` has been recently released, it is based on CSF, and provides dem/chm generation, normalization. Please refer to: https://github.com/jianboqi/CSFTools\n\n### License\nCSF is maintained and developed by Jianbo QI. It is now released under Apache 2.0.\n\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "CSF: Ground Filtering based on Cloth Simulation",
"version": "1.1.7",
"project_urls": {
"Homepage": "http://ramm.bnu.edu.cn/projects/CSF/"
},
"split_keywords": [
"lidar",
"dtm",
"dsm",
"classification"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "9e7c5e6a876e0494a220023465270d8a89a87a0d4074082733e3011821e6eda5",
"md5": "0d19c9dbe11a0240412e17907381a149",
"sha256": "7a353280704dbd29d6e275f5273f01d5b33a6fad810ed603da9540243980c451"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "0d19c9dbe11a0240412e17907381a149",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 138361,
"upload_time": "2025-08-13T12:17:12",
"upload_time_iso_8601": "2025-08-13T12:17:12.876796Z",
"url": "https://files.pythonhosted.org/packages/9e/7c/5e6a876e0494a220023465270d8a89a87a0d4074082733e3011821e6eda5/cloth_simulation_filter-1.1.7-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cfc41cf64ff63f9fa506194c10b80205b38d6027ba00196d736a3005b1e1025b",
"md5": "ddcdcac3340b5d5843a3e63ed3e6a612",
"sha256": "e8899ef1aa60752fde52eb099fc70dbb1468fdf21f36c5e23b96493577369802"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "ddcdcac3340b5d5843a3e63ed3e6a612",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 1498674,
"upload_time": "2025-08-13T12:17:14",
"upload_time_iso_8601": "2025-08-13T12:17:14.095898Z",
"url": "https://files.pythonhosted.org/packages/cf/c4/1cf64ff63f9fa506194c10b80205b38d6027ba00196d736a3005b1e1025b/cloth_simulation_filter-1.1.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7b8937a447fdc8fb38d0554f8380d50b5f2ea8749ba9ec3d234f9ae84b9a68a0",
"md5": "a7c2ee9f8b0aa0674bf0d06d60e7932e",
"sha256": "7456e468a356dc4efc5ed0f911b4d96318abbd80ac0f13494ba836f9720bcf39"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "a7c2ee9f8b0aa0674bf0d06d60e7932e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 1536405,
"upload_time": "2025-08-13T12:17:15",
"upload_time_iso_8601": "2025-08-13T12:17:15.567507Z",
"url": "https://files.pythonhosted.org/packages/7b/89/37a447fdc8fb38d0554f8380d50b5f2ea8749ba9ec3d234f9ae84b9a68a0/cloth_simulation_filter-1.1.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7904debf6142bea4554395e8843c1725c82924e137ef201cfdcb01a6b3b64086",
"md5": "1a1cce086e4bc9b35a897e3b44c4cc45",
"sha256": "a5f12392579d51bcc4005dd8270ae258e27ed2e2f749e90199dddead63eb1dcb"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp310-cp310-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "1a1cce086e4bc9b35a897e3b44c4cc45",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 2051147,
"upload_time": "2025-08-13T12:17:16",
"upload_time_iso_8601": "2025-08-13T12:17:16.947644Z",
"url": "https://files.pythonhosted.org/packages/79/04/debf6142bea4554395e8843c1725c82924e137ef201cfdcb01a6b3b64086/cloth_simulation_filter-1.1.7-cp310-cp310-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e30092f72cd7600e099c7e7b684c73941356794358c690da967993b77a576e06",
"md5": "f8315e80e9d7f509d959630bb2f6f555",
"sha256": "c6e45963609f1d58820ef1fa251d9aaeb52625c75be8e792215464da081ceed1"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp310-cp310-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "f8315e80e9d7f509d959630bb2f6f555",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 2056456,
"upload_time": "2025-08-13T12:17:18",
"upload_time_iso_8601": "2025-08-13T12:17:18.797268Z",
"url": "https://files.pythonhosted.org/packages/e3/00/92f72cd7600e099c7e7b684c73941356794358c690da967993b77a576e06/cloth_simulation_filter-1.1.7-cp310-cp310-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6c453adf583d0aeaaae17973bb4e3d572c6318c1aafb7a13259692540cfe5a35",
"md5": "14ad8e8cfdcd1bdacc240cea5f4b5333",
"sha256": "2e43172a01c83b88add29b8df02e72d15b93657c5c27d48609ea6b15bd04d770"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "14ad8e8cfdcd1bdacc240cea5f4b5333",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 105545,
"upload_time": "2025-08-13T12:17:20",
"upload_time_iso_8601": "2025-08-13T12:17:20.155928Z",
"url": "https://files.pythonhosted.org/packages/6c/45/3adf583d0aeaaae17973bb4e3d572c6318c1aafb7a13259692540cfe5a35/cloth_simulation_filter-1.1.7-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "c52b39197c714b515aa28ad419047b1fea852af5895fadb78c84f96fdbde8bb1",
"md5": "59d2a10819ba4c2b62d014f78d0d9fc1",
"sha256": "7b008376681aaf5a5cb59b853061c0cd0f439a693359dda688f24480c5641783"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "59d2a10819ba4c2b62d014f78d0d9fc1",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 128143,
"upload_time": "2025-08-13T12:17:21",
"upload_time_iso_8601": "2025-08-13T12:17:21.026420Z",
"url": "https://files.pythonhosted.org/packages/c5/2b/39197c714b515aa28ad419047b1fea852af5895fadb78c84f96fdbde8bb1/cloth_simulation_filter-1.1.7-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f63d97a3e66774e9e44ef356b0bad2f2820a95d6d535a6f639772991edacea00",
"md5": "2222f3a6c5bb19dc6eefcf0d6bc6f9d6",
"sha256": "6f632a90270b0c6dcf14dae0fea20ab68e3d28c86beb79f5e775f54c7eec43a0"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "2222f3a6c5bb19dc6eefcf0d6bc6f9d6",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 138370,
"upload_time": "2025-08-13T12:17:23",
"upload_time_iso_8601": "2025-08-13T12:17:23.988813Z",
"url": "https://files.pythonhosted.org/packages/f6/3d/97a3e66774e9e44ef356b0bad2f2820a95d6d535a6f639772991edacea00/cloth_simulation_filter-1.1.7-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "459a61376a463f86a3b0ed128b948ff502d7278f06d8d4250130340e3806954e",
"md5": "c00adcec4c341fc91bb4d59419aaf392",
"sha256": "ab70a9183fc7dda5ccc0a9f9e8db0297abe6aaf959e0bd52cb73d0e16bdc283d"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "c00adcec4c341fc91bb4d59419aaf392",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 1513175,
"upload_time": "2025-08-13T12:17:24",
"upload_time_iso_8601": "2025-08-13T12:17:24.970945Z",
"url": "https://files.pythonhosted.org/packages/45/9a/61376a463f86a3b0ed128b948ff502d7278f06d8d4250130340e3806954e/cloth_simulation_filter-1.1.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7212bf0a5da6488d4ed436c3728e440496b81e860024dac2bb17ccb4a7245396",
"md5": "bfa51ac2bfc3fbe4adfc92ab2b329b4a",
"sha256": "c3daaf66bc0885646d3a912cb995b1f6d5358f4611d029b29c5cc234abb53ed0"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "bfa51ac2bfc3fbe4adfc92ab2b329b4a",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 1554026,
"upload_time": "2025-08-13T12:17:27",
"upload_time_iso_8601": "2025-08-13T12:17:27.752665Z",
"url": "https://files.pythonhosted.org/packages/72/12/bf0a5da6488d4ed436c3728e440496b81e860024dac2bb17ccb4a7245396/cloth_simulation_filter-1.1.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9363ed922e90ec6408446b79331b3b2d8e26c4e97fd4c0f0e0811913b227ddcd",
"md5": "d9543a92954fd2780b952d317d803798",
"sha256": "c02644c23f21562a731956b9c72509f158118b0506e6ce85bd87128955052af1"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp311-cp311-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "d9543a92954fd2780b952d317d803798",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 2064105,
"upload_time": "2025-08-13T12:17:28",
"upload_time_iso_8601": "2025-08-13T12:17:28.916632Z",
"url": "https://files.pythonhosted.org/packages/93/63/ed922e90ec6408446b79331b3b2d8e26c4e97fd4c0f0e0811913b227ddcd/cloth_simulation_filter-1.1.7-cp311-cp311-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f46fde4ca9adc0cf9aeb90edd4153615263e70ea42a544509f653261da1ba906",
"md5": "518d27898a39c975978f4caabfe1c553",
"sha256": "f3aaf4e8d4b92e9ba827ce0ed12399c380214c2649caff5b997e7f0d63394d23"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp311-cp311-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "518d27898a39c975978f4caabfe1c553",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 2069046,
"upload_time": "2025-08-13T12:17:30",
"upload_time_iso_8601": "2025-08-13T12:17:30.543860Z",
"url": "https://files.pythonhosted.org/packages/f4/6f/de4ca9adc0cf9aeb90edd4153615263e70ea42a544509f653261da1ba906/cloth_simulation_filter-1.1.7-cp311-cp311-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2ce0de58e07d764e6d8e58fa4690ee52eb722146f53b625bc4b170e08ff71c1e",
"md5": "b45a034632c5e266b79ff15bfc7879cc",
"sha256": "2d1851374210607fb2fd30cb0cdcb5b6665500a793ba943d149888055c25f1aa"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "b45a034632c5e266b79ff15bfc7879cc",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 105550,
"upload_time": "2025-08-13T12:17:31",
"upload_time_iso_8601": "2025-08-13T12:17:31.597012Z",
"url": "https://files.pythonhosted.org/packages/2c/e0/de58e07d764e6d8e58fa4690ee52eb722146f53b625bc4b170e08ff71c1e/cloth_simulation_filter-1.1.7-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2d8a1a0d4bf14986cdc3e6a6682e7df3e264214654a94f341294c30406a87dd3",
"md5": "44def10f615d88233c35112078dd8f5d",
"sha256": "ec5a37d9e036bfac6eb8343a9b1c8f447f3c840237f06068b6c5c9b2b9bfd05d"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "44def10f615d88233c35112078dd8f5d",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 128148,
"upload_time": "2025-08-13T12:17:32",
"upload_time_iso_8601": "2025-08-13T12:17:32.685574Z",
"url": "https://files.pythonhosted.org/packages/2d/8a/1a0d4bf14986cdc3e6a6682e7df3e264214654a94f341294c30406a87dd3/cloth_simulation_filter-1.1.7-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "04bea62a99c21f79d88590a2904352629987ba775e7f80ef0482377f884ad7d8",
"md5": "f169fa961a8d99c81e81b914154942ab",
"sha256": "5db645da68d04efb788a305248ceb18338505039ffdc59d95e5a7d10257f3113"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "f169fa961a8d99c81e81b914154942ab",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 138941,
"upload_time": "2025-08-13T12:17:33",
"upload_time_iso_8601": "2025-08-13T12:17:33.478848Z",
"url": "https://files.pythonhosted.org/packages/04/be/a62a99c21f79d88590a2904352629987ba775e7f80ef0482377f884ad7d8/cloth_simulation_filter-1.1.7-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2636da0637feb725abeebebd6e22595f0d0f3b030473cc33e20c32fe30df73c5",
"md5": "8374afbc8caa7c17d4a9e9c898edf321",
"sha256": "5c797c22f4f0a1fef6e6e3667e834ce17fc37f83562ba4c861b0376f8bc87653"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "8374afbc8caa7c17d4a9e9c898edf321",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 1522288,
"upload_time": "2025-08-13T12:17:34",
"upload_time_iso_8601": "2025-08-13T12:17:34.465063Z",
"url": "https://files.pythonhosted.org/packages/26/36/da0637feb725abeebebd6e22595f0d0f3b030473cc33e20c32fe30df73c5/cloth_simulation_filter-1.1.7-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5614f2217adeda49fc38620dffae12a6fdd41e95268378e01a5e4b18e36db293",
"md5": "43ced3b65a708633e0f2816a329cb8b3",
"sha256": "fa51801b9696dc9f772701850a1fdc7a83e22725bac5f0f445b5b96a25ea03c2"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "43ced3b65a708633e0f2816a329cb8b3",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 1565551,
"upload_time": "2025-08-13T12:17:36",
"upload_time_iso_8601": "2025-08-13T12:17:36.262385Z",
"url": "https://files.pythonhosted.org/packages/56/14/f2217adeda49fc38620dffae12a6fdd41e95268378e01a5e4b18e36db293/cloth_simulation_filter-1.1.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e648ac87e258f51d53987a1379dff997ee6afdb0a0efb2aeb8b066b320810a27",
"md5": "fb92822173109034852b1c8002ace511",
"sha256": "dade01662ff9bf98914bb5f575b80fdde06c4f2ef1b8822421c979bbc089fad0"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp312-cp312-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "fb92822173109034852b1c8002ace511",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 2064966,
"upload_time": "2025-08-13T12:17:37",
"upload_time_iso_8601": "2025-08-13T12:17:37.595449Z",
"url": "https://files.pythonhosted.org/packages/e6/48/ac87e258f51d53987a1379dff997ee6afdb0a0efb2aeb8b066b320810a27/cloth_simulation_filter-1.1.7-cp312-cp312-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5b152304b2d0cf9da48bee9ec30fcee677345629524f92f92f7829eb24c7e810",
"md5": "7efa881c39640115404b7cb818847c51",
"sha256": "759348d53f43a62c86b88ee2a93ce5d689469ee7b2f27f1633aeec07798f0f02"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp312-cp312-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "7efa881c39640115404b7cb818847c51",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 2075243,
"upload_time": "2025-08-13T12:17:38",
"upload_time_iso_8601": "2025-08-13T12:17:38.790451Z",
"url": "https://files.pythonhosted.org/packages/5b/15/2304b2d0cf9da48bee9ec30fcee677345629524f92f92f7829eb24c7e810/cloth_simulation_filter-1.1.7-cp312-cp312-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "80ea391e64fd1628b279554274338a226479b504cea074032c9de3eca2c36466",
"md5": "2564ae0b098563413ee7ae2bdd230332",
"sha256": "8fb3454b149257126e2537f4c7e97ff43125c5e0560d71ab879afa2b842e1183"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp312-cp312-win32.whl",
"has_sig": false,
"md5_digest": "2564ae0b098563413ee7ae2bdd230332",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 105849,
"upload_time": "2025-08-13T12:17:39",
"upload_time_iso_8601": "2025-08-13T12:17:39.776844Z",
"url": "https://files.pythonhosted.org/packages/80/ea/391e64fd1628b279554274338a226479b504cea074032c9de3eca2c36466/cloth_simulation_filter-1.1.7-cp312-cp312-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b2df38b0b7545de7c3ac7cbbed415fb8dee32ec7279c82548f19a8f7599034a6",
"md5": "ea24e2f684b9e02e7a618255161a2b53",
"sha256": "400d7077ab4578396a0b498e3184d4567061fab609856c5c7bfb40a6588795e7"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "ea24e2f684b9e02e7a618255161a2b53",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 128119,
"upload_time": "2025-08-13T12:17:40",
"upload_time_iso_8601": "2025-08-13T12:17:40.632885Z",
"url": "https://files.pythonhosted.org/packages/b2/df/38b0b7545de7c3ac7cbbed415fb8dee32ec7279c82548f19a8f7599034a6/cloth_simulation_filter-1.1.7-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f334660b494226e2acf8ad4b08428df51558288ed1868ba5da730a21e1019959",
"md5": "2f22772aeba2dcb51e160872e42c8858",
"sha256": "341085425198f8fa13143aeb4f26cabc07b0d02a0743231180b28c15bffe7ca8"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "2f22772aeba2dcb51e160872e42c8858",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 138259,
"upload_time": "2025-08-13T12:17:41",
"upload_time_iso_8601": "2025-08-13T12:17:41.417974Z",
"url": "https://files.pythonhosted.org/packages/f3/34/660b494226e2acf8ad4b08428df51558288ed1868ba5da730a21e1019959/cloth_simulation_filter-1.1.7-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b9e249589c1758c40d2bdf19ff6843cd9002f549c5557b13da8a386b0d534a58",
"md5": "c019a85f7091a2c7e33039125eb76378",
"sha256": "22a7c8680e8cd8dd0bfae05410843389e869d4cc11c620c3ade1d68a55c0cf5a"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "c019a85f7091a2c7e33039125eb76378",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 1497960,
"upload_time": "2025-08-13T12:17:42",
"upload_time_iso_8601": "2025-08-13T12:17:42.402741Z",
"url": "https://files.pythonhosted.org/packages/b9/e2/49589c1758c40d2bdf19ff6843cd9002f549c5557b13da8a386b0d534a58/cloth_simulation_filter-1.1.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0de28bcebc7fbac999cbf8d98c3b6d4a5aff4dee5dc78a65f23c8513327200db",
"md5": "25cf43868ba27502abb852416b9e3428",
"sha256": "cf0497da1dbed2025dee99272958540473c30a4fa53edfd0eeff13a6e5d51a8c"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "25cf43868ba27502abb852416b9e3428",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 1535676,
"upload_time": "2025-08-13T12:17:43",
"upload_time_iso_8601": "2025-08-13T12:17:43.683958Z",
"url": "https://files.pythonhosted.org/packages/0d/e2/8bcebc7fbac999cbf8d98c3b6d4a5aff4dee5dc78a65f23c8513327200db/cloth_simulation_filter-1.1.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5e5be941777a9682f4a99a02076017c1290284c7d16206f3c1e1bbce4209410c",
"md5": "8caffe49fa0028841dcfd236e5cf26d0",
"sha256": "c5b6f4b6dbbe308450949ca32f4892be507ca0edbffaa6da7a998ff2da7f902c"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp39-cp39-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "8caffe49fa0028841dcfd236e5cf26d0",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 2049998,
"upload_time": "2025-08-13T12:17:44",
"upload_time_iso_8601": "2025-08-13T12:17:44.906896Z",
"url": "https://files.pythonhosted.org/packages/5e/5b/e941777a9682f4a99a02076017c1290284c7d16206f3c1e1bbce4209410c/cloth_simulation_filter-1.1.7-cp39-cp39-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7a872a393759461ce4b22afff4bc4313241fd334220b7de4ec4d0b312a0a3afd",
"md5": "f6c59c37fb44287cc6b106f6cae264fd",
"sha256": "73df641fd98c748cf43bae9bf297e215289d573de31564059f80e62ae6feb804"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp39-cp39-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "f6c59c37fb44287cc6b106f6cae264fd",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 2056350,
"upload_time": "2025-08-13T12:17:46",
"upload_time_iso_8601": "2025-08-13T12:17:46.622437Z",
"url": "https://files.pythonhosted.org/packages/7a/87/2a393759461ce4b22afff4bc4313241fd334220b7de4ec4d0b312a0a3afd/cloth_simulation_filter-1.1.7-cp39-cp39-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6a6e1de05aed053665e6243ba9d6cbad47f207648a56e3a7a66e21f40b28990d",
"md5": "dc1d6b27f66c93a98ef565f5c69d4c0a",
"sha256": "1a8fd8f47bf2bbf8407515b3bdfd7c8dfc65d9f89d17719f2a1d968250d0cab8"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "dc1d6b27f66c93a98ef565f5c69d4c0a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 105449,
"upload_time": "2025-08-13T12:17:47",
"upload_time_iso_8601": "2025-08-13T12:17:47.745376Z",
"url": "https://files.pythonhosted.org/packages/6a/6e/1de05aed053665e6243ba9d6cbad47f207648a56e3a7a66e21f40b28990d/cloth_simulation_filter-1.1.7-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6ebc7bbfceb0216701859f747d0e23d910e9f9a075ee71ece8902e29e21df498",
"md5": "8bd43a387f34beecc2dc9b9ec62e94b5",
"sha256": "2205074bcd95c098cfc8901d2b0adcdabba4def913e76bfed9b3c1d793eb6dfe"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "8bd43a387f34beecc2dc9b9ec62e94b5",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 128305,
"upload_time": "2025-08-13T12:17:48",
"upload_time_iso_8601": "2025-08-13T12:17:48.606511Z",
"url": "https://files.pythonhosted.org/packages/6e/bc/7bbfceb0216701859f747d0e23d910e9f9a075ee71ece8902e29e21df498/cloth_simulation_filter-1.1.7-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "70a5d1f38ded4370a36ac3492d7fe96dfa615cf201fa37926de4485041e87ef7",
"md5": "bcda05e608ac798a82e6cb2b20415b29",
"sha256": "6e93c7400dd5dc7a94c1d4cb4ac239c0e8e9bde4bcbdd780e8b46bc57828b0b7"
},
"downloads": -1,
"filename": "cloth_simulation_filter-1.1.7.tar.gz",
"has_sig": false,
"md5_digest": "bcda05e608ac798a82e6cb2b20415b29",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 84889,
"upload_time": "2025-08-13T12:17:11",
"upload_time_iso_8601": "2025-08-13T12:17:11.603361Z",
"url": "https://files.pythonhosted.org/packages/70/a5/d1f38ded4370a36ac3492d7fe96dfa615cf201fa37926de4485041e87ef7/cloth_simulation_filter-1.1.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-13 12:17:11",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "cloth-simulation-filter"
}